summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CleanSpec.mk2
-rw-r--r--api/current.txt190
-rw-r--r--cmds/dumpstate/dumpstate.c7
-rw-r--r--cmds/stagefright/stream.cpp37
-rw-r--r--core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl80
-rw-r--r--core/java/android/app/ActivityManager.java18
-rw-r--r--core/java/android/app/WallpaperManager.java66
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java31
-rw-r--r--core/java/android/content/AbstractThreadedSyncAdapter.java45
-rw-r--r--core/java/android/content/SyncAdapterType.java24
-rw-r--r--core/java/android/content/SyncAdaptersCache.java5
-rw-r--r--core/java/android/content/res/Configuration.java1
-rw-r--r--core/java/android/hardware/Camera.java2
-rw-r--r--core/java/android/net/MobileDataStateTracker.java20
-rw-r--r--core/java/android/net/NetworkStats.java24
-rw-r--r--core/java/android/net/NetworkStatsHistory.java50
-rw-r--r--core/java/android/net/TrafficStats.java12
-rw-r--r--core/java/android/nfc/INdefPushCallback.aidl4
-rw-r--r--core/java/android/nfc/INfcAdapter.aidl21
-rw-r--r--core/java/android/nfc/INfcTag.aidl2
-rw-r--r--core/java/android/nfc/NfcActivityManager.java217
-rw-r--r--core/java/android/nfc/NfcAdapter.java449
-rw-r--r--core/java/android/nfc/NfcEvent.java44
-rw-r--r--core/java/android/nfc/NfcFragment.java83
-rw-r--r--core/java/android/nfc/NfcManager.java2
-rw-r--r--core/java/android/nfc/TransceiveResult.java51
-rw-r--r--core/java/android/nfc/tech/BasicTagTechnology.java20
-rw-r--r--core/java/android/nfc/tech/IsoDep.java11
-rw-r--r--core/java/android/nfc/tech/MifareClassic.java11
-rw-r--r--core/java/android/nfc/tech/MifareUltralight.java11
-rw-r--r--core/java/android/nfc/tech/Ndef.java8
-rw-r--r--core/java/android/nfc/tech/NfcA.java11
-rw-r--r--core/java/android/nfc/tech/NfcB.java11
-rw-r--r--core/java/android/nfc/tech/NfcF.java11
-rw-r--r--core/java/android/nfc/tech/NfcV.java12
-rw-r--r--core/java/android/preference/DialogPreference.java3
-rw-r--r--core/java/android/provider/CalendarContract.java6
-rw-r--r--core/java/android/provider/ContactsContract.java45
-rw-r--r--core/java/android/provider/Settings.java47
-rwxr-xr-xcore/java/android/server/BluetoothService.java9
-rw-r--r--core/java/android/text/Html.java4
-rw-r--r--core/java/android/text/SpannableStringBuilder.java125
-rw-r--r--core/java/android/text/TextDirectionHeuristics.java28
-rw-r--r--core/java/android/text/TextUtils.java14
-rw-r--r--core/java/android/text/method/WordIterator.java4
-rw-r--r--core/java/android/text/style/SpellCheckSpan.java64
-rw-r--r--core/java/android/text/style/SuggestionRangeSpan.java51
-rw-r--r--core/java/android/text/style/SuggestionSpan.java17
-rw-r--r--core/java/android/util/LocaleUtil.java30
-rw-r--r--core/java/android/view/GLES20Canvas.java21
-rw-r--r--core/java/android/view/HardwareRenderer.java67
-rw-r--r--core/java/android/view/Surface.java28
-rw-r--r--core/java/android/view/View.java45
-rw-r--r--core/java/android/view/ViewGroup.java9
-rw-r--r--core/java/android/view/ViewRootImpl.java233
-rw-r--r--core/java/android/view/accessibility/AccessibilityInteractionClient.java462
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java41
-rw-r--r--core/java/android/view/accessibility/AccessibilityRecord.java11
-rw-r--r--core/java/android/view/accessibility/IAccessibilityInteractionCallback.aidl54
-rw-r--r--core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl12
-rw-r--r--core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl18
-rw-r--r--core/java/android/view/animation/Animation.java1
-rw-r--r--core/java/android/view/textservice/SpellCheckerInfo.java11
-rw-r--r--core/java/android/view/textservice/SpellCheckerSubtype.java45
-rw-r--r--core/java/android/view/textservice/SuggestionsInfo.java4
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java71
-rw-r--r--core/java/android/webkit/WebView.java159
-rw-r--r--core/java/android/webkit/WebViewCore.java33
-rw-r--r--core/java/android/widget/AbsListView.java13
-rw-r--r--core/java/android/widget/FastScroller.java6
-rw-r--r--core/java/android/widget/SpellChecker.java226
-rw-r--r--core/java/android/widget/Switch.java48
-rw-r--r--core/java/android/widget/TextView.java443
-rw-r--r--core/java/android/widget/ToggleButton.java2
-rw-r--r--core/java/com/android/internal/textservice/ITextServicesManager.aidl5
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuItemView.java27
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java3
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuView.java54
-rw-r--r--core/java/com/android/internal/widget/AbsActionBarView.java15
-rw-r--r--core/java/com/android/internal/widget/ActionBarContextView.java7
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java72
-rw-r--r--core/jni/android_util_Binder.cpp30
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp16
-rw-r--r--core/res/AndroidManifest.xml6
-rw-r--r--core/res/res/anim-sw600dp/activity_close_exit.xml33
-rw-r--r--core/res/res/anim-sw600dp/activity_open_enter.xml35
-rw-r--r--core/res/res/anim-sw600dp/wallpaper_close_enter.xml38
-rw-r--r--core/res/res/anim-sw600dp/wallpaper_close_exit.xml28
-rw-r--r--core/res/res/anim-sw600dp/wallpaper_open_enter.xml28
-rw-r--r--core/res/res/anim-sw600dp/wallpaper_open_exit.xml40
-rw-r--r--core/res/res/anim/activity_close_enter.xml7
-rw-r--r--core/res/res/anim/activity_close_exit.xml11
-rw-r--r--core/res/res/anim/activity_open_enter.xml8
-rw-r--r--core/res/res/anim/activity_open_exit.xml8
-rw-r--r--core/res/res/anim/fast_fade_in.xml (renamed from core/res/res/anim-sw600dp/activity_close_enter.xml)15
-rw-r--r--core/res/res/anim/fast_fade_out.xml (renamed from core/res/res/anim-sw600dp/activity_open_exit.xml)16
-rw-r--r--core/res/res/anim/lock_screen_behind_enter.xml12
-rw-r--r--core/res/res/anim/lock_screen_exit.xml26
-rw-r--r--core/res/res/anim/wallpaper_close_enter.xml44
-rw-r--r--core/res/res/anim/wallpaper_close_exit.xml18
-rw-r--r--core/res/res/anim/wallpaper_open_enter.xml22
-rw-r--r--core/res/res/anim/wallpaper_open_exit.xml35
-rw-r--r--core/res/res/drawable-hdpi/btn_default_disabled_holo.9.pngbin392 -> 338 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_default_focused_holo.9.pngbin583 -> 519 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_default_normal_holo.9.pngbin414 -> 356 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_default_pressed_holo.9.pngbin581 -> 521 bytes
-rw-r--r--core/res/res/drawable-hdpi/combobox_disabled.pngbin705 -> 511 bytes
-rw-r--r--core/res/res/drawable-hdpi/combobox_nohighlight.pngbin877 -> 530 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.pngbin709 -> 626 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.pngbin945 -> 435 bytes
-rw-r--r--core/res/res/drawable-hdpi/menu_hardkey_panel_holo_dark.9.pngbin0 -> 713 bytes
-rw-r--r--core/res/res/drawable-hdpi/menu_hardkey_panel_holo_light.9.pngbin0 -> 641 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_dark.9.pngbin240 -> 246 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.pngbin245 -> 248 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.pngbin481 -> 1478 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.pngbin625 -> 1031 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_16_inner_holo.pngbin673 -> 1608 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_16_outer_holo.pngbin596 -> 1333 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_20_inner_holo.pngbin797 -> 1820 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_20_outer_holo.pngbin705 -> 1463 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_48_inner_holo.pngbin1725 -> 3645 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_48_outer_holo.pngbin1589 -> 2622 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_76_inner_holo.pngbin2763 -> 5421 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_76_outer_holo.pngbin2370 -> 3929 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_adb.pngbin1171 -> 1220 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_left.pngbin1449 -> 1461 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_middle.pngbin1563 -> 1569 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_right.pngbin1503 -> 1506 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_default_holo_dark.9.pngbin171 -> 171 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_default_holo_light.9.pngbin167 -> 162 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_right_default_holo_dark.9.pngbin166 -> 167 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_right_default_holo_light.9.pngbin170 -> 160 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_right_selected_holo_dark.9.pngbin168 -> 181 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.pngbin150 -> 175 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_selected_holo_dark.9.pngbin173 -> 186 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.pngbin157 -> 177 bytes
-rw-r--r--core/res/res/drawable-ldpi/stat_sys_adb.pngbin362 -> 1066 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_default_disabled_holo.9.pngbin300 -> 297 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_default_focused_holo.9.pngbin405 -> 414 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_default_normal_holo.9.pngbin305 -> 302 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_default_pressed_holo.9.pngbin443 -> 423 bytes
-rw-r--r--core/res/res/drawable-mdpi/combobox_disabled.pngbin234 -> 443 bytes
-rw-r--r--core/res/res/drawable-mdpi/combobox_nohighlight.pngbin232 -> 461 bytes
-rw-r--r--core/res/res/drawable-mdpi/menu_hardkey_panel_holo_dark.9.pngbin0 -> 486 bytes
-rw-r--r--core/res/res/drawable-mdpi/menu_hardkey_panel_holo_light.9.pngbin0 -> 474 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.pngbin196 -> 250 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.pngbin206 -> 248 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_dark.9.pngbin352 -> 998 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.pngbin408 -> 775 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_16_inner_holo.pngbin517 -> 1378 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_16_outer_holo.pngbin453 -> 1189 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_20_inner_holo.pngbin586 -> 1479 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_20_outer_holo.pngbin506 -> 1222 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_48_inner_holo.pngbin1192 -> 2571 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_48_outer_holo.pngbin1097 -> 1892 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_76_inner_holo.pngbin1846 -> 3908 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_76_outer_holo.pngbin1640 -> 2816 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_adb.pngbin302 -> 1193 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_left.pngbin974 -> 972 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_middle.pngbin1033 -> 1050 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_right.pngbin994 -> 999 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.pngbin151 -> 164 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.pngbin152 -> 160 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.pngbin149 -> 157 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.pngbin148 -> 156 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.pngbin155 -> 167 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.pngbin151 -> 164 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.pngbin158 -> 178 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.pngbin153 -> 175 bytes
-rw-r--r--core/res/res/drawable-nodpi/platlogo.pngbin46426 -> 2058 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.pngbin511 -> 419 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_focused_holo.9.pngbin827 -> 747 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal_holo.9.pngbin538 -> 469 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.pngbin778 -> 715 bytes
-rw-r--r--core/res/res/drawable-xhdpi/combobox_disabled.pngbin1134 -> 650 bytes
-rw-r--r--core/res/res/drawable-xhdpi/combobox_nohighlight.pngbin2136 -> 675 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_dark.9.pngbin0 -> 997 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_light.9.pngbin0 -> 882 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_dark.9.pngbin330 -> 320 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.pngbin341 -> 301 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.pngbin479 -> 2458 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.pngbin702 -> 1570 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_16_inner_holo.pngbin881 -> 1935 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_16_outer_holo.pngbin763 -> 1504 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_20_inner_holo.pngbin1077 -> 2240 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_20_outer_holo.pngbin938 -> 1669 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_48_inner_holo.pngbin2499 -> 4981 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_48_outer_holo.pngbin2286 -> 3570 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_76_inner_holo.pngbin4116 -> 7567 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_76_outer_holo.pngbin3726 -> 5445 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_adb.pngbin1414 -> 1258 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_left.pngbin1988 -> 1989 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_middle.pngbin2237 -> 2249 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_right.pngbin2154 -> 2182 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_default_holo_dark.9.pngbin190 -> 191 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_default_holo_light.9.pngbin190 -> 176 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_right_default_holo_dark.9.pngbin185 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_right_default_holo_light.9.pngbin189 -> 175 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_dark.9.pngbin189 -> 195 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_light.9.pngbin187 -> 193 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_selected_holo_dark.9.pngbin196 -> 213 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_selected_holo_light.9.pngbin194 -> 208 bytes
-rw-r--r--core/res/res/layout-sw600dp/preference_list_content.xml123
-rw-r--r--core/res/res/layout/grant_credentials_permission.xml12
-rw-r--r--core/res/res/layout/keyguard_screen_password_landscape.xml1
-rw-r--r--core/res/res/layout/keyguard_screen_password_portrait.xml2
-rw-r--r--core/res/res/layout/preference_list_content.xml6
-rw-r--r--core/res/res/layout/preference_list_content_single.xml3
-rw-r--r--core/res/res/values-af/strings.xml113
-rw-r--r--core/res/res/values-am/strings.xml113
-rw-r--r--core/res/res/values-ar/strings.xml115
-rw-r--r--core/res/res/values-bg/strings.xml97
-rw-r--r--core/res/res/values-ca/strings.xml106
-rw-r--r--core/res/res/values-cs/strings.xml116
-rw-r--r--core/res/res/values-da/strings.xml124
-rw-r--r--core/res/res/values-de/strings.xml108
-rw-r--r--core/res/res/values-el/strings.xml116
-rw-r--r--core/res/res/values-en-rGB/strings.xml47
-rw-r--r--core/res/res/values-es-rUS/strings.xml80
-rw-r--r--core/res/res/values-es/strings.xml106
-rw-r--r--core/res/res/values-fa/strings.xml113
-rw-r--r--core/res/res/values-fi/strings.xml106
-rw-r--r--core/res/res/values-fr/strings.xml110
-rw-r--r--core/res/res/values-h720dp/dimens.xml4
-rw-r--r--core/res/res/values-hr/strings.xml107
-rw-r--r--core/res/res/values-hu/strings.xml114
-rw-r--r--core/res/res/values-in/strings.xml137
-rw-r--r--core/res/res/values-it/strings.xml82
-rw-r--r--core/res/res/values-iw/strings.xml206
-rw-r--r--core/res/res/values-ja/strings.xml113
-rw-r--r--core/res/res/values-ko/strings.xml116
-rw-r--r--core/res/res/values-large/styles.xml25
-rw-r--r--core/res/res/values-lt/strings.xml116
-rw-r--r--core/res/res/values-lv/strings.xml106
-rw-r--r--core/res/res/values-ms/strings.xml49
-rw-r--r--core/res/res/values-nb/strings.xml110
-rw-r--r--core/res/res/values-nl/strings.xml106
-rw-r--r--core/res/res/values-pl/strings.xml86
-rw-r--r--core/res/res/values-pt-rPT/strings.xml106
-rw-r--r--core/res/res/values-pt/strings.xml110
-rw-r--r--core/res/res/values-rm/strings.xml38
-rw-r--r--core/res/res/values-ro/strings.xml112
-rw-r--r--core/res/res/values-ru/strings.xml124
-rw-r--r--core/res/res/values-sk/strings.xml116
-rw-r--r--core/res/res/values-sl/strings.xml107
-rw-r--r--core/res/res/values-sr/strings.xml99
-rw-r--r--core/res/res/values-sv/strings.xml108
-rw-r--r--core/res/res/values-sw/strings.xml113
-rw-r--r--core/res/res/values-sw600dp/dimens.xml8
-rw-r--r--core/res/res/values-sw600dp/styles.xml8
-rw-r--r--core/res/res/values-th/strings.xml116
-rw-r--r--core/res/res/values-tl/strings.xml114
-rw-r--r--core/res/res/values-tr/strings.xml99
-rw-r--r--core/res/res/values-uk/strings.xml108
-rw-r--r--core/res/res/values-vi/strings.xml116
-rw-r--r--core/res/res/values-zh-rCN/strings.xml99
-rw-r--r--core/res/res/values-zh-rTW/strings.xml101
-rw-r--r--core/res/res/values-zu/strings.xml113
-rw-r--r--core/res/res/values/arrays.xml2
-rwxr-xr-xcore/res/res/values/attrs.xml14
-rwxr-xr-xcore/res/res/values/config.xml15
-rw-r--r--core/res/res/values/dimens.xml2
-rw-r--r--core/res/res/values/public.xml7
-rwxr-xr-xcore/res/res/values/strings.xml8
-rw-r--r--core/res/res/values/styles.xml30
-rw-r--r--core/res/res/values/themes.xml5
-rw-r--r--core/tests/coretests/res/layout/interrogation_activity.xml36
-rw-r--r--core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java59
-rw-r--r--core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java58
-rw-r--r--core/tests/coretests/src/android/net/NetworkStatsTest.java41
-rw-r--r--core/tests/coretests/src/android/util/LocaleUtilTest.java5
-rw-r--r--data/fonts/AndroidClock.ttfbin2480 -> 4744 bytes
-rw-r--r--data/fonts/AndroidClock_Highlight.ttfbin2408 -> 4744 bytes
-rw-r--r--data/fonts/AndroidClock_Solid.ttfbin2652 -> 4744 bytes
-rw-r--r--[-rwxr-xr-x]data/fonts/Roboto-Bold.ttfbin80588 -> 84868 bytes
-rw-r--r--[-rwxr-xr-x]data/fonts/Roboto-BoldItalic.ttfbin83452 -> 88056 bytes
-rw-r--r--[-rwxr-xr-x]data/fonts/Roboto-Italic.ttfbin83096 -> 87632 bytes
-rw-r--r--[-rwxr-xr-x]data/fonts/Roboto-Regular.ttfbin80328 -> 84508 bytes
-rwxr-xr-xdata/sounds/AudioPackage7.mk63
-rw-r--r--data/sounds/alarms/ogg/Copernicium.oggbin0 -> 52889 bytes
-rw-r--r--data/sounds/alarms/ogg/Curium.oggbin0 -> 83338 bytes
-rw-r--r--data/sounds/alarms/ogg/Fermium.oggbin0 -> 56064 bytes
-rw-r--r--data/sounds/alarms/ogg/Hassium.oggbin0 -> 58736 bytes
-rw-r--r--data/sounds/alarms/ogg/Neptunium.oggbin0 -> 43371 bytes
-rw-r--r--data/sounds/alarms/ogg/Nobelium.oggbin0 -> 176797 bytes
-rw-r--r--data/sounds/effects/ogg/CameraShutter.oggbin0 -> 6872 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/Dock.oggbin7720 -> 6313 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressDelete_24.oggbin0 -> 4748 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressReturn_24.oggbin0 -> 5057 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressSpacebar_24.oggbin0 -> 4749 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressStandard_24.oggbin0 -> 4716 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/Lock.oggbin11701 -> 13259 bytes
-rw-r--r--data/sounds/effects/ogg/Media_Volume.oggbin11969 -> 29962 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/Undock.oggbin7496 -> 6503 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/Unlock.oggbin12304 -> 13450 bytes
-rw-r--r--data/sounds/effects/ogg/VideoRecord.oggbin6592 -> 10313 bytes
-rwxr-xr-xdata/sounds/notifications/ogg/Altair.oggbin0 -> 12697 bytes
-rwxr-xr-xdata/sounds/notifications/ogg/Antares.oggbin0 -> 10893 bytes
-rw-r--r--data/sounds/notifications/ogg/Betelgeuse.oggbin0 -> 15718 bytes
-rwxr-xr-xdata/sounds/notifications/ogg/Deneb.oggbin0 -> 15851 bytes
-rw-r--r--data/sounds/notifications/ogg/Hojus.oggbin0 -> 16326 bytes
-rwxr-xr-xdata/sounds/notifications/ogg/Lalande.oggbin0 -> 18121 bytes
-rw-r--r--data/sounds/notifications/ogg/Mira.oggbin0 -> 17697 bytes
-rw-r--r--data/sounds/notifications/ogg/Proxima.oggbin0 -> 13250 bytes
-rw-r--r--data/sounds/notifications/ogg/Upsilon.oggbin0 -> 24023 bytes
-rw-r--r--data/sounds/ringtones/ogg/Cassiopeia.oggbin31894 -> 44360 bytes
-rw-r--r--data/sounds/ringtones/ogg/Lyra.oggbin42502 -> 43978 bytes
-rw-r--r--data/sounds/ringtones/ogg/Sceptrum.oggbin293969 -> 316375 bytes
-rw-r--r--data/sounds/ringtones/ogg/Solarium.oggbin60178 -> 89520 bytes
-rw-r--r--data/sounds/ringtones/ogg/UrsaMinor.oggbin143749 -> 185009 bytes
-rw-r--r--data/sounds/ringtones/ogg/Vespa.oggbin18020 -> 77928 bytes
-rw-r--r--docs/html/guide/appendix/install-location.jd2
-rw-r--r--docs/html/guide/developing/device.jd193
-rw-r--r--docs/html/guide/topics/usb/index.jd4
-rw-r--r--docs/html/resources/tutorials/hello-world.jd217
-rw-r--r--docs/html/sdk/eclipse-adt.jd11
-rw-r--r--docs/html/sdk/oem-usb.jd2
-rw-r--r--graphics/java/android/graphics/Paint.java56
-rw-r--r--graphics/java/android/graphics/SurfaceTexture.java4
-rw-r--r--include/media/AudioTrack.h1
-rw-r--r--include/media/stagefright/SurfaceMediaSource.h15
-rw-r--r--include/media/stagefright/foundation/ALooperRoster.h13
-rw-r--r--include/media/stagefright/foundation/AMessage.h11
-rw-r--r--include/media/stagefright/openmax/OMX_IVCommon.h5
-rw-r--r--include/ui/GraphicBuffer.h1
-rw-r--r--include/utils/threads.h7
-rw-r--r--libs/gui/SurfaceTexture.cpp5
-rw-r--r--libs/gui/SurfaceTextureClient.cpp11
-rw-r--r--libs/hwui/DisplayListRenderer.cpp12
-rw-r--r--libs/hwui/DisplayListRenderer.h14
-rw-r--r--libs/hwui/OpenGLRenderer.cpp2
-rw-r--r--libs/rs/scriptc/rs_time.rsh81
-rw-r--r--libs/rs/scriptc/rs_types.rsh88
-rw-r--r--libs/utils/Threads.cpp35
-rw-r--r--media/java/android/media/AudioService.java192
-rw-r--r--media/java/android/media/IRemoteControlDisplay.aidl15
-rw-r--r--media/java/android/media/RemoteControlClient.java32
-rw-r--r--media/libmedia/AudioTrack.cpp5
-rw-r--r--media/libmediaplayerservice/StagefrightPlayer.cpp6
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp6
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp45
-rw-r--r--media/libstagefright/ACodec.cpp26
-rw-r--r--media/libstagefright/AudioPlayer.cpp2
-rw-r--r--media/libstagefright/AwesomePlayer.cpp28
-rwxr-xr-xmedia/libstagefright/CameraSource.cpp9
-rwxr-xr-xmedia/libstagefright/MPEG4Writer.cpp4
-rwxr-xr-xmedia/libstagefright/OMXCodec.cpp16
-rw-r--r--media/libstagefright/SurfaceMediaSource.cpp186
-rw-r--r--media/libstagefright/foundation/ALooperRoster.cpp49
-rw-r--r--media/libstagefright/foundation/AMessage.cpp25
-rw-r--r--media/libstagefright/include/AwesomePlayer.h6
-rw-r--r--media/libstagefright/mpeg2ts/AnotherPacketSource.cpp32
-rw-r--r--media/libstagefright/tests/Android.mk7
-rw-r--r--media/libstagefright/tests/SurfaceMediaSource_test.cpp769
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java18
-rw-r--r--opengl/java/android/opengl/GLUtils.java49
-rw-r--r--opengl/libs/EGL/eglApi.cpp10
-rw-r--r--opengl/libs/EGL/egl_object.h11
-rw-r--r--packages/BackupRestoreConfirmation/res/values-af/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-am/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ar/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-bg/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ca/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-cs/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-da/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-de/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-el/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml10
-rw-r--r--packages/BackupRestoreConfirmation/res/values-es/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fa/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fi/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fr/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-hr/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-hu/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-in/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-iw/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ja/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ko/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-lt/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-lv/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-nb/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-nl/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pt/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ro/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ru/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sk/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sl/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sr/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sv/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sw/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-th/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-tl/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-tr/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-uk/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-vi/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zu/strings.xml29
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.pngbin3440 -> 3441 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_notify_alarm.pngbin645 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.pngbin0 -> 808 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.pngbin83 -> 115 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_notify_alarm.pngbin478 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.pngbin0 -> 574 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.pngbin1005 -> 98 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.pngbin749 -> 975 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.pngbin1509 -> 2094 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.pngbin1044 -> 1250 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.pngbin2263 -> 2880 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.pngbin0 -> 1232 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.pngbin0 -> 821 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.pngbin0 -> 1314 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.pngbin0 -> 3062 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.pngbin0 -> 1720 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.pngbin0 -> 4330 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.pngbin0 -> 1691 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.pngbin1283 -> 1555 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.pngbin0 -> 9956 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.pngbin1245 -> 1503 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight_land.pngbin3879 -> 5479 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.pngbin1029 -> 1191 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.pngbin964 -> 1142 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.pngbin501 -> 573 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.pngbin1251 -> 1415 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.pngbin644 -> 793 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.pngbin663 -> 804 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_notify_more.pngbin0 -> 900 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.pngbin0 -> 1107 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.pngbin100 -> 142 bytes
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml4
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml4
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml10
-rw-r--r--packages/SystemUI/res/values-da/strings.xml10
-rw-r--r--packages/SystemUI/res/values-el/strings.xml18
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml2
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml26
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml8
-rw-r--r--packages/SystemUI/res/values-in/strings.xml8
-rw-r--r--packages/SystemUI/res/values-it/strings.xml4
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml16
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml4
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml4
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml4
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml4
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml2
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml4
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml2
-rw-r--r--packages/SystemUI/res/values-th/strings.xml20
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml10
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml2
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml8
-rw-r--r--packages/SystemUI/res/values-xhdpi/dimens.xml27
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml26
-rw-r--r--packages/SystemUI/res/values/dimens.xml24
-rw-r--r--packages/SystemUI/res/values/donottranslate.xml7
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java398
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java67
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java11
-rw-r--r--packages/VpnDialogs/res/values-ar/strings.xml2
-rw-r--r--packages/VpnDialogs/res/values-fr/strings.xml2
-rw-r--r--policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java165
-rw-r--r--policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java2
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java8
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java25
-rw-r--r--preloaded-classes804
-rw-r--r--services/audioflinger/AudioFlinger.cpp14
-rw-r--r--services/audioflinger/AudioFlinger.h4
-rw-r--r--services/input/InputReader.cpp49
-rw-r--r--services/input/InputReader.h9
-rw-r--r--services/java/com/android/server/AlarmManagerService.java12
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java17
-rw-r--r--services/java/com/android/server/NetworkManagementService.java62
-rw-r--r--services/java/com/android/server/SystemServer.java10
-rw-r--r--services/java/com/android/server/TelephonyRegistry.java6
-rw-r--r--services/java/com/android/server/TextServicesManagerService.java120
-rw-r--r--services/java/com/android/server/ThrottleService.java5
-rw-r--r--services/java/com/android/server/WallpaperManagerService.java22
-rw-r--r--services/java/com/android/server/accessibility/AccessibilityManagerService.java214
-rw-r--r--services/java/com/android/server/accessibility/TouchExplorer.java298
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java159
-rw-r--r--services/java/com/android/server/am/ProcessList.java2
-rw-r--r--services/java/com/android/server/net/NetworkPolicyManagerService.java14
-rw-r--r--services/java/com/android/server/net/NetworkStatsService.java194
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java3
-rw-r--r--services/java/com/android/server/wm/InputManager.java30
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java12
-rw-r--r--services/jni/com_android_server_InputManager.cpp34
-rw-r--r--services/sensorservice/Fusion.cpp65
-rw-r--r--services/sensorservice/vec.h9
-rw-r--r--services/surfaceflinger/Layer.cpp1
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp22
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java54
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java49
-rw-r--r--telephony/java/com/android/internal/telephony/CommandsInterface.java19
-rw-r--r--telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl19
-rw-r--r--telephony/java/com/android/internal/telephony/IccRecords.java62
-rw-r--r--telephony/java/com/android/internal/telephony/Phone.java17
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneBase.java10
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneProxy.java9
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneSubInfo.java52
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java25
-rw-r--r--telephony/java/com/android/internal/telephony/RIL.java20
-rw-r--r--telephony/java/com/android/internal/telephony/RILConstants.java1
-rw-r--r--telephony/java/com/android/internal/telephony/cat/ResponseData.java66
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java36
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java6
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccFileHandler.java4
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java429
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java6
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/RuimRecords.java4
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java7
-rwxr-xr-xtelephony/java/com/android/internal/telephony/gsm/SIMRecords.java9
-rw-r--r--telephony/java/com/android/internal/telephony/ims/IsimRecords.java44
-rw-r--r--telephony/java/com/android/internal/telephony/ims/IsimUiccRecords.java157
-rw-r--r--telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java5
-rw-r--r--telephony/java/com/android/internal/telephony/test/SimulatedCommands.java4
-rw-r--r--tests/BiDiTests/res/layout/basic.xml11
-rw-r--r--tests/BiDiTests/res/values/strings.xml1
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java52
-rw-r--r--wifi/java/android/net/wifi/WifiConfigStore.java55
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java1
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java22
532 files changed, 12207 insertions, 5963 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 3cec66f..e6c4183 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -106,6 +106,8 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/SystemUI_interme
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/R/com/android/systemui/R.java)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/media/java/android/media/IAudioService.P)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/media/java/android/media/IAudioService.P)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/nfc/)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/current.txt b/api/current.txt
index 9758433..ef40053 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -184,21 +184,21 @@ package android {
public static final class R.attr {
ctor public R.attr();
field public static final int absListViewStyle = 16842858; // 0x101006a
- field public static final int accessibilityEventTypes = 16843644; // 0x101037c
- field public static final int accessibilityFeedbackType = 16843646; // 0x101037e
- field public static final int accessibilityFlags = 16843648; // 0x1010380
+ field public static final int accessibilityEventTypes = 16843648; // 0x1010380
+ field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
+ field public static final int accessibilityFlags = 16843652; // 0x1010384
field public static final int accountPreferences = 16843423; // 0x101029f
field public static final int accountType = 16843407; // 0x101028f
field public static final int action = 16842797; // 0x101002d
- field public static final int actionBarDivider = 16843685; // 0x10103a5
- field public static final int actionBarItemBackground = 16843686; // 0x10103a6
+ field public static final int actionBarDivider = 16843689; // 0x10103a9
+ field public static final int actionBarItemBackground = 16843690; // 0x10103aa
field public static final int actionBarSize = 16843499; // 0x10102eb
- field public static final int actionBarSplitStyle = 16843666; // 0x1010392
+ field public static final int actionBarSplitStyle = 16843670; // 0x1010396
field public static final int actionBarStyle = 16843470; // 0x10102ce
field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
field public static final int actionBarTabStyle = 16843507; // 0x10102f3
field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
- field public static final int actionBarWidgetTheme = 16843681; // 0x10103a1
+ field public static final int actionBarWidgetTheme = 16843685; // 0x10103a5
field public static final int actionButtonStyle = 16843480; // 0x10102d8
field public static final int actionDropDownStyle = 16843479; // 0x10102d7
field public static final int actionLayout = 16843515; // 0x10102fb
@@ -210,11 +210,11 @@ package android {
field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
field public static final int actionModeCutDrawable = 16843537; // 0x1010311
field public static final int actionModePasteDrawable = 16843539; // 0x1010313
- field public static final int actionModeSelectAllDrawable = 16843642; // 0x101037a
- field public static final int actionModeSplitBackground = 16843687; // 0x10103a7
- field public static final int actionModeStyle = 16843678; // 0x101039e
+ field public static final int actionModeSelectAllDrawable = 16843646; // 0x101037e
+ field public static final int actionModeSplitBackground = 16843691; // 0x10103ab
+ field public static final int actionModeStyle = 16843682; // 0x10103a2
field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
- field public static final int actionProviderClass = 16843667; // 0x1010393
+ field public static final int actionProviderClass = 16843671; // 0x1010397
field public static final int actionViewClass = 16843516; // 0x10102fc
field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba
@@ -226,7 +226,7 @@ package android {
field public static final int alertDialogIcon = 16843605; // 0x1010355
field public static final int alertDialogStyle = 16842845; // 0x101005d
field public static final int alertDialogTheme = 16843529; // 0x1010309
- field public static final int alignmentMode = 16843638; // 0x1010376
+ field public static final int alignmentMode = 16843642; // 0x101037a
field public static final int allContactsName = 16843468; // 0x10102cc
field public static final int allowBackup = 16843392; // 0x1010280
field public static final int allowClearUserData = 16842757; // 0x1010005
@@ -260,8 +260,8 @@ package android {
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
field public static final int backgroundDimEnabled = 16843295; // 0x101021f
- field public static final int backgroundSplit = 16843669; // 0x1010395
- field public static final int backgroundStacked = 16843668; // 0x1010394
+ field public static final int backgroundSplit = 16843673; // 0x1010399
+ field public static final int backgroundStacked = 16843672; // 0x1010398
field public static final int backupAgent = 16843391; // 0x101027f
field public static final int baseline = 16843548; // 0x101031c
field public static final int baselineAlignBottom = 16843042; // 0x1010122
@@ -270,7 +270,7 @@ package android {
field public static final int borderlessButtonStyle = 16843563; // 0x101032b
field public static final int bottom = 16843184; // 0x10101b0
field public static final int bottomBright = 16842957; // 0x10100cd
- field public static final int bottomChevronDrawable = 16843655; // 0x1010387
+ field public static final int bottomChevronDrawable = 16843659; // 0x101038b
field public static final int bottomDark = 16842953; // 0x10100c9
field public static final int bottomLeftRadius = 16843179; // 0x10101ab
field public static final int bottomMedium = 16842958; // 0x10100ce
@@ -289,7 +289,7 @@ package android {
field public static final int cacheColorHint = 16843009; // 0x1010101
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
- field public static final int canRetrieveWindowContent = 16843649; // 0x1010381
+ field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
field public static final deprecated int capitalize = 16843113; // 0x1010169
field public static final int centerBright = 16842956; // 0x10100cc
@@ -318,18 +318,18 @@ package android {
field public static final int codes = 16843330; // 0x1010242
field public static final int collapseColumns = 16843083; // 0x101014b
field public static final int color = 16843173; // 0x10101a5
- field public static final int colorActivatedHighlight = 16843674; // 0x101039a
+ field public static final int colorActivatedHighlight = 16843678; // 0x101039e
field public static final int colorBackground = 16842801; // 0x1010031
field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
- field public static final int colorFocusedHighlight = 16843673; // 0x1010399
+ field public static final int colorFocusedHighlight = 16843677; // 0x101039d
field public static final int colorForeground = 16842800; // 0x1010030
field public static final int colorForegroundInverse = 16843270; // 0x1010206
- field public static final int colorLongPressedHighlight = 16843672; // 0x1010398
- field public static final int colorMultiSelectHighlight = 16843675; // 0x101039b
- field public static final int colorPressedHighlight = 16843671; // 0x1010397
- field public static final int columnCount = 16843635; // 0x1010373
+ field public static final int colorLongPressedHighlight = 16843676; // 0x101039c
+ field public static final int colorMultiSelectHighlight = 16843679; // 0x101039f
+ field public static final int colorPressedHighlight = 16843675; // 0x101039b
+ field public static final int columnCount = 16843639; // 0x1010377
field public static final int columnDelay = 16843215; // 0x10101cf
- field public static final int columnOrderPreserved = 16843636; // 0x1010374
+ field public static final int columnOrderPreserved = 16843640; // 0x1010378
field public static final int columnWidth = 16843031; // 0x1010117
field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365
field public static final int completionHint = 16843122; // 0x1010172
@@ -383,11 +383,11 @@ package android {
field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
field public static final int drawable = 16843161; // 0x1010199
field public static final int drawableBottom = 16843118; // 0x101016e
- field public static final int drawableEnd = 16843677; // 0x101039d
+ field public static final int drawableEnd = 16843681; // 0x10103a1
field public static final int drawableLeft = 16843119; // 0x101016f
field public static final int drawablePadding = 16843121; // 0x1010171
field public static final int drawableRight = 16843120; // 0x1010170
- field public static final int drawableStart = 16843676; // 0x101039c
+ field public static final int drawableStart = 16843680; // 0x10103a0
field public static final int drawableTop = 16843117; // 0x101016d
field public static final int drawingCacheQuality = 16842984; // 0x10100e8
field public static final int dropDownAnchor = 16843363; // 0x1010263
@@ -444,7 +444,7 @@ package android {
field public static final int fastScrollTextColor = 16843609; // 0x1010359
field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336
field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339
- field public static final int feedbackCount = 16843661; // 0x101038d
+ field public static final int feedbackCount = 16843665; // 0x1010391
field public static final int fillAfter = 16843197; // 0x10101bd
field public static final int fillBefore = 16843196; // 0x10101bc
field public static final int fillEnabled = 16843343; // 0x101024f
@@ -497,7 +497,7 @@ package android {
field public static final int hand_hour = 16843011; // 0x1010103
field public static final int hand_minute = 16843012; // 0x1010104
field public static final int handle = 16843354; // 0x101025a
- field public static final int handleDrawable = 16843651; // 0x1010383
+ field public static final int handleDrawable = 16843655; // 0x1010387
field public static final int handleProfiling = 16842786; // 0x1010022
field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e
field public static final int hardwareAccelerated = 16843475; // 0x10102d3
@@ -506,12 +506,12 @@ package android {
field public static final int headerDividersEnabled = 16843310; // 0x101022e
field public static final int height = 16843093; // 0x1010155
field public static final int hint = 16843088; // 0x1010150
- field public static final int hitRadius = 16843658; // 0x101038a
+ field public static final int hitRadius = 16843662; // 0x101038e
field public static final int homeAsUpIndicator = 16843531; // 0x101030b
field public static final int homeLayout = 16843549; // 0x101031d
field public static final int horizontalDivider = 16843053; // 0x101012d
field public static final int horizontalGap = 16843327; // 0x101023f
- field public static final int horizontalOffset = 16843663; // 0x101038f
+ field public static final int horizontalOffset = 16843667; // 0x1010393
field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
field public static final int horizontalSpacing = 16843028; // 0x1010114
field public static final int host = 16842792; // 0x1010028
@@ -557,7 +557,7 @@ package android {
field public static final int installLocation = 16843447; // 0x10102b7
field public static final int interpolator = 16843073; // 0x1010141
field public static final int isAlwaysSyncable = 16843571; // 0x1010333
- field public static final int isAuxiliary = 16843643; // 0x101037b
+ field public static final int isAuxiliary = 16843647; // 0x101037f
field public static final int isDefault = 16843297; // 0x1010221
field public static final int isIndicator = 16843079; // 0x1010147
field public static final int isModifier = 16843334; // 0x1010246
@@ -610,7 +610,7 @@ package android {
field public static final int layout_centerInParent = 16843151; // 0x101018f
field public static final int layout_centerVertical = 16843153; // 0x1010191
field public static final int layout_column = 16843084; // 0x101014c
- field public static final int layout_columnSpan = 16843641; // 0x1010379
+ field public static final int layout_columnSpan = 16843645; // 0x101037d
field public static final int layout_gravity = 16842931; // 0x10100b3
field public static final int layout_height = 16842997; // 0x10100f5
field public static final int layout_margin = 16842998; // 0x10100f6
@@ -618,8 +618,8 @@ package android {
field public static final int layout_marginLeft = 16842999; // 0x10100f7
field public static final int layout_marginRight = 16843001; // 0x10100f9
field public static final int layout_marginTop = 16843000; // 0x10100f8
- field public static final int layout_row = 16843639; // 0x1010377
- field public static final int layout_rowSpan = 16843640; // 0x1010378
+ field public static final int layout_row = 16843643; // 0x101037b
+ field public static final int layout_rowSpan = 16843644; // 0x101037c
field public static final int layout_scale = 16843155; // 0x1010193
field public static final int layout_span = 16843085; // 0x101014d
field public static final int layout_toLeftOf = 16843138; // 0x1010182
@@ -629,7 +629,7 @@ package android {
field public static final int layout_x = 16843135; // 0x101017f
field public static final int layout_y = 16843136; // 0x1010180
field public static final int left = 16843181; // 0x10101ad
- field public static final int leftChevronDrawable = 16843652; // 0x1010384
+ field public static final int leftChevronDrawable = 16843656; // 0x1010388
field public static final int lineSpacingExtra = 16843287; // 0x1010217
field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
field public static final int lines = 16843092; // 0x1010154
@@ -641,8 +641,8 @@ package android {
field public static final int listDividerAlertDialog = 16843525; // 0x1010305
field public static final int listPopupWindowStyle = 16843519; // 0x10102ff
field public static final int listPreferredItemHeight = 16842829; // 0x101004d
- field public static final int listPreferredItemHeightLarge = 16843664; // 0x1010390
- field public static final int listPreferredItemHeightSmall = 16843665; // 0x1010391
+ field public static final int listPreferredItemHeightLarge = 16843668; // 0x1010394
+ field public static final int listPreferredItemHeightSmall = 16843669; // 0x1010395
field public static final int listSelector = 16843003; // 0x10100fb
field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
field public static final int listViewStyle = 16842868; // 0x1010074
@@ -673,8 +673,8 @@ package android {
field public static final int minHeight = 16843072; // 0x1010140
field public static final int minLevel = 16843185; // 0x10101b1
field public static final int minLines = 16843094; // 0x1010156
- field public static final int minResizeHeight = 16843680; // 0x10103a0
- field public static final int minResizeWidth = 16843679; // 0x101039f
+ field public static final int minResizeHeight = 16843684; // 0x10103a4
+ field public static final int minResizeWidth = 16843683; // 0x10103a3
field public static final int minSdkVersion = 16843276; // 0x101020c
field public static final int minWidth = 16843071; // 0x101013f
field public static final int mode = 16843134; // 0x101017e
@@ -690,7 +690,7 @@ package android {
field public static final int nextFocusUp = 16842979; // 0x10100e3
field public static final int noHistory = 16843309; // 0x101022d
field public static final int normalScreens = 16843397; // 0x1010285
- field public static final int notificationTimeout = 16843647; // 0x101037f
+ field public static final int notificationTimeout = 16843651; // 0x1010383
field public static final int numColumns = 16843032; // 0x1010118
field public static final int numStars = 16843076; // 0x1010144
field public static final deprecated int numeric = 16843109; // 0x1010165
@@ -704,11 +704,11 @@ package android {
field public static final int orderingFromXml = 16843239; // 0x10101e7
field public static final int orientation = 16842948; // 0x10100c4
field public static final int outAnimation = 16843128; // 0x1010178
- field public static final int outerRadius = 16843657; // 0x1010389
+ field public static final int outerRadius = 16843661; // 0x101038d
field public static final int overScrollFooter = 16843459; // 0x10102c3
field public static final int overScrollHeader = 16843458; // 0x10102c2
field public static final int overScrollMode = 16843457; // 0x10102c1
- field public static final int packageNames = 16843645; // 0x101037d
+ field public static final int packageNames = 16843649; // 0x1010381
field public static final int padding = 16842965; // 0x10100d5
field public static final int paddingBottom = 16842969; // 0x10100d9
field public static final int paddingLeft = 16842966; // 0x10100d6
@@ -793,17 +793,17 @@ package android {
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
field public static final int right = 16843183; // 0x10101af
- field public static final int rightChevronDrawable = 16843653; // 0x1010385
+ field public static final int rightChevronDrawable = 16843657; // 0x1010389
field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
field public static final int ringtoneType = 16843257; // 0x10101f9
field public static final int rotation = 16843558; // 0x1010326
field public static final int rotationX = 16843559; // 0x1010327
field public static final int rotationY = 16843560; // 0x1010328
- field public static final int rowCount = 16843633; // 0x1010371
+ field public static final int rowCount = 16843637; // 0x1010375
field public static final int rowDelay = 16843216; // 0x10101d0
field public static final int rowEdgeFlags = 16843329; // 0x1010241
field public static final int rowHeight = 16843058; // 0x1010132
- field public static final int rowOrderPreserved = 16843634; // 0x1010372
+ field public static final int rowOrderPreserved = 16843638; // 0x1010376
field public static final int saveEnabled = 16842983; // 0x10100e7
field public static final int scaleGravity = 16843262; // 0x10101fe
field public static final int scaleHeight = 16843261; // 0x10101fd
@@ -869,7 +869,7 @@ package android {
field public static final int smallIcon = 16843422; // 0x101029e
field public static final int smallScreens = 16843396; // 0x1010284
field public static final int smoothScrollbar = 16843313; // 0x1010231
- field public static final int snapMargin = 16843660; // 0x101038c
+ field public static final int snapMargin = 16843664; // 0x1010390
field public static final int soundEffectsEnabled = 16843285; // 0x1010215
field public static final int spacing = 16843027; // 0x1010113
field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087
@@ -915,17 +915,19 @@ package android {
field public static final int stretchMode = 16843030; // 0x1010116
field public static final int subtitle = 16843473; // 0x10102d1
field public static final int subtitleTextStyle = 16843513; // 0x10102f9
- field public static final int subtypeExtraValue = 16843684; // 0x10103a4
- field public static final int subtypeLocale = 16843683; // 0x10103a3
+ field public static final int subtypeExtraValue = 16843688; // 0x10103a8
+ field public static final int subtypeLocale = 16843687; // 0x10103a7
field public static final int suggestActionMsg = 16843228; // 0x10101dc
field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd
- field public static final int suggestionsEnabled = 16843632; // 0x1010370
field public static final int summary = 16843241; // 0x10101e9
field public static final int summaryColumn = 16843426; // 0x10102a2
field public static final int summaryOff = 16843248; // 0x10101f0
field public static final int summaryOn = 16843247; // 0x10101ef
field public static final int supportsUploading = 16843419; // 0x101029b
+ field public static final int switchMinWidth = 16843632; // 0x1010370
+ field public static final int switchPadding = 16843633; // 0x1010371
field public static final int switchPreferenceStyle = 16843629; // 0x101036d
+ field public static final int switchTextAppearance = 16843630; // 0x101036e
field public static final int switchTextOff = 16843628; // 0x101036c
field public static final int switchTextOn = 16843627; // 0x101036b
field public static final int syncable = 16842777; // 0x1010019
@@ -936,7 +938,7 @@ package android {
field public static final int tag = 16842961; // 0x10100d1
field public static final int targetActivity = 16843266; // 0x1010202
field public static final int targetClass = 16842799; // 0x101002f
- field public static final int targetDrawables = 16843650; // 0x1010382
+ field public static final int targetDrawables = 16843654; // 0x1010386
field public static final int targetPackage = 16842785; // 0x1010021
field public static final int targetSdkVersion = 16843376; // 0x1010270
field public static final int taskAffinity = 16842770; // 0x1010012
@@ -951,15 +953,15 @@ package android {
field public static final int tension = 16843370; // 0x101026a
field public static final int testOnly = 16843378; // 0x1010272
field public static final int text = 16843087; // 0x101014f
- field public static final int textAllCaps = 16843670; // 0x1010396
+ field public static final int textAllCaps = 16843674; // 0x101039a
field public static final int textAppearance = 16842804; // 0x1010034
field public static final int textAppearanceButton = 16843271; // 0x1010207
field public static final int textAppearanceInverse = 16842805; // 0x1010035
field public static final int textAppearanceLarge = 16842816; // 0x1010040
field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
- field public static final int textAppearanceListItem = 16843688; // 0x10103a8
- field public static final int textAppearanceListItemSmall = 16843689; // 0x10103a9
+ field public static final int textAppearanceListItem = 16843692; // 0x10103ac
+ field public static final int textAppearanceListItemSmall = 16843693; // 0x10103ad
field public static final int textAppearanceMedium = 16842817; // 0x1010041
field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0
@@ -994,7 +996,7 @@ package android {
field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314
field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f
field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e
- field public static final int textEditSuggestionItemLayout = 16843631; // 0x101036f
+ field public static final int textEditSuggestionItemLayout = 16843636; // 0x1010374
field public static final int textFilterEnabled = 16843007; // 0x10100ff
field public static final int textIsSelectable = 16843542; // 0x1010316
field public static final int textOff = 16843045; // 0x1010125
@@ -1006,13 +1008,14 @@ package android {
field public static final int textSelectHandleWindowStyle = 16843464; // 0x10102c8
field public static final int textSize = 16842901; // 0x1010095
field public static final int textStyle = 16842903; // 0x1010097
- field public static final int textSuggestionsWindowStyle = 16843630; // 0x101036e
+ field public static final int textSuggestionsWindowStyle = 16843635; // 0x1010373
field public static final int textViewStyle = 16842884; // 0x1010084
field public static final int theme = 16842752; // 0x1010000
field public static final int thickness = 16843360; // 0x1010260
field public static final int thicknessRatio = 16843164; // 0x101019c
field public static final int thumb = 16843074; // 0x1010142
field public static final int thumbOffset = 16843075; // 0x1010143
+ field public static final int thumbTextPadding = 16843634; // 0x1010372
field public static final int thumbnail = 16843429; // 0x10102a5
field public static final int tileMode = 16843265; // 0x1010201
field public static final int tint = 16843041; // 0x1010121
@@ -1027,11 +1030,12 @@ package android {
field public static final int toYScale = 16843205; // 0x10101c5
field public static final int top = 16843182; // 0x10101ae
field public static final int topBright = 16842955; // 0x10100cb
- field public static final int topChevronDrawable = 16843654; // 0x1010386
+ field public static final int topChevronDrawable = 16843658; // 0x101038a
field public static final int topDark = 16842951; // 0x10100c7
field public static final int topLeftRadius = 16843177; // 0x10101a9
field public static final int topOffset = 16843352; // 0x1010258
field public static final int topRightRadius = 16843178; // 0x10101aa
+ field public static final int track = 16843631; // 0x101036f
field public static final int transcriptMode = 16843008; // 0x1010100
field public static final int transformPivotX = 16843552; // 0x1010320
field public static final int transformPivotY = 16843553; // 0x1010321
@@ -1039,12 +1043,12 @@ package android {
field public static final int translationY = 16843555; // 0x1010323
field public static final int type = 16843169; // 0x10101a1
field public static final int typeface = 16842902; // 0x1010096
- field public static final int uiOptions = 16843682; // 0x10103a2
+ field public static final int uiOptions = 16843686; // 0x10103a6
field public static final int uncertainGestureColor = 16843382; // 0x1010276
field public static final int unfocusedMonthDateColor = 16843588; // 0x1010344
field public static final int unselectedAlpha = 16843278; // 0x101020e
field public static final int updatePeriodMillis = 16843344; // 0x1010250
- field public static final int useDefaultMargins = 16843637; // 0x1010375
+ field public static final int useDefaultMargins = 16843641; // 0x1010379
field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
field public static final int useLevel = 16843167; // 0x101019f
field public static final int userVisible = 16843409; // 0x1010291
@@ -1058,10 +1062,10 @@ package android {
field public static final int verticalCorrection = 16843322; // 0x101023a
field public static final int verticalDivider = 16843054; // 0x101012e
field public static final int verticalGap = 16843328; // 0x1010240
- field public static final int verticalOffset = 16843662; // 0x101038e
+ field public static final int verticalOffset = 16843666; // 0x1010392
field public static final int verticalScrollbarPosition = 16843572; // 0x1010334
field public static final int verticalSpacing = 16843029; // 0x1010115
- field public static final int vibrationDuration = 16843659; // 0x101038b
+ field public static final int vibrationDuration = 16843663; // 0x101038f
field public static final int visibility = 16842972; // 0x10100dc
field public static final int visible = 16843156; // 0x1010194
field public static final int vmSafeMode = 16843448; // 0x10102b8
@@ -1078,7 +1082,7 @@ package android {
field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298
field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293
field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294
- field public static final int waveDrawable = 16843656; // 0x1010388
+ field public static final int waveDrawable = 16843660; // 0x101038c
field public static final int webTextViewStyle = 16843449; // 0x10102b9
field public static final int webViewStyle = 16842885; // 0x1010085
field public static final int weekDayTextAppearance = 16843592; // 0x1010348
@@ -1606,6 +1610,7 @@ package android {
field public static final int TextAppearance_StatusBar_EventContent_Title = 16973928; // 0x1030068
field public static final int TextAppearance_StatusBar_Icon = 16973926; // 0x1030066
field public static final int TextAppearance_StatusBar_Title = 16973925; // 0x1030065
+ field public static final int TextAppearance_SuggestionHighlight = 16974104; // 0x1030118
field public static final int TextAppearance_Theme = 16973888; // 0x1030040
field public static final int TextAppearance_Theme_Dialog = 16973896; // 0x1030048
field public static final int TextAppearance_Widget = 16973897; // 0x1030049
@@ -5771,6 +5776,7 @@ package android.content {
ctor public SyncAdapterType(android.os.Parcel);
method public boolean allowParallelSyncs();
method public int describeContents();
+ method public java.lang.String getSettingsActivity();
method public boolean isAlwaysSyncable();
method public boolean isUserVisible();
method public static android.content.SyncAdapterType newKey(java.lang.String, java.lang.String);
@@ -8721,7 +8727,6 @@ package android.graphics {
public class SurfaceTexture {
ctor public SurfaceTexture(int);
- ctor public SurfaceTexture(int, boolean);
method public long getTimestamp();
method public void getTransformMatrix(float[]);
method public void release();
@@ -11691,6 +11696,7 @@ package android.net {
method public static long getUidUdpRxPackets(int);
method public static long getUidUdpTxBytes(int);
method public static long getUidUdpTxPackets(int);
+ method public static void incrementOperationCount(int);
method public static void incrementOperationCount(int, int);
method public static void setThreadStatsTag(int);
method public static deprecated void setThreadStatsTag(java.lang.String);
@@ -12413,13 +12419,15 @@ package android.nfc {
public final class NfcAdapter {
method public void disableForegroundDispatch(android.app.Activity);
- method public void disableForegroundNdefPush(android.app.Activity);
+ method public deprecated void disableForegroundNdefPush(android.app.Activity);
method public void enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], java.lang.String[][]);
- method public void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
- method public void enableForegroundNdefPush(android.app.Activity, android.nfc.NfcAdapter.NdefPushCallback);
+ method public deprecated void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context);
method public static deprecated android.nfc.NfcAdapter getDefaultAdapter();
method public boolean isEnabled();
+ method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity...);
+ method public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity...);
+ method public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity...);
field public static final java.lang.String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
field public static final java.lang.String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED";
field public static final java.lang.String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
@@ -12428,9 +12436,16 @@ package android.nfc {
field public static final java.lang.String EXTRA_TAG = "android.nfc.extra.TAG";
}
- public static abstract interface NfcAdapter.NdefPushCallback {
- method public abstract android.nfc.NdefMessage createMessage();
- method public abstract void onMessagePushed();
+ public static abstract interface NfcAdapter.CreateNdefMessageCallback {
+ method public abstract android.nfc.NdefMessage createNdefMessage(android.nfc.NfcEvent);
+ }
+
+ public static abstract interface NfcAdapter.OnNdefPushCompleteCallback {
+ method public abstract void onNdefPushComplete(android.nfc.NfcEvent);
+ }
+
+ public final class NfcEvent {
+ field public final android.nfc.NfcAdapter nfcAdapter;
}
public final class NfcManager {
@@ -12465,6 +12480,7 @@ package android.nfc.tech {
method public static android.nfc.tech.IsoDep get(android.nfc.Tag);
method public byte[] getHiLayerResponse();
method public byte[] getHistoricalBytes();
+ method public int getMaxTransceiveLength();
method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -12477,6 +12493,7 @@ package android.nfc.tech {
method public static android.nfc.tech.MifareClassic get(android.nfc.Tag);
method public int getBlockCount();
method public int getBlockCountInSector(int);
+ method public int getMaxTransceiveLength();
method public int getSectorCount();
method public int getSize();
method public int getType();
@@ -12503,6 +12520,7 @@ package android.nfc.tech {
public final class MifareUltralight extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.MifareUltralight get(android.nfc.Tag);
+ method public int getMaxTransceiveLength();
method public int getType();
method public byte[] readPages(int) throws java.io.IOException;
method public byte[] transceive(byte[]) throws java.io.IOException;
@@ -12539,6 +12557,7 @@ package android.nfc.tech {
public final class NfcA extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcA get(android.nfc.Tag);
method public byte[] getAtqa();
+ method public int getMaxTransceiveLength();
method public short getSak();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -12546,6 +12565,7 @@ package android.nfc.tech {
public final class NfcB extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcB get(android.nfc.Tag);
method public byte[] getApplicationData();
+ method public int getMaxTransceiveLength();
method public byte[] getProtocolInfo();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -12553,6 +12573,7 @@ package android.nfc.tech {
public final class NfcF extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcF get(android.nfc.Tag);
method public byte[] getManufacturer();
+ method public int getMaxTransceiveLength();
method public byte[] getSystemCode();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -12560,6 +12581,7 @@ package android.nfc.tech {
public final class NfcV extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcV get(android.nfc.Tag);
method public byte getDsfId();
+ method public int getMaxTransceiveLength();
method public byte getResponseFlags();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -13975,6 +13997,7 @@ package android.opengl {
}
public final class GLUtils {
+ method public static java.lang.String getEGLErrorString(int);
method public static int getInternalFormat(android.graphics.Bitmap);
method public static int getType(android.graphics.Bitmap);
method public static void texImage2D(int, int, int, android.graphics.Bitmap, int);
@@ -15459,6 +15482,7 @@ package android.provider {
field public static final java.lang.String AUTHORITY = "com.android.calendar";
field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String EXTRA_EVENT_ALL_DAY = "allDay";
field public static final java.lang.String EXTRA_EVENT_BEGIN_TIME = "beginTime";
field public static final java.lang.String EXTRA_EVENT_END_TIME = "endTime";
}
@@ -16671,20 +16695,26 @@ package android.provider {
}
public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
field public static final android.net.Uri CONTENT_LIMIT_URI;
field public static final android.net.Uri CONTENT_PHOTO_URI;
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String MAX_ITEMS = "max_items";
}
public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
field public static final java.lang.String CONTENT_DIRECTORY = "photo";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
}
protected static abstract interface ContactsContract.StreamItemsColumns {
field public static final java.lang.String ACCOUNT_NAME = "account_name";
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
field public static final java.lang.String COMMENTS = "comments";
+ field public static final java.lang.String CONTACT_ID = "contact_id";
+ field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
field public static final java.lang.String DATA_SET = "data_set";
field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
@@ -17144,14 +17174,14 @@ package android.provider {
field public static final java.lang.String SETTINGS_CLASSNAME = "settings_classname";
field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_secure_version";
field public static final java.lang.String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
- field public static final java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country";
- field public static final java.lang.String TTS_DEFAULT_LANG = "tts_default_lang";
+ field public static final deprecated java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country";
+ field public static final deprecated java.lang.String TTS_DEFAULT_LANG = "tts_default_lang";
field public static final java.lang.String TTS_DEFAULT_PITCH = "tts_default_pitch";
field public static final java.lang.String TTS_DEFAULT_RATE = "tts_default_rate";
field public static final java.lang.String TTS_DEFAULT_SYNTH = "tts_default_synth";
- field public static final java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant";
+ field public static final deprecated java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant";
field public static final java.lang.String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
- field public static final java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults";
+ field public static final deprecated java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults";
field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
@@ -20811,6 +20841,7 @@ package android.text.style {
method public java.lang.String getLocale();
method public int getSpanTypeId();
method public java.lang.String[] getSuggestions();
+ method public void setFlags(int);
method public void updateDrawState(android.text.TextPaint);
method public void writeToParcel(android.os.Parcel, int);
field public static final java.lang.String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
@@ -24490,6 +24521,7 @@ package android.view.textservice {
method public android.content.ComponentName getComponent();
method public java.lang.String getId();
method public java.lang.String getPackageName();
+ method public android.content.pm.ServiceInfo getServiceInfo();
method public java.lang.String getSettingsActivity();
method public android.view.textservice.SpellCheckerSubtype getSubtypeAt(int);
method public int getSubtypeCount();
@@ -24515,6 +24547,7 @@ package android.view.textservice {
public final class SpellCheckerSubtype implements android.os.Parcelable {
ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String);
method public int describeContents();
+ method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
method public java.lang.String getExtraValue();
method public java.lang.String getLocale();
method public int getNameResId();
@@ -26878,6 +26911,20 @@ package android.widget {
ctor public StackView(android.content.Context, android.util.AttributeSet, int);
}
+ public class Switch extends android.widget.CompoundButton {
+ ctor public Switch(android.content.Context);
+ ctor public Switch(android.content.Context, android.util.AttributeSet);
+ ctor public Switch(android.content.Context, android.util.AttributeSet, int);
+ method public java.lang.CharSequence getTextOff();
+ method public java.lang.CharSequence getTextOn();
+ method public void onMeasure(int, int);
+ method public void setSwitchTextAppearance(android.content.Context, int);
+ method public void setSwitchTypeface(android.graphics.Typeface, int);
+ method public void setSwitchTypeface(android.graphics.Typeface);
+ method public void setTextOff(java.lang.CharSequence);
+ method public void setTextOn(java.lang.CharSequence);
+ }
+
public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener {
ctor public TabHost(android.content.Context);
ctor public TabHost(android.content.Context, android.util.AttributeSet);
@@ -27131,7 +27178,6 @@ package android.widget {
method public void setSingleLine();
method public void setSingleLine(boolean);
method public final void setSpannableFactory(android.text.Spannable.Factory);
- method public void setSuggestionsEnabled(boolean);
method public final void setText(java.lang.CharSequence);
method public void setText(java.lang.CharSequence, android.widget.TextView.BufferType);
method public final void setText(char[], int, int);
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c
index 836cf15..0b08c5e 100644
--- a/cmds/dumpstate/dumpstate.c
+++ b/cmds/dumpstate/dumpstate.c
@@ -80,6 +80,9 @@ static void dumpstate() {
dump_file("SLAB INFO", "/proc/slabinfo");
dump_file("ZONEINFO", "/proc/zoneinfo");
dump_file("PAGETYPEINFO", "/proc/pagetypeinfo");
+ dump_file("BUDDYINFO", "/proc/buddyinfo");
+ dump_file("QTAGUID CTRL INFO", "/proc/net/xt_qtaguid/ctrl");
+ run_command("QTAGUID STATS INFO", 10, "su", "root", "cat", "/proc/net/xt_qtaguid/stats", NULL);
if (screenshot_path[0]) {
LOGI("taking screenshot\n");
@@ -114,8 +117,10 @@ static void dumpstate() {
dump_file("NETWORK ROUTES", "/proc/net/route");
dump_file("NETWORK ROUTES IPV6", "/proc/net/ipv6_route");
dump_file("ARP CACHE", "/proc/net/arp");
- run_command("IPTABLES", 10, "su", "root", "iptables", "-L", "-n", NULL);
+ run_command("IPTABLES", 10, "su", "root", "iptables", "-L", "-nvx", NULL);
+ run_command("IP6TABLES", 10, "su", "root", "ip6tables", "-L", "-nvx", NULL);
run_command("IPTABLE NAT", 10, "su", "root", "iptables", "-t", "nat", "-L", "-n", NULL);
+ run_command("IPT6ABLE NAT", 10, "su", "root", "ip6tables", "-t", "nat", "-L", "-n", NULL);
run_command("WIFI NETWORKS", 20,
"su", "root", "wpa_cli", "list_networks", NULL);
diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp
index ee91c29..aa3bc03 100644
--- a/cmds/stagefright/stream.cpp
+++ b/cmds/stagefright/stream.cpp
@@ -14,6 +14,10 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
+#define LOG_TAG "stream"
+#include "utils/Log.h"
+
#include <binder/ProcessState.h>
#include <media/IStreamSource.h>
@@ -50,7 +54,7 @@ protected:
private:
int mFd;
off64_t mFileSize;
- int64_t mNextSeekTimeUs;
+ uint64_t mNumPacketsSent;
sp<IStreamListener> mListener;
Vector<sp<IMemory> > mBuffers;
@@ -61,7 +65,7 @@ private:
MyStreamSource::MyStreamSource(int fd)
: mFd(fd),
mFileSize(0),
- mNextSeekTimeUs(-1) { // ALooper::GetNowUs() + 5000000ll) {
+ mNumPacketsSent(0) {
CHECK_GE(fd, 0);
mFileSize = lseek64(fd, 0, SEEK_END);
@@ -84,18 +88,24 @@ void MyStreamSource::setBuffers(const Vector<sp<IMemory> > &buffers) {
void MyStreamSource::onBufferAvailable(size_t index) {
CHECK_LT(index, mBuffers.size());
- if (mNextSeekTimeUs >= 0 && mNextSeekTimeUs <= ALooper::GetNowUs()) {
- off64_t offset = (off64_t)(((float)rand() / RAND_MAX) * mFileSize * 0.8);
- offset = (offset / 188) * 188;
+#if 0
+ if (mNumPacketsSent >= 20000) {
+ LOGI("signalling discontinuity now");
+
+ off64_t offset = 0;
+ CHECK((offset % 188) == 0);
lseek(mFd, offset, SEEK_SET);
+ sp<AMessage> extra = new AMessage;
+ extra->setInt32(IStreamListener::kKeyFormatChange, 0);
+
mListener->issueCommand(
- IStreamListener::DISCONTINUITY, false /* synchronous */);
+ IStreamListener::DISCONTINUITY, false /* synchronous */, extra);
- mNextSeekTimeUs = -1;
- mNextSeekTimeUs = ALooper::GetNowUs() + 5000000ll;
+ mNumPacketsSent = 0;
}
+#endif
sp<IMemory> mem = mBuffers.itemAt(index);
@@ -104,6 +114,8 @@ void MyStreamSource::onBufferAvailable(size_t index) {
mListener->issueCommand(IStreamListener::EOS, false /* synchronous */);
} else {
mListener->queueBuffer(index, n);
+
+ mNumPacketsSent += n / 188;
}
}
////////////////////////////////////////////////////////////////////////////////
@@ -293,12 +305,17 @@ int main(int argc, char **argv) {
sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient;
CHECK_EQ(composerClient->initCheck(), (status_t)OK);
+ ssize_t displayWidth = composerClient->getDisplayWidth(0);
+ ssize_t displayHeight = composerClient->getDisplayHeight(0);
+
+ LOGV("display is %d x %d\n", displayWidth, displayHeight);
+
sp<SurfaceControl> control =
composerClient->createSurface(
String8("A Surface"),
0,
- 1280,
- 800,
+ displayWidth,
+ displayHeight,
PIXEL_FORMAT_RGB_565,
0);
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index 8b4e7aee..7c41082 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -18,6 +18,7 @@ package android.accessibilityservice;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
/**
* Interface given to an AccessibilitySerivce to talk to the AccessibilityManagerService.
@@ -30,84 +31,79 @@ interface IAccessibilityServiceConnection {
/**
* Finds an {@link AccessibilityNodeInfo} by accessibility id.
- * <p>
- * <strong>
- * It is a client responsibility to recycle the received info by
- * calling {@link AccessibilityNodeInfo#recycle()} to avoid creating
- * of multiple instances.
- * </strong>
- * </p>
*
* @param accessibilityWindowId A unique window id.
* @param accessibilityViewId A unique View accessibility id.
- * @return The node info.
+ * @param interactionId The id of the interaction for matching with the callback result.
+ * @param callback Callback which to receive the result.
+ * @param threadId The id of the calling thread.
+ * @return The current window scale, where zero means a failure.
*/
- AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId,
- int accessibilityViewId);
+ float findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId,
+ int accessibilityViewId, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long threadId);
/**
* Finds {@link AccessibilityNodeInfo}s by View text. The match is case
* insensitive containment. The search is performed in the window whose
* id is specified and starts from the View whose accessibility id is
* specified.
- * <p>
- * <strong>
- * It is a client responsibility to recycle the received infos by
- * calling {@link AccessibilityNodeInfo#recycle()} to avoid creating
- * of multiple instances.
- * </strong>
- * </p>
*
* @param text The searched text.
- * @param accessibilityId The id of the view from which to start searching.
+ * @param accessibilityWindowId A unique window id.
+ * @param accessibilityViewId A unique View accessibility id from where to start the search.
* Use {@link android.view.View#NO_ID} to start from the root.
- * @return A list of node info.
+ * @param interactionId The id of the interaction for matching with the callback result.
+ * @param callback Callback which to receive the result.
+ * @param threadId The id of the calling thread.
+ * @return The current window scale, where zero means a failure.
*/
- List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewText(String text,
- int accessibilityWindowId, int accessibilityViewId);
+ float findAccessibilityNodeInfosByViewText(String text, int accessibilityWindowId,
+ int accessibilityViewId, int interractionId,
+ IAccessibilityInteractionConnectionCallback callback, long threadId);
/**
* Finds {@link AccessibilityNodeInfo}s by View text. The match is case
* insensitive containment. The search is performed in the currently
* active window and start from the root View in the window.
- * <p>
- * <strong>
- * It is a client responsibility to recycle the received infos by
- * calling {@link AccessibilityNodeInfo#recycle()} to avoid creating
- * of multiple instances.
- * </strong>
- * </p>
*
* @param text The searched text.
* @param accessibilityId The id of the view from which to start searching.
* Use {@link android.view.View#NO_ID} to start from the root.
- * @return A list of node info.
+ * @param interactionId The id of the interaction for matching with the callback result.
+ * @param callback Callback which to receive the result.
+ * @param threadId The id of the calling thread.
+ * @return The current window scale, where zero means a failure.
*/
- List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewTextInActiveWindow(String text);
+ float findAccessibilityNodeInfosByViewTextInActiveWindow(String text,
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ long threadId);
/**
* Finds an {@link AccessibilityNodeInfo} by View id. The search is performed
- * in the currently active window and start from the root View in the window.
- * <p>
- * <strong>
- * It is a client responsibility to recycle the received info by
- * calling {@link AccessibilityNodeInfo#recycle()} to avoid creating
- * of multiple instances.
- * </strong>
- * </p>
+ * in the currently active window and starts from the root View in the window.
*
* @param id The id of the node.
- * @return The node info.
+ * @param interactionId The id of the interaction for matching with the callback result.
+ * @param callback Callback which to receive the result.
+ * @param threadId The id of the calling thread.
+ * @return The current window scale, where zero means a failure.
*/
- AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId);
+ float findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long threadId);
/**
* Performs an accessibility action on an {@link AccessibilityNodeInfo}.
*
* @param accessibilityWindowId The id of the window.
- * @param accessibilityViewId The of a view in the .
+ * @param accessibilityViewId A unique View accessibility id.
+ * @param action The action to perform.
+ * @param interactionId The id of the interaction for matching with the callback result.
+ * @param callback Callback which to receive the result.
+ * @param threadId The id of the calling thread.
* @return Whether the action was performed.
*/
boolean performAccessibilityAction(int accessibilityWindowId, int accessibilityViewId,
- int action);
+ int action, int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ long threadId);
}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 93e30af..102fac1 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -235,6 +235,24 @@ public class ActivityManager {
}
/**
+ * Use to decide whether the running device can be considered a "large
+ * RAM" device. Exactly what memory limit large RAM is will vary, but
+ * it essentially means there is plenty of RAM to have lots of background
+ * processes running under decent loads.
+ * @hide
+ */
+ static public boolean isLargeRAM() {
+ MemInfoReader reader = new MemInfoReader();
+ reader.readMemInfo();
+ if (reader.getTotalSize() >= (640*1024*1024)) {
+ // Currently 640MB RAM available to the kernel is the point at
+ // which we have plenty of RAM to spare.
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Information you can retrieve about tasks that the user has most recently
* started or visited.
*/
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index ff04757..f81ea81 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -107,19 +107,22 @@ public class WallpaperManager {
private final int mHeight;
private int mDrawLeft;
private int mDrawTop;
+ private final Paint mPaint;
private FastBitmapDrawable(Bitmap bitmap) {
mBitmap = bitmap;
mWidth = bitmap.getWidth();
mHeight = bitmap.getHeight();
+
setBounds(0, 0, mWidth, mHeight);
+
+ mPaint = new Paint();
+ mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
}
@Override
public void draw(Canvas canvas) {
- Paint paint = new Paint();
- paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
- canvas.drawBitmap(mBitmap, mDrawLeft, mDrawTop, paint);
+ canvas.drawBitmap(mBitmap, mDrawLeft, mDrawTop, mPaint);
}
@Override
@@ -134,33 +137,23 @@ public class WallpaperManager {
}
@Override
- public void setBounds(Rect bounds) {
- // TODO Auto-generated method stub
- super.setBounds(bounds);
- }
-
- @Override
public void setAlpha(int alpha) {
- throw new UnsupportedOperationException(
- "Not supported with this drawable");
+ throw new UnsupportedOperationException("Not supported with this drawable");
}
@Override
public void setColorFilter(ColorFilter cf) {
- throw new UnsupportedOperationException(
- "Not supported with this drawable");
+ throw new UnsupportedOperationException("Not supported with this drawable");
}
@Override
public void setDither(boolean dither) {
- throw new UnsupportedOperationException(
- "Not supported with this drawable");
+ throw new UnsupportedOperationException("Not supported with this drawable");
}
@Override
public void setFilterBitmap(boolean filter) {
- throw new UnsupportedOperationException(
- "Not supported with this drawable");
+ throw new UnsupportedOperationException("Not supported with this drawable");
}
@Override
@@ -230,7 +223,7 @@ public class WallpaperManager {
}
mWallpaper = null;
try {
- mWallpaper = getCurrentWallpaperLocked(context);
+ mWallpaper = getCurrentWallpaperLocked();
} catch (OutOfMemoryError e) {
Log.w(TAG, "No memory load current wallpaper", e);
}
@@ -253,7 +246,7 @@ public class WallpaperManager {
}
}
- private Bitmap getCurrentWallpaperLocked(Context context) {
+ private Bitmap getCurrentWallpaperLocked() {
try {
Bundle params = new Bundle();
ParcelFileDescriptor fd = mService.getWallpaper(this, params);
@@ -265,17 +258,19 @@ public class WallpaperManager {
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bm = BitmapFactory.decodeFileDescriptor(
fd.getFileDescriptor(), null, options);
- return generateBitmap(context, bm, width, height);
+ return generateBitmap(bm, width, height);
} catch (OutOfMemoryError e) {
Log.w(TAG, "Can't decode file", e);
} finally {
try {
fd.close();
} catch (IOException e) {
+ // Ignore
}
}
}
} catch (RemoteException e) {
+ // Ignore
}
return null;
}
@@ -291,27 +286,29 @@ public class WallpaperManager {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bm = BitmapFactory.decodeStream(is, null, options);
- return generateBitmap(context, bm, width, height);
+ return generateBitmap(bm, width, height);
} catch (OutOfMemoryError e) {
Log.w(TAG, "Can't decode stream", e);
} finally {
try {
is.close();
} catch (IOException e) {
+ // Ignore
}
}
}
} catch (RemoteException e) {
+ // Ignore
}
return null;
}
}
- private static Object mSync = new Object();
+ private static final Object sSync = new Object[0];
private static Globals sGlobals;
static void initGlobals(Looper looper) {
- synchronized (mSync) {
+ synchronized (sSync) {
if (sGlobals == null) {
sGlobals = new Globals(looper);
}
@@ -390,8 +387,7 @@ public class WallpaperManager {
public Drawable getFastDrawable() {
Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true);
if (bm != null) {
- Drawable dr = new FastBitmapDrawable(bm);
- return dr;
+ return new FastBitmapDrawable(bm);
}
return null;
}
@@ -406,13 +402,21 @@ public class WallpaperManager {
public Drawable peekFastDrawable() {
Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false);
if (bm != null) {
- Drawable dr = new FastBitmapDrawable(bm);
- return dr;
+ return new FastBitmapDrawable(bm);
}
return null;
}
/**
+ * Like {@link #getDrawable()} but returns a Bitmap.
+ *
+ * @hide
+ */
+ public Bitmap getBitmap() {
+ return sGlobals.peekWallpaperBitmap(mContext, true);
+ }
+
+ /**
* Remove all internal references to the last loaded wallpaper. Useful
* for apps that want to reduce memory usage when they only temporarily
* need to have the wallpaper. After calling, the next request for the
@@ -464,6 +468,7 @@ public class WallpaperManager {
}
}
} catch (RemoteException e) {
+ // Ignore
}
}
@@ -493,6 +498,7 @@ public class WallpaperManager {
}
}
} catch (RemoteException e) {
+ // Ignore
}
}
@@ -524,6 +530,7 @@ public class WallpaperManager {
}
}
} catch (RemoteException e) {
+ // Ignore
}
}
@@ -594,6 +601,7 @@ public class WallpaperManager {
try {
sGlobals.mService.setDimensionHints(minimumWidth, minimumHeight);
} catch (RemoteException e) {
+ // Ignore
}
}
@@ -690,7 +698,7 @@ public class WallpaperManager {
setResource(com.android.internal.R.drawable.default_wallpaper);
}
- static Bitmap generateBitmap(Context context, Bitmap bm, int width, int height) {
+ static Bitmap generateBitmap(Bitmap bm, int width, int height) {
if (bm == null) {
return null;
}
@@ -717,7 +725,7 @@ public class WallpaperManager {
if (deltaw > 0 || deltah > 0) {
// We need to scale up so it covers the entire area.
- float scale = 1.0f;
+ float scale;
if (deltaw > deltah) {
scale = width / (float)targetRect.right;
} else {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 2236928..254c98f 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.Message;
import android.os.ParcelUuid;
import android.os.RemoteException;
@@ -348,6 +349,8 @@ public final class BluetoothAdapter {
private final IBluetooth mService;
+ private Handler mServiceRecordHandler;
+
/**
* Get a handle to the default local Bluetooth adapter.
* <p>Currently Android only supports one Bluetooth adapter, but the API
@@ -376,6 +379,7 @@ public final class BluetoothAdapter {
throw new IllegalArgumentException("service is null");
}
mService = service;
+ mServiceRecordHandler = null;
}
/**
@@ -1011,7 +1015,21 @@ public final class BluetoothAdapter {
} catch (IOException e) {}
throw new IOException("Not able to register SDP record for " + name);
}
- socket.setCloseHandler(mHandler, handle);
+
+ if (mServiceRecordHandler == null) {
+ mServiceRecordHandler = new Handler(Looper.getMainLooper()) {
+ public void handleMessage(Message msg) {
+ /* handle socket closing */
+ int handle = msg.what;
+ try {
+ if (DBG) Log.d(TAG, "Removing service record " +
+ Integer.toHexString(handle));
+ mService.removeServiceRecord(handle);
+ } catch (RemoteException e) {Log.e(TAG, "", e);}
+ }
+ };
+ }
+ socket.setCloseHandler(mServiceRecordHandler, handle);
return socket;
}
@@ -1243,17 +1261,6 @@ public final class BluetoothAdapter {
return Collections.unmodifiableSet(devices);
}
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- /* handle socket closing */
- int handle = msg.what;
- try {
- if (DBG) Log.d(TAG, "Removing service record " + Integer.toHexString(handle));
- mService.removeServiceRecord(handle);
- } catch (RemoteException e) {Log.e(TAG, "", e);}
- }
- };
-
/**
* Validate a Bluetooth address, such as "00:43:A8:23:10:F0"
* <p>Alphabetic characters must be uppercase to be valid.
diff --git a/core/java/android/content/AbstractThreadedSyncAdapter.java b/core/java/android/content/AbstractThreadedSyncAdapter.java
index fcc19a2..6bffed7 100644
--- a/core/java/android/content/AbstractThreadedSyncAdapter.java
+++ b/core/java/android/content/AbstractThreadedSyncAdapter.java
@@ -34,6 +34,51 @@ import java.util.concurrent.atomic.AtomicInteger;
* If a cancelSync() is received that matches an existing sync operation then the thread
* that is running that sync operation will be interrupted, which will indicate to the thread
* that the sync has been canceled.
+ * <p>
+ * In order to be a sync adapter one must extend this class, provide implementations for the
+ * abstract methods and write a service that returns the result of {@link #getSyncAdapterBinder()}
+ * in the service's {@link android.app.Service#onBind(android.content.Intent)} when invoked
+ * with an intent with action <code>android.content.SyncAdapter</code>. This service
+ * must specify the following intent filter and metadata tags in its AndroidManifest.xml file
+ * <pre>
+ * &lt;intent-filter&gt;
+ * &lt;action android:name="android.content.SyncAdapter" /&gt;
+ * &lt;/intent-filter&gt;
+ * &lt;meta-data android:name="android.content.SyncAdapter"
+ * android:resource="@xml/syncadapter" /&gt;
+ * </pre>
+ * The <code>android:resource</code> attribute must point to a resource that looks like:
+ * <pre>
+ * &lt;sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
+ * android:contentAuthority="authority"
+ * android:accountType="accountType"
+ * android:userVisible="true|false"
+ * android:supportsUploading="true|false"
+ * android:allowParallelSyncs="true|false"
+ * android:isAlwaysSyncable="true|false"
+ * android:syncAdapterSettingsAction="ACTION_OF_SETTINGS_ACTIVITY"
+ * /&gt;
+ * </pre>
+ * <ul>
+ * <li>The <code>android:contentAuthority</code> and <code>android:accountType</code> attributes
+ * indicate which content authority and for which account types this sync adapter serves.
+ * <li><code>android:userVisible</code> defaults to true and controls whether or not this sync
+ * adapter shows up in the Sync Settings screen.
+ * <li><code>android:supportsUploading</code> defaults
+ * to true and if true an upload-only sync will be requested for all syncadapters associated
+ * with an authority whenever that authority's content provider does a
+ * {@link ContentResolver#notifyChange(android.net.Uri, android.database.ContentObserver, boolean)}
+ * with syncToNetwork set to true.
+ * <li><code>android:allowParallelSyncs</code> defaults to false and if true indicates that
+ * the sync adapter can handle syncs for multiple accounts at the same time. Otherwise
+ * the SyncManager will wait until the sync adapter is not in use before requesting that
+ * it sync an account's data.
+ * <li><code>android:isAlwaysSyncable</code> defaults to false and if true tells the SyncManager
+ * to intialize the isSyncable state to 1 for that sync adapter for each account that is added.
+ * <li><code>android:syncAdapterSettingsAction</code> defaults to null and if supplied it
+ * specifies an Intent action of an activity that can be used to adjust the sync adapter's
+ * sync settings. The activity must live in the same package as the sync adapter.
+ * </ul>
*/
public abstract class AbstractThreadedSyncAdapter {
/**
diff --git a/core/java/android/content/SyncAdapterType.java b/core/java/android/content/SyncAdapterType.java
index b85346e..8a16ac9 100644
--- a/core/java/android/content/SyncAdapterType.java
+++ b/core/java/android/content/SyncAdapterType.java
@@ -32,6 +32,7 @@ public class SyncAdapterType implements Parcelable {
private final boolean supportsUploading;
private final boolean isAlwaysSyncable;
private final boolean allowParallelSyncs;
+ private final String settingsActivity;
public SyncAdapterType(String authority, String accountType, boolean userVisible,
boolean supportsUploading) {
@@ -47,6 +48,7 @@ public class SyncAdapterType implements Parcelable {
this.supportsUploading = supportsUploading;
this.isAlwaysSyncable = false;
this.allowParallelSyncs = false;
+ this.settingsActivity = null;
this.isKey = false;
}
@@ -54,7 +56,8 @@ public class SyncAdapterType implements Parcelable {
public SyncAdapterType(String authority, String accountType, boolean userVisible,
boolean supportsUploading,
boolean isAlwaysSyncable,
- boolean allowParallelSyncs) {
+ boolean allowParallelSyncs,
+ String settingsActivity) {
if (TextUtils.isEmpty(authority)) {
throw new IllegalArgumentException("the authority must not be empty: " + authority);
}
@@ -67,6 +70,7 @@ public class SyncAdapterType implements Parcelable {
this.supportsUploading = supportsUploading;
this.isAlwaysSyncable = isAlwaysSyncable;
this.allowParallelSyncs = allowParallelSyncs;
+ this.settingsActivity = settingsActivity;
this.isKey = false;
}
@@ -83,6 +87,7 @@ public class SyncAdapterType implements Parcelable {
this.supportsUploading = true;
this.isAlwaysSyncable = false;
this.allowParallelSyncs = false;
+ this.settingsActivity = null;
this.isKey = true;
}
@@ -131,6 +136,18 @@ public class SyncAdapterType implements Parcelable {
return isAlwaysSyncable;
}
+ /**
+ * @return The activity to use to invoke this SyncAdapter's settings activity.
+ * May be null.
+ */
+ public String getSettingsActivity() {
+ if (isKey) {
+ throw new IllegalStateException(
+ "this method is not allowed to be called when this is a key");
+ }
+ return settingsActivity;
+ }
+
public static SyncAdapterType newKey(String authority, String accountType) {
return new SyncAdapterType(authority, accountType);
}
@@ -163,6 +180,7 @@ public class SyncAdapterType implements Parcelable {
+ ", supportsUploading=" + supportsUploading
+ ", isAlwaysSyncable=" + isAlwaysSyncable
+ ", allowParallelSyncs=" + allowParallelSyncs
+ + ", settingsActivity=" + settingsActivity
+ "}";
}
}
@@ -182,6 +200,7 @@ public class SyncAdapterType implements Parcelable {
dest.writeInt(supportsUploading ? 1 : 0);
dest.writeInt(isAlwaysSyncable ? 1 : 0);
dest.writeInt(allowParallelSyncs ? 1 : 0);
+ dest.writeString(settingsActivity);
}
public SyncAdapterType(Parcel source) {
@@ -191,7 +210,8 @@ public class SyncAdapterType implements Parcelable {
source.readInt() != 0,
source.readInt() != 0,
source.readInt() != 0,
- source.readInt() != 0);
+ source.readInt() != 0,
+ source.readString());
}
public static final Creator<SyncAdapterType> CREATOR = new Creator<SyncAdapterType>() {
diff --git a/core/java/android/content/SyncAdaptersCache.java b/core/java/android/content/SyncAdaptersCache.java
index 33a713b..7b643a0 100644
--- a/core/java/android/content/SyncAdaptersCache.java
+++ b/core/java/android/content/SyncAdaptersCache.java
@@ -66,8 +66,11 @@ import java.io.IOException;
final boolean allowParallelSyncs =
sa.getBoolean(com.android.internal.R.styleable.SyncAdapter_allowParallelSyncs,
false);
+ final String settingsActivity =
+ sa.getString(com.android.internal.R.styleable
+ .SyncAdapter_settingsActivity);
return new SyncAdapterType(authority, accountType, userVisible, supportsUploading,
- isAlwaysSyncable, allowParallelSyncs);
+ isAlwaysSyncable, allowParallelSyncs, settingsActivity);
} finally {
sa.recycle();
}
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index a00f790..5c3a17a 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -345,7 +345,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration
sb.append(" (no locale)");
}
switch (textLayoutDirection) {
- case LocaleUtil.TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE: sb.append(" ?layoutdir"); break;
case LocaleUtil.TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE: sb.append(" rtl"); break;
default: sb.append(" layoutdir="); sb.append(textLayoutDirection); break;
}
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index a41a330..bc45945 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -2328,7 +2328,7 @@ public class Camera {
* <p>The reference code is as follows.
*
* <pre>
- * public void public void onOrientationChanged(int orientation) {
+ * public void onOrientationChanged(int orientation) {
* if (orientation == ORIENTATION_UNKNOWN) return;
* android.hardware.Camera.CameraInfo info =
* new android.hardware.Camera.CameraInfo();
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 5929cfb..88abf1a 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -43,6 +43,9 @@ import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.AsyncChannel;
+import java.io.CharArrayWriter;
+import java.io.PrintWriter;
+
/**
* Track the state of mobile data connectivity. This is done by
* receiving broadcast intents from the Phone process whenever
@@ -69,6 +72,11 @@ public class MobileDataStateTracker implements NetworkStateTracker {
private boolean mPrivateDnsRouteSet = false;
private boolean mDefaultRouteSet = false;
+ // NOTE: these are only kept for debugging output; actual values are
+ // maintained in DataConnectionTracker.
+ protected boolean mUserDataEnabled = true;
+ protected boolean mPolicyDataEnabled = true;
+
private Handler mHandler;
private AsyncChannel mDataConnectionTrackerAc;
private Messenger mMessenger;
@@ -458,6 +466,7 @@ public class MobileDataStateTracker implements NetworkStateTracker {
final AsyncChannel channel = mDataConnectionTrackerAc;
if (channel != null) {
channel.sendMessage(CMD_SET_USER_DATA_ENABLE, enabled ? ENABLED : DISABLED);
+ mUserDataEnabled = enabled;
}
if (VDBG) log("setUserDataEnable: X enabled=" + enabled);
}
@@ -468,6 +477,7 @@ public class MobileDataStateTracker implements NetworkStateTracker {
final AsyncChannel channel = mDataConnectionTrackerAc;
if (channel != null) {
channel.sendMessage(CMD_SET_POLICY_DATA_ENABLE, enabled ? ENABLED : DISABLED);
+ mPolicyDataEnabled = enabled;
}
}
@@ -492,10 +502,12 @@ public class MobileDataStateTracker implements NetworkStateTracker {
@Override
public String toString() {
- StringBuffer sb = new StringBuffer("Mobile data state: ");
-
- sb.append(mMobileDataState);
- return sb.toString();
+ final CharArrayWriter writer = new CharArrayWriter();
+ final PrintWriter pw = new PrintWriter(writer);
+ pw.print("Mobile data state: "); pw.println(mMobileDataState);
+ pw.print("Data enabled: user="); pw.print(mUserDataEnabled);
+ pw.print(", policy="); pw.println(mPolicyDataEnabled);
+ return writer.toString();
}
/**
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index 272545d..e5f3273 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -19,6 +19,7 @@ package android.net;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
+import android.util.Log;
import android.util.SparseBooleanArray;
import com.android.internal.util.Objects;
@@ -38,6 +39,8 @@ import java.util.HashSet;
* @hide
*/
public class NetworkStats implements Parcelable {
+ private static final String TAG = "NetworkStats";
+
/** {@link #iface} value when interface details unavailable. */
public static final String IFACE_ALL = null;
/** {@link #uid} value when UID details unavailable. */
@@ -313,6 +316,22 @@ public class NetworkStats implements Parcelable {
}
/**
+ * Return total bytes represented by this snapshot object, usually used when
+ * checking if a {@link #subtract(NetworkStats)} delta passes a threshold.
+ */
+ public long getTotalBytes() {
+ long totalBytes = 0;
+ for (int i = 0; i < size; i++) {
+ // skip specific tags, since already counted in TAG_NONE
+ if (tag[i] != TAG_NONE) continue;
+
+ totalBytes += rxBytes[i];
+ totalBytes += txBytes[i];
+ }
+ return totalBytes;
+ }
+
+ /**
* Subtract the given {@link NetworkStats}, effectively leaving the delta
* between two snapshots in time. Assumes that statistics rows collect over
* time, and that none of them have disappeared.
@@ -381,7 +400,10 @@ public class NetworkStats implements Parcelable {
if (enforceMonotonic
&& (entry.rxBytes < 0 || entry.rxPackets < 0 || entry.txBytes < 0
|| entry.txPackets < 0 || entry.operations < 0)) {
- throw new IllegalArgumentException("found non-monotonic values");
+ Log.v(TAG, "lhs=" + this);
+ Log.v(TAG, "rhs=" + value);
+ throw new IllegalArgumentException(
+ "found non-monotonic values at lhs[" + i + "] - rhs[" + j + "]");
}
if (clampNegative) {
entry.rxBytes = Math.max(0, entry.rxBytes);
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index b4f15ac..d07d899 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -53,18 +53,21 @@ import java.util.Random;
public class NetworkStatsHistory implements Parcelable {
private static final int VERSION_INIT = 1;
private static final int VERSION_ADD_PACKETS = 2;
+ private static final int VERSION_ADD_ACTIVE = 3;
- public static final int FIELD_RX_BYTES = 0x01;
- public static final int FIELD_RX_PACKETS = 0x02;
- public static final int FIELD_TX_BYTES = 0x04;
- public static final int FIELD_TX_PACKETS = 0x08;
- public static final int FIELD_OPERATIONS = 0x10;
+ public static final int FIELD_ACTIVE_TIME = 0x01;
+ public static final int FIELD_RX_BYTES = 0x02;
+ public static final int FIELD_RX_PACKETS = 0x04;
+ public static final int FIELD_TX_BYTES = 0x08;
+ public static final int FIELD_TX_PACKETS = 0x10;
+ public static final int FIELD_OPERATIONS = 0x20;
public static final int FIELD_ALL = 0xFFFFFFFF;
private long bucketDuration;
private int bucketCount;
private long[] bucketStart;
+ private long[] activeTime;
private long[] rxBytes;
private long[] rxPackets;
private long[] txBytes;
@@ -74,8 +77,9 @@ public class NetworkStatsHistory implements Parcelable {
public static class Entry {
public static final long UNKNOWN = -1;
- public long bucketStart;
public long bucketDuration;
+ public long bucketStart;
+ public long activeTime;
public long rxBytes;
public long rxPackets;
public long txBytes;
@@ -94,6 +98,7 @@ public class NetworkStatsHistory implements Parcelable {
public NetworkStatsHistory(long bucketDuration, int initialSize, int fields) {
this.bucketDuration = bucketDuration;
bucketStart = new long[initialSize];
+ if ((fields & FIELD_ACTIVE_TIME) != 0) activeTime = new long[initialSize];
if ((fields & FIELD_RX_BYTES) != 0) rxBytes = new long[initialSize];
if ((fields & FIELD_RX_PACKETS) != 0) rxPackets = new long[initialSize];
if ((fields & FIELD_TX_BYTES) != 0) txBytes = new long[initialSize];
@@ -105,6 +110,7 @@ public class NetworkStatsHistory implements Parcelable {
public NetworkStatsHistory(Parcel in) {
bucketDuration = in.readLong();
bucketStart = readLongArray(in);
+ activeTime = readLongArray(in);
rxBytes = readLongArray(in);
rxPackets = readLongArray(in);
txBytes = readLongArray(in);
@@ -117,6 +123,7 @@ public class NetworkStatsHistory implements Parcelable {
public void writeToParcel(Parcel out, int flags) {
out.writeLong(bucketDuration);
writeLongArray(out, bucketStart, bucketCount);
+ writeLongArray(out, activeTime, bucketCount);
writeLongArray(out, rxBytes, bucketCount);
writeLongArray(out, rxPackets, bucketCount);
writeLongArray(out, txBytes, bucketCount);
@@ -138,9 +145,12 @@ public class NetworkStatsHistory implements Parcelable {
bucketCount = bucketStart.length;
break;
}
- case VERSION_ADD_PACKETS: {
+ case VERSION_ADD_PACKETS:
+ case VERSION_ADD_ACTIVE: {
bucketDuration = in.readLong();
bucketStart = readVarLongArray(in);
+ activeTime = (version >= VERSION_ADD_ACTIVE) ? readVarLongArray(in)
+ : new long[bucketStart.length];
rxBytes = readVarLongArray(in);
rxPackets = readVarLongArray(in);
txBytes = readVarLongArray(in);
@@ -156,9 +166,10 @@ public class NetworkStatsHistory implements Parcelable {
}
public void writeToStream(DataOutputStream out) throws IOException {
- out.writeInt(VERSION_ADD_PACKETS);
+ out.writeInt(VERSION_ADD_ACTIVE);
out.writeLong(bucketDuration);
writeVarLongArray(out, bucketStart, bucketCount);
+ writeVarLongArray(out, activeTime, bucketCount);
writeVarLongArray(out, rxBytes, bucketCount);
writeVarLongArray(out, rxPackets, bucketCount);
writeVarLongArray(out, txBytes, bucketCount);
@@ -202,6 +213,7 @@ public class NetworkStatsHistory implements Parcelable {
final Entry entry = recycle != null ? recycle : new Entry();
entry.bucketStart = bucketStart[i];
entry.bucketDuration = bucketDuration;
+ entry.activeTime = getLong(activeTime, i, UNKNOWN);
entry.rxBytes = getLong(rxBytes, i, UNKNOWN);
entry.rxPackets = getLong(rxPackets, i, UNKNOWN);
entry.txBytes = getLong(txBytes, i, UNKNOWN);
@@ -252,8 +264,9 @@ public class NetworkStatsHistory implements Parcelable {
final long fracRxPackets = entry.rxPackets * overlap / duration;
final long fracTxBytes = entry.txBytes * overlap / duration;
final long fracTxPackets = entry.txPackets * overlap / duration;
- final int fracOperations = (int) (entry.operations * overlap / duration);
+ final long fracOperations = entry.operations * overlap / duration;
+ addLong(activeTime, i, overlap);
addLong(rxBytes, i, fracRxBytes); entry.rxBytes -= fracRxBytes;
addLong(rxPackets, i, fracRxPackets); entry.rxPackets -= fracRxPackets;
addLong(txBytes, i, fracTxBytes); entry.txBytes -= fracTxBytes;
@@ -311,6 +324,7 @@ public class NetworkStatsHistory implements Parcelable {
if (bucketCount >= bucketStart.length) {
final int newLength = Math.max(bucketStart.length, 10) * 3 / 2;
bucketStart = Arrays.copyOf(bucketStart, newLength);
+ if (activeTime != null) activeTime = Arrays.copyOf(activeTime, newLength);
if (rxBytes != null) rxBytes = Arrays.copyOf(rxBytes, newLength);
if (rxPackets != null) rxPackets = Arrays.copyOf(rxPackets, newLength);
if (txBytes != null) txBytes = Arrays.copyOf(txBytes, newLength);
@@ -324,6 +338,7 @@ public class NetworkStatsHistory implements Parcelable {
final int length = bucketCount - index;
System.arraycopy(bucketStart, index, bucketStart, dstPos, length);
+ if (activeTime != null) System.arraycopy(activeTime, index, activeTime, dstPos, length);
if (rxBytes != null) System.arraycopy(rxBytes, index, rxBytes, dstPos, length);
if (rxPackets != null) System.arraycopy(rxPackets, index, rxPackets, dstPos, length);
if (txBytes != null) System.arraycopy(txBytes, index, txBytes, dstPos, length);
@@ -332,6 +347,7 @@ public class NetworkStatsHistory implements Parcelable {
}
bucketStart[index] = start;
+ setLong(activeTime, index, 0L);
setLong(rxBytes, index, 0L);
setLong(rxPackets, index, 0L);
setLong(txBytes, index, 0L);
@@ -357,6 +373,7 @@ public class NetworkStatsHistory implements Parcelable {
if (i > 0) {
final int length = bucketStart.length;
bucketStart = Arrays.copyOfRange(bucketStart, i, length);
+ if (activeTime != null) activeTime = Arrays.copyOfRange(activeTime, i, length);
if (rxBytes != null) rxBytes = Arrays.copyOfRange(rxBytes, i, length);
if (rxPackets != null) rxPackets = Arrays.copyOfRange(rxPackets, i, length);
if (txBytes != null) txBytes = Arrays.copyOfRange(txBytes, i, length);
@@ -380,8 +397,9 @@ public class NetworkStatsHistory implements Parcelable {
*/
public Entry getValues(long start, long end, long now, Entry recycle) {
final Entry entry = recycle != null ? recycle : new Entry();
- entry.bucketStart = start;
entry.bucketDuration = end - start;
+ entry.bucketStart = start;
+ entry.activeTime = activeTime != null ? 0 : UNKNOWN;
entry.rxBytes = rxBytes != null ? 0 : UNKNOWN;
entry.rxPackets = rxPackets != null ? 0 : UNKNOWN;
entry.txBytes = txBytes != null ? 0 : UNKNOWN;
@@ -404,6 +422,7 @@ public class NetworkStatsHistory implements Parcelable {
if (overlap <= 0) continue;
// integer math each time is faster than floating point
+ if (activeTime != null) entry.activeTime += activeTime[i] * overlap / bucketDuration;
if (rxBytes != null) entry.rxBytes += rxBytes[i] * overlap / bucketDuration;
if (rxPackets != null) entry.rxPackets += rxPackets[i] * overlap / bucketDuration;
if (txBytes != null) entry.txBytes += txBytes[i] * overlap / bucketDuration;
@@ -463,11 +482,12 @@ public class NetworkStatsHistory implements Parcelable {
for (int i = start; i < bucketCount; i++) {
pw.print(prefix);
pw.print(" bucketStart="); pw.print(bucketStart[i]);
- if (rxBytes != null) pw.print(" rxBytes="); pw.print(rxBytes[i]);
- if (rxPackets != null) pw.print(" rxPackets="); pw.print(rxPackets[i]);
- if (txBytes != null) pw.print(" txBytes="); pw.print(txBytes[i]);
- if (txPackets != null) pw.print(" txPackets="); pw.print(txPackets[i]);
- if (operations != null) pw.print(" operations="); pw.print(operations[i]);
+ if (activeTime != null) { pw.print(" activeTime="); pw.print(activeTime[i]); }
+ if (rxBytes != null) { pw.print(" rxBytes="); pw.print(rxBytes[i]); }
+ if (rxPackets != null) { pw.print(" rxPackets="); pw.print(rxPackets[i]); }
+ if (txBytes != null) { pw.print(" txBytes="); pw.print(txBytes[i]); }
+ if (txPackets != null) { pw.print(" txPackets="); pw.print(txPackets[i]); }
+ if (operations != null) { pw.print(" operations="); pw.print(operations[i]); }
pw.println();
}
}
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index c2c5c18..ec3b1e1 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -198,6 +198,18 @@ public class TrafficStats {
}
/**
+ * Increment count of network operations performed under the accounting tag
+ * currently active on the calling thread. This can be used to derive
+ * bytes-per-operation.
+ *
+ * @param operationCount Number of operations to increment count by.
+ */
+ public static void incrementOperationCount(int operationCount) {
+ final int tag = getThreadStatsTag();
+ incrementOperationCount(tag, operationCount);
+ }
+
+ /**
* Increment count of network operations performed under the given
* accounting tag. This can be used to derive bytes-per-operation.
*
diff --git a/core/java/android/nfc/INdefPushCallback.aidl b/core/java/android/nfc/INdefPushCallback.aidl
index 80ba2ed..e60a5b0 100644
--- a/core/java/android/nfc/INdefPushCallback.aidl
+++ b/core/java/android/nfc/INdefPushCallback.aidl
@@ -23,6 +23,6 @@ import android.nfc.NdefMessage;
*/
interface INdefPushCallback
{
- NdefMessage onConnect();
- void onMessagePushed();
+ NdefMessage createMessage();
+ void onNdefPushComplete();
}
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index 4fc248f..016af58 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -23,8 +23,8 @@ import android.nfc.NdefMessage;
import android.nfc.Tag;
import android.nfc.TechListParcel;
import android.nfc.INdefPushCallback;
-import android.nfc.INfcTag;
import android.nfc.INfcAdapterExtras;
+import android.nfc.INfcTag;
/**
* @hide
@@ -34,19 +34,14 @@ interface INfcAdapter
INfcTag getNfcTagInterface();
INfcAdapterExtras getNfcAdapterExtrasInterface();
- // NfcAdapter-class related methods
int getState();
- void enableForegroundDispatch(in ComponentName activity, in PendingIntent intent,
- in IntentFilter[] filters, in TechListParcel techLists);
- void disableForegroundDispatch(in ComponentName activity);
- void enableForegroundNdefPush(in ComponentName activity, in NdefMessage msg);
- void enableForegroundNdefPushWithCallback(in ComponentName activity, in INdefPushCallback callback);
- void disableForegroundNdefPush(in ComponentName activity);
-
- // Non-public methods
boolean disable();
boolean enable();
- boolean enableZeroClick();
- boolean disableZeroClick();
- boolean isZeroClickEnabled();
+ boolean enableNdefPush();
+ boolean disableNdefPush();
+ boolean isNdefPushEnabled();
+
+ void setForegroundDispatch(in PendingIntent intent,
+ in IntentFilter[] filters, in TechListParcel techLists);
+ void setForegroundNdefPush(in NdefMessage msg, in INdefPushCallback callback);
}
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl
index 7bdefe7..bb5a9fd 100644
--- a/core/java/android/nfc/INfcTag.aidl
+++ b/core/java/android/nfc/INfcTag.aidl
@@ -46,4 +46,6 @@ interface INfcTag
int setTimeout(int technology, int timeout);
int getTimeout(int technology);
void resetTimeouts();
+ boolean canMakeReadOnly(int ndefType);
+ int getMaxTransceiveLength(int technology);
}
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
new file mode 100644
index 0000000..3cc6820
--- /dev/null
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -0,0 +1,217 @@
+/*
+ * 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 android.nfc;
+
+import android.app.Activity;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.HashMap;
+
+/**
+ * Manages NFC API's that are coupled to the life-cycle of an Activity.
+ *
+ * <p>Uses a fragment to hook into onPause() and onResume() of the host
+ * activities.
+ *
+ * <p>Ideally all of this management would be done in the NFC Service,
+ * but right now it is much easier to do it in the application process.
+ *
+ * @hide
+ */
+public final class NfcActivityManager extends INdefPushCallback.Stub {
+ static final String TAG = NfcAdapter.TAG;
+ static final Boolean DBG = false;
+
+ final NfcAdapter mAdapter;
+ final HashMap<Activity, NfcActivityState> mNfcState; // contents protected by this
+ final NfcEvent mDefaultEvent; // can re-use one NfcEvent because it just contains adapter
+
+ /**
+ * NFC state associated with an {@link Activity}
+ */
+ class NfcActivityState {
+ boolean resumed = false; // is the activity resumed
+ NdefMessage ndefMessage;
+ NfcAdapter.CreateNdefMessageCallback ndefMessageCallback;
+ NfcAdapter.OnNdefPushCompleteCallback onNdefPushCompleteCallback;
+ @Override
+ public String toString() {
+ StringBuilder s = new StringBuilder("[").append(resumed).append(" ");
+ s.append(ndefMessage).append(" ").append(ndefMessageCallback).append(" ");
+ s.append(onNdefPushCompleteCallback).append("]");
+ return s.toString();
+ }
+ }
+
+ public NfcActivityManager(NfcAdapter adapter) {
+ mAdapter = adapter;
+ mNfcState = new HashMap<Activity, NfcActivityState>();
+ mDefaultEvent = new NfcEvent(mAdapter);
+ }
+
+ /**
+ * onResume hook from fragment attached to activity
+ */
+ public synchronized void onResume(Activity activity) {
+ NfcActivityState state = mNfcState.get(activity);
+ if (DBG) Log.d(TAG, "onResume() for " + activity + " " + state);
+ if (state != null) {
+ state.resumed = true;
+ updateNfcService(state);
+ }
+ }
+
+ /**
+ * onPause hook from fragment attached to activity
+ */
+ public synchronized void onPause(Activity activity) {
+ NfcActivityState state = mNfcState.get(activity);
+ if (DBG) Log.d(TAG, "onPause() for " + activity + " " + state);
+ if (state != null) {
+ state.resumed = false;
+ updateNfcService(state);
+ }
+ }
+
+ public synchronized void setNdefPushMessage(Activity activity, NdefMessage message) {
+ NfcActivityState state = getOrCreateState(activity, message != null);
+ if (state == null || state.ndefMessage == message) {
+ return; // nothing more to do;
+ }
+ state.ndefMessage = message;
+ if (message == null) {
+ maybeRemoveState(activity, state);
+ }
+ if (state.resumed) {
+ updateNfcService(state);
+ }
+ }
+
+ public synchronized void setNdefPushMessageCallback(Activity activity,
+ NfcAdapter.CreateNdefMessageCallback callback) {
+ NfcActivityState state = getOrCreateState(activity, callback != null);
+ if (state == null || state.ndefMessageCallback == callback) {
+ return; // nothing more to do;
+ }
+ state.ndefMessageCallback = callback;
+ if (callback == null) {
+ maybeRemoveState(activity, state);
+ }
+ if (state.resumed) {
+ updateNfcService(state);
+ }
+ }
+
+ public synchronized void setOnNdefPushCompleteCallback(Activity activity,
+ NfcAdapter.OnNdefPushCompleteCallback callback) {
+ NfcActivityState state = getOrCreateState(activity, callback != null);
+ if (state == null || state.onNdefPushCompleteCallback == callback) {
+ return; // nothing more to do;
+ }
+ state.onNdefPushCompleteCallback = callback;
+ if (callback == null) {
+ maybeRemoveState(activity, state);
+ }
+ if (state.resumed) {
+ updateNfcService(state);
+ }
+ }
+
+ /**
+ * Get the NfcActivityState for the specified Activity.
+ * If create is true, then create it if it doesn't already exist,
+ * and ensure the NFC fragment is attached to the activity.
+ */
+ synchronized NfcActivityState getOrCreateState(Activity activity, boolean create) {
+ if (DBG) Log.d(TAG, "getOrCreateState " + activity + " " + create);
+ NfcActivityState state = mNfcState.get(activity);
+ if (state == null && create) {
+ state = new NfcActivityState();
+ mNfcState.put(activity, state);
+ NfcFragment.attach(activity);
+ }
+ return state;
+ }
+
+ /**
+ * If the NfcActivityState is empty then remove it, and
+ * detach it from the Activity.
+ */
+ synchronized void maybeRemoveState(Activity activity, NfcActivityState state) {
+ if (state.ndefMessage == null && state.ndefMessageCallback == null &&
+ state.onNdefPushCompleteCallback == null) {
+ mNfcState.remove(activity);
+ }
+ }
+
+ /**
+ * Register NfcActivityState with the NFC service.
+ */
+ synchronized void updateNfcService(NfcActivityState state) {
+ boolean serviceCallbackNeeded = state.ndefMessageCallback != null ||
+ state.onNdefPushCompleteCallback != null;
+
+ try {
+ NfcAdapter.sService.setForegroundNdefPush(state.resumed ? state.ndefMessage : null,
+ state.resumed && serviceCallbackNeeded ? this : null);
+ } catch (RemoteException e) {
+ mAdapter.attemptDeadServiceRecovery(e);
+ }
+ }
+
+ /**
+ * Callback from NFC service
+ */
+ @Override
+ public NdefMessage createMessage() {
+ NfcAdapter.CreateNdefMessageCallback callback = null;
+ synchronized (NfcActivityManager.this) {
+ for (NfcActivityState state : mNfcState.values()) {
+ if (state.resumed) {
+ callback = state.ndefMessageCallback;
+ }
+ }
+ }
+
+ // drop lock before making callback
+ if (callback != null) {
+ return callback.createNdefMessage(mDefaultEvent);
+ }
+ return null;
+ }
+
+ /**
+ * Callback from NFC service
+ */
+ @Override
+ public void onNdefPushComplete() {
+ NfcAdapter.OnNdefPushCompleteCallback callback = null;
+ synchronized (NfcActivityManager.this) {
+ for (NfcActivityState state : mNfcState.values()) {
+ if (state.resumed) {
+ callback = state.onNdefPushCompleteCallback;
+ }
+ }
+ }
+
+ // drop lock before making callback
+ if (callback != null) {
+ callback.onNdefPushComplete(mDefaultEvent);
+ }
+ }
+}
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 6a904ae..d58b249 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -42,7 +42,7 @@ import android.util.Log;
* adapter for this Android device.
*/
public final class NfcAdapter {
- private static final String TAG = "NFC";
+ static final String TAG = "NFC";
/**
* Intent to start an activity when a tag with NDEF payload is discovered.
@@ -187,107 +187,68 @@ public final class NfcAdapter {
/** @hide */
public static final int STATE_TURNING_OFF = 4;
- /**
- * LLCP link status: The LLCP link is activated.
- * @hide
- */
- public static final int LLCP_LINK_STATE_ACTIVATED = 0;
-
- /**
- * LLCP link status: The LLCP link is deactivated.
- * @hide
- */
- public static final int LLCP_LINK_STATE_DEACTIVATED = 1;
+ // Guarded by NfcAdapter.class
+ static boolean sIsInitialized = false;
- /**
- * Broadcast Action: the LLCP link state changed.
- * <p>
- * Always contains the extra field
- * {@link android.nfc.NfcAdapter#EXTRA_LLCP_LINK_STATE_CHANGED}.
- * @hide
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String ACTION_LLCP_LINK_STATE_CHANGED =
- "android.nfc.action.LLCP_LINK_STATE_CHANGED";
+ // Final after first constructor, except for
+ // attemptDeadServiceRecovery() when NFC crashes - we accept a best effort
+ // recovery
+ static INfcAdapter sService;
+ static INfcTag sTagService;
/**
- * Used as int extra field in
- * {@link android.nfc.NfcAdapter#ACTION_LLCP_LINK_STATE_CHANGED}.
- * <p>
- * It contains the new state of the LLCP link.
- * @hide
+ * NfcAdapter is currently a singleton, and does not require a context.
+ * However all the public API's are future-proofed to require a context.
+ * If we start using that then we'll need to keep a HashMap of
+ * Context.getApplicationContext() -> NfcAdapter, such that NfcAdapter
+ * is a singleton within each application context.
*/
- public static final String EXTRA_LLCP_LINK_STATE_CHANGED = "android.nfc.extra.LLCP_LINK_STATE";
+ static NfcAdapter sSingleton; // protected by NfcAdapter.class
- /**
- * Tag Reader Discovery mode
- * @hide
- */
- private static final int DISCOVERY_MODE_TAG_READER = 0;
+ final NfcActivityManager mNfcActivityManager;
/**
- * NFC-IP1 Peer-to-Peer mode Enables the manager to act as a peer in an
- * NFC-IP1 communication. Implementations should not assume that the
- * controller will end up behaving as an NFC-IP1 target or initiator and
- * should handle both cases, depending on the type of the remote peer type.
- * @hide
+ * @see {@link #setNdefPushMessageCallback}
*/
- private static final int DISCOVERY_MODE_NFCIP1 = 1;
-
- /**
- * Card Emulation mode Enables the manager to act as an NFC tag. Provided
- * that a Secure Element (an UICC for instance) is connected to the NFC
- * controller through its SWP interface, it can be exposed to the outside
- * NFC world and be addressed by external readers the same way they would
- * with a tag.
- * <p>
- * Which Secure Element is exposed is implementation-dependent.
- *
- * @hide
- */
- private static final int DISCOVERY_MODE_CARD_EMULATION = 2;
+ public interface OnNdefPushCompleteCallback {
+ /**
+ * Called on successful NDEF push.
+ *
+ * <p>This callback is usually made on a binder thread (not the UI thread).
+ *
+ * @param event {@link NfcEvent} with the {@link NfcEvent#nfcAdapter} field set
+ * @see {@link #setNdefPushMessageCallback}
+ */
+ public void onNdefPushComplete(NfcEvent event);
+ }
/**
- * Callback passed into {@link #enableForegroundNdefPush(Activity,NdefPushCallback)}. This
+ * @see {@link #setCeateNdefMessageCallback}
*/
- public interface NdefPushCallback {
+ public interface CreateNdefMessageCallback {
/**
- * Called when a P2P connection is created.
+ * Called to provide a {@link NdefMessage} to push.
+ *
+ * <p>This callback is usually made on a binder thread (not the UI thread).
+ *
+ * <p>Called when this device is in range of another device
+ * that might support NDEF push. It allows the application to
+ * create the NDEF message only when it is required.
+ *
+ * <p>NDEF push cannot occur until this method returns, so do not
+ * block for too long.
+ *
+ * <p>The Android operating system will usually show a system UI
+ * on top of your activity during this time, so do not try to request
+ * input from the user to complete the callback, or provide custom NDEF
+ * push UI. The user probably will not see it.
+ *
+ * @param event {@link NfcEvent} with the {@link NfcEvent#nfcAdapter} field set
+ * @return NDEF message to push, or null to not provide a message
*/
- NdefMessage createMessage();
- /**
- * Called when the message is pushed.
- */
- void onMessagePushed();
+ public NdefMessage createNdefMessage(NfcEvent event);
}
- private static class NdefPushCallbackWrapper extends INdefPushCallback.Stub {
- private NdefPushCallback mCallback;
-
- public NdefPushCallbackWrapper(NdefPushCallback callback) {
- mCallback = callback;
- }
-
- @Override
- public NdefMessage onConnect() {
- return mCallback.createMessage();
- }
-
- @Override
- public void onMessagePushed() {
- mCallback.onMessagePushed();
- }
- }
-
- // Guarded by NfcAdapter.class
- private static boolean sIsInitialized = false;
-
- // Final after first constructor, except for
- // attemptDeadServiceRecovery() when NFC crashes - we accept a best effort
- // recovery
- private static INfcAdapter sService;
- private static INfcTag sTagService;
-
/**
* Helper to check if this device has FEATURE_NFC, but without using
* a context.
@@ -308,29 +269,36 @@ public final class NfcAdapter {
}
}
- private static synchronized INfcAdapter setupService() {
+ /**
+ * Returns the singleton, or throws if NFC is not available.
+ */
+ static synchronized NfcAdapter getSingleton() {
if (!sIsInitialized) {
sIsInitialized = true;
/* is this device meant to have NFC */
if (!hasNfcFeature()) {
Log.v(TAG, "this device does not have NFC support");
- return null;
+ throw new UnsupportedOperationException();
}
sService = getServiceInterface();
if (sService == null) {
Log.e(TAG, "could not retrieve NFC service");
- return null;
+ throw new UnsupportedOperationException();
}
try {
sTagService = sService.getNfcTagInterface();
} catch (RemoteException e) {
Log.e(TAG, "could not retrieve NFC Tag service");
- return null;
+ throw new UnsupportedOperationException();
}
+ sSingleton = new NfcAdapter();
}
- return sService;
+ if (sSingleton == null) {
+ throw new UnsupportedOperationException();
+ }
+ return sSingleton;
}
/** get handle to NFC service interface */
@@ -376,13 +344,14 @@ public final class NfcAdapter {
public static NfcAdapter getDefaultAdapter() {
Log.w(TAG, "WARNING: NfcAdapter.getDefaultAdapter() is deprecated, use " +
"NfcAdapter.getDefaultAdapter(Context) instead", new Exception());
- return new NfcAdapter(null);
+ return getSingleton();
}
- /*package*/ NfcAdapter(Context context) {
- if (setupService() == null) {
- throw new UnsupportedOperationException();
- }
+ /**
+ * Does not currently need a context.
+ */
+ NfcAdapter() {
+ mNfcActivityManager = new NfcActivityManager(this);
}
/**
@@ -524,6 +493,87 @@ public final class NfcAdapter {
}
/**
+ * Set the {@link NdefMessage} to push over NFC during the specified activities.
+ *
+ * <p>This method may be called at any time, but the NDEF message is
+ * only made available for NDEF push when one of the specified activities
+ * is in resumed (foreground) state.
+ *
+ * <p>Only one NDEF message can be pushed by the currently resumed activity.
+ * If both {@link #setNdefPushMessage} and
+ * {@link #setNdefPushMessageCallback} are set then
+ * the callback will take priority.
+ *
+ * <p>Pass a null NDEF message to disable foreground NDEF push in the
+ * specified activities.
+ *
+ * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
+ *
+ * @param message NDEF message to push over NFC, or null to disable
+ * @param activities one or more {@link Activity} to enable for NDEF push
+ */
+ public void setNdefPushMessage(NdefMessage message, Activity ... activities) {
+ if (activities.length == 0) {
+ throw new NullPointerException("Must specificy one or more activities");
+ }
+ for (Activity a : activities) {
+ mNfcActivityManager.setNdefPushMessage(a, message);
+ }
+ }
+
+ /**
+ * Set the callback to create a {@link NdefMessage} to push over NFC.
+ *
+ * <p>This method may be called at any time, but this callback is
+ * only made if one of the specified activities
+ * is in resumed (foreground) state.
+ *
+ * <p>Only one NDEF message can be pushed by the currently resumed activity.
+ * If both {@link #setNdefPushMessage} and
+ * {@link #setNdefPushMessageCallback} are set then
+ * the callback will take priority.
+ *
+ * <p>Pass a null callback to disable the callback in the
+ * specified activities.
+ *
+ * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
+ *
+ * @param callback callback, or null to disable
+ * @param activities one or more {@link Activity} to enable for NDEF push
+ */
+ public void setNdefPushMessageCallback(CreateNdefMessageCallback callback,
+ Activity ... activities) {
+ if (activities.length == 0) {
+ throw new NullPointerException("Must specificy one or more activities");
+ }
+ for (Activity a : activities) {
+ mNfcActivityManager.setNdefPushMessageCallback(a, callback);
+ }
+ }
+
+ /**
+ * Set the callback on a successful NDEF push over NFC.
+ *
+ * <p>This method may be called at any time, but NDEF push and this callback
+ * can only occur when one of the specified activities is in resumed
+ * (foreground) state.
+ *
+ * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
+ *
+ * @param callback callback, or null to disable
+ * @param activities one or more {@link Activity} to enable the callback
+ */
+ public void setOnNdefPushCompleteCallback(OnNdefPushCompleteCallback callback,
+ Activity ... activities) {
+ if (activities.length == 0) {
+ throw new NullPointerException("Must specificy one or more activities");
+ }
+ for (Activity a : activities) {
+ mNfcActivityManager.setOnNdefPushCompleteCallback(a, callback);
+ }
+ }
+
+ /**
* Enable foreground dispatch to the given Activity.
*
* <p>This will give give priority to the foreground activity when
@@ -562,7 +612,7 @@ public final class NfcAdapter {
throw new NullPointerException();
}
if (!activity.isResumed()) {
- throw new IllegalStateException("Foregorund dispatching can only be enabled " +
+ throw new IllegalStateException("Foreground dispatch can only be enabled " +
"when your activity is resumed");
}
try {
@@ -572,8 +622,7 @@ public final class NfcAdapter {
}
ActivityThread.currentActivityThread().registerOnActivityPausedListener(activity,
mForegroundDispatchListener);
- sService.enableForegroundDispatch(activity.getComponentName(), intent, filters,
- parcel);
+ sService.setForegroundDispatch(intent, filters, parcel);
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
}
@@ -608,9 +657,9 @@ public final class NfcAdapter {
void disableForegroundDispatchInternal(Activity activity, boolean force) {
try {
- sService.disableForegroundDispatch(activity.getComponentName());
+ sService.setForegroundDispatch(null, null, null);
if (!force && !activity.isResumed()) {
- throw new IllegalStateException("You must disable forgeground dispatching " +
+ throw new IllegalStateException("You must disable foreground dispatching " +
"while your activity is still resumed");
}
} catch (RemoteException e) {
@@ -619,78 +668,38 @@ public final class NfcAdapter {
}
/**
- * Enable NDEF message push over P2P while this Activity is in the foreground.
- *
- * <p>For this to function properly the other NFC device being scanned must
- * support the "com.android.npp" NDEF push protocol. Support for this
- * protocol is currently optional for Android NFC devices.
+ * Enable NDEF message push over NFC while this Activity is in the foreground.
*
- * <p>This method must be called from the main thread.
+ * <p>You must explicitly call this method every time the activity is
+ * resumed, and you must call {@link #disableForegroundNdefPush} before
+ * your activity completes {@link Activity#onPause}.
*
- * <p class="note"><em>NOTE:</em> While foreground NDEF push is active standard tag dispatch is disabled.
- * Only the foreground activity may receive tag discovered dispatches via
- * {@link #enableForegroundDispatch}.
+ * <p>Strongly recommend to use the new {@link #setNdefPushMessage}
+ * instead: it automatically hooks into your activity life-cycle,
+ * so you do not need to call enable/disable in your onResume/onPause.
*
- * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
- *
- * @param activity the foreground Activity
- * @param msg a NDEF Message to push over P2P
- * @throws IllegalStateException if the Activity is not currently in the foreground
- * @throws OperationNotSupportedException if this Android device does not support NDEF push
- */
- public void enableForegroundNdefPush(Activity activity, NdefMessage msg) {
- if (activity == null || msg == null) {
- throw new NullPointerException();
- }
- if (!activity.isResumed()) {
- throw new IllegalStateException("Foregorund NDEF push can only be enabled " +
- "when your activity is resumed");
- }
- try {
- ActivityThread.currentActivityThread().registerOnActivityPausedListener(activity,
- mForegroundNdefPushListener);
- sService.enableForegroundNdefPush(activity.getComponentName(), msg);
- } catch (RemoteException e) {
- attemptDeadServiceRecovery(e);
- }
- }
-
- /**
- * Enable NDEF message push over P2P while this Activity is in the foreground.
- *
- * <p>For this to function properly the other NFC device being scanned must
- * support the "com.android.npp" NDEF push protocol. Support for this
- * protocol is currently optional for Android NFC devices.
+ * <p>For NDEF push to function properly the other NFC device must
+ * support either NFC Forum's SNEP (Simple Ndef Exchange Protocol), or
+ * Android's "com.android.npp" (Ndef Push Protocol). This was optional
+ * on Gingerbread level Android NFC devices, but SNEP is mandatory on
+ * Ice-Cream-Sandwich and beyond.
*
* <p>This method must be called from the main thread.
*
- * <p class="note"><em>NOTE:</em> While foreground NDEF push is active standard tag dispatch is disabled.
- * Only the foreground activity may receive tag discovered dispatches via
- * {@link #enableForegroundDispatch}.
- *
* <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
*
- * @param activity the foreground Activity
- * @param callback is called on when the P2P connection is established
- * @throws IllegalStateException if the Activity is not currently in the foreground
- * @throws OperationNotSupportedException if this Android device does not support NDEF push
+ * @param activity foreground activity
+ * @param message a NDEF Message to push over NFC
+ * @throws IllegalStateException if the activity is not currently in the foreground
+ * @deprecated use {@link #setNdefPushMessage} instead
*/
- public void enableForegroundNdefPush(Activity activity, NdefPushCallback callback) {
- if (activity == null || callback == null) {
+ @Deprecated
+ public void enableForegroundNdefPush(Activity activity, NdefMessage message) {
+ if (activity == null || message == null) {
throw new NullPointerException();
}
- if (!activity.isResumed()) {
- throw new IllegalStateException("Foregorund NDEF push can only be enabled " +
- "when your activity is resumed");
- }
- try {
- ActivityThread.currentActivityThread().registerOnActivityPausedListener(activity,
- mForegroundNdefPushListener);
- sService.enableForegroundNdefPushWithCallback(activity.getComponentName(),
- new NdefPushCallbackWrapper(callback));
- } catch (RemoteException e) {
- attemptDeadServiceRecovery(e);
- }
+ enforceResumed(activity);
+ mNfcActivityManager.setNdefPushMessage(activity, message);
}
/**
@@ -700,47 +709,91 @@ public final class NfcAdapter {
* must call this method before its {@link Activity#onPause} callback
* completes.
*
+ * <p>Strongly recommend to use the new {@link #setNdefPushMessage}
+ * instead: it automatically hooks into your activity life-cycle,
+ * so you do not need to call enable/disable in your onResume/onPause.
+ *
* <p>This method must be called from the main thread.
*
* <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
*
* @param activity the Foreground activity
* @throws IllegalStateException if the Activity has already been paused
- * @throws OperationNotSupportedException if this Android device does not support NDEF push
+ * @deprecated use {@link #setNdefPushMessage} instead
*/
public void disableForegroundNdefPush(Activity activity) {
- ActivityThread.currentActivityThread().unregisterOnActivityPausedListener(activity,
- mForegroundNdefPushListener);
- disableForegroundNdefPushInternal(activity, false);
+ if (activity == null) {
+ throw new NullPointerException();
+ }
+ enforceResumed(activity);
+ mNfcActivityManager.setNdefPushMessage(activity, null);
+ mNfcActivityManager.setNdefPushMessageCallback(activity, null);
+ mNfcActivityManager.setOnNdefPushCompleteCallback(activity, null);
}
- OnActivityPausedListener mForegroundNdefPushListener = new OnActivityPausedListener() {
+ /**
+ * TODO: Remove this once pre-built apk's (Maps, Youtube etc) are updated
+ * @deprecated use {@link CreateNdefMessageCallback} or {@link OnNdefPushCompleteCallback}
+ * @hide
+ */
+ @Deprecated
+ public interface NdefPushCallback {
+ /**
+ * @deprecated use {@link CreateNdefMessageCallback} instead
+ */
+ @Deprecated
+ NdefMessage createMessage();
+ /**
+ * @deprecated use{@link OnNdefPushCompleteCallback} instead
+ */
+ @Deprecated
+ void onMessagePushed();
+ }
+
+ /**
+ * TODO: Remove this
+ * Converts new callbacks to old callbacks.
+ */
+ static final class LegacyCallbackWrapper implements CreateNdefMessageCallback,
+ OnNdefPushCompleteCallback {
+ final NdefPushCallback mLegacyCallback;
+ LegacyCallbackWrapper(NdefPushCallback legacyCallback) {
+ mLegacyCallback = legacyCallback;
+ }
@Override
- public void onPaused(Activity activity) {
- disableForegroundNdefPushInternal(activity, true);
+ public void onNdefPushComplete(NfcEvent event) {
+ mLegacyCallback.onMessagePushed();
}
- };
+ @Override
+ public NdefMessage createNdefMessage(NfcEvent event) {
+ return mLegacyCallback.createMessage();
+ }
+ }
- void disableForegroundNdefPushInternal(Activity activity, boolean force) {
- try {
- sService.disableForegroundNdefPush(activity.getComponentName());
- if (!force && !activity.isResumed()) {
- throw new IllegalStateException("You must disable forgeground NDEF push " +
- "while your activity is still resumed");
- }
- } catch (RemoteException e) {
- attemptDeadServiceRecovery(e);
+ /**
+ * TODO: Remove this once pre-built apk's (Maps, Youtube etc) are updated
+ * @deprecated use {@link #setNdefPushMessageCallback} instead
+ * @hide
+ */
+ @Deprecated
+ public void enableForegroundNdefPush(Activity activity, final NdefPushCallback callback) {
+ if (activity == null || callback == null) {
+ throw new NullPointerException();
}
+ enforceResumed(activity);
+ LegacyCallbackWrapper callbackWrapper = new LegacyCallbackWrapper(callback);
+ mNfcActivityManager.setNdefPushMessageCallback(activity, callbackWrapper);
+ mNfcActivityManager.setOnNdefPushCompleteCallback(activity, callbackWrapper);
}
/**
- * Enable zero-click sharing.
- *
+ * Enable NDEF Push feature.
+ * <p>This API is for the Settings application.
* @hide
*/
- public boolean enableZeroClick() {
+ public boolean enableNdefPush() {
try {
- return sService.enableZeroClick();
+ return sService.enableNdefPush();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
return false;
@@ -748,13 +801,13 @@ public final class NfcAdapter {
}
/**
- * Disable zero-click sharing.
- *
+ * Disable NDEF Push feature.
+ * <p>This API is for the Settings application.
* @hide
*/
- public boolean disableZeroClick() {
+ public boolean disableNdefPush() {
try {
- return sService.disableZeroClick();
+ return sService.disableNdefPush();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
return false;
@@ -762,20 +815,20 @@ public final class NfcAdapter {
}
/**
- * Return true if zero-click sharing feature is enabled.
+ * Return true if NDEF Push feature is enabled.
* <p>This function can return true even if NFC is currently turned-off.
- * This indicates that zero-click is not currently active, but it has
+ * This indicates that NDEF Push is not currently active, but it has
* been requested by the user and will be active as soon as NFC is turned
* on.
- * <p>If you want to check if zero-click sharing is currently active, use
- * <code>{@link #isEnabled()} && {@link #isZeroClickEnabled()}</code>
+ * <p>If you want to check if NDEF PUsh sharing is currently active, use
+ * <code>{@link #isEnabled()} && {@link #isNdefPushEnabled()}</code>
*
- * @return true if zero-click sharing is enabled
+ * @return true if NDEF Push feature is enabled
* @hide
*/
- public boolean isZeroClickEnabled() {
+ public boolean isNdefPushEnabled() {
try {
- return sService.isZeroClickEnabled();
+ return sService.isNdefPushEnabled();
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
return false;
@@ -793,4 +846,10 @@ public final class NfcAdapter {
return null;
}
}
+
+ void enforceResumed(Activity activity) {
+ if (!activity.isResumed()) {
+ throw new IllegalStateException("API cannot be called while activity is paused");
+ }
+ }
}
diff --git a/core/java/android/nfc/NfcEvent.java b/core/java/android/nfc/NfcEvent.java
new file mode 100644
index 0000000..b00d8b7
--- /dev/null
+++ b/core/java/android/nfc/NfcEvent.java
@@ -0,0 +1,44 @@
+/*
+ * 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 android.nfc;
+
+/**
+ * Wraps information associated with any NFC event.
+ *
+ * <p>Immutable object, with direct access to the (final) fields.
+ *
+ * <p>An {@link NfcEvent} object is usually included in callbacks from
+ * {@link NfcAdapter}. Check the documentation of the callback to see
+ * which fields may be set.
+ *
+ * <p>This wrapper object is used (instead of parameters
+ * in the callback) because it allows new fields to be added without breaking
+ * API compatibility.
+ *
+ * @see {@link NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete}
+ * @see {@link NfcAdapter.CreateNdefMessageCallback#createNdefMessage}
+ */
+public final class NfcEvent {
+ /**
+ * The {@link NfcAdapter} associated with the NFC event.
+ */
+ public final NfcAdapter nfcAdapter;
+
+ NfcEvent(NfcAdapter nfcAdapter) {
+ this.nfcAdapter = nfcAdapter;
+ }
+}
diff --git a/core/java/android/nfc/NfcFragment.java b/core/java/android/nfc/NfcFragment.java
new file mode 100644
index 0000000..c48859b
--- /dev/null
+++ b/core/java/android/nfc/NfcFragment.java
@@ -0,0 +1,83 @@
+/*
+ * 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 android.nfc;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+
+/**
+ * Used by {@link NfcActivityManager} to attach to activity life-cycle.
+ * @hide
+ */
+public final class NfcFragment extends Fragment {
+ static final String FRAGMENT_TAG = "android.nfc.NfcFragment";
+
+ // only used on UI thread
+ static boolean sIsInitialized = false;
+ static NfcActivityManager sNfcActivityManager;
+
+ /**
+ * Attach NfcFragment to an activity (if not already attached).
+ */
+ public static void attach(Activity activity) {
+ FragmentManager manager = activity.getFragmentManager();
+ if (manager.findFragmentByTag(FRAGMENT_TAG) == null) {
+ manager.beginTransaction().add(new NfcFragment(), FRAGMENT_TAG).commit();
+ }
+ }
+
+ /**
+ * Remove NfcFragment from activity.
+ */
+ public static void remove(Activity activity) {
+ FragmentManager manager = activity.getFragmentManager();
+ Fragment fragment = manager.findFragmentByTag(FRAGMENT_TAG);
+ if (fragment != null) {
+ manager.beginTransaction().remove(fragment).commit();
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ if (!sIsInitialized) {
+ sIsInitialized = true;
+ NfcAdapter adapter = NfcAdapter.getDefaultAdapter(
+ activity.getApplicationContext());
+ if (adapter != null) {
+ sNfcActivityManager = adapter.mNfcActivityManager;
+ }
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (sNfcActivityManager != null) {
+ sNfcActivityManager.onResume(getActivity());
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (sNfcActivityManager != null) {
+ sNfcActivityManager.onPause(getActivity());
+ }
+ }
+}
diff --git a/core/java/android/nfc/NfcManager.java b/core/java/android/nfc/NfcManager.java
index 5fa6483..300ab45 100644
--- a/core/java/android/nfc/NfcManager.java
+++ b/core/java/android/nfc/NfcManager.java
@@ -40,7 +40,7 @@ public final class NfcManager {
public NfcManager(Context context) {
NfcAdapter adapter;
try {
- adapter = new NfcAdapter(context);
+ adapter = NfcAdapter.getSingleton();
} catch (UnsupportedOperationException e) {
adapter = null;
}
diff --git a/core/java/android/nfc/TransceiveResult.java b/core/java/android/nfc/TransceiveResult.java
index 16244b8..3538825 100644
--- a/core/java/android/nfc/TransceiveResult.java
+++ b/core/java/android/nfc/TransceiveResult.java
@@ -19,33 +19,38 @@ package android.nfc;
import android.os.Parcel;
import android.os.Parcelable;
+import java.io.IOException;
+
/**
* Class used to pipe transceive result from the NFC service.
*
* @hide
*/
public final class TransceiveResult implements Parcelable {
- private final boolean mTagLost;
- private final boolean mSuccess;
- private final byte[] mResponseData;
+ public static final int RESULT_SUCCESS = 0;
+ public static final int RESULT_FAILURE = 1;
+ public static final int RESULT_TAGLOST = 2;
+ public static final int RESULT_EXCEEDED_LENGTH = 3;
- public TransceiveResult(final boolean success, final boolean tagIsLost,
- final byte[] data) {
- mSuccess = success;
- mTagLost = tagIsLost;
- mResponseData = data;
- }
+ final int mResult;
+ final byte[] mResponseData;
- public boolean isSuccessful() {
- return mSuccess;
- }
-
- public boolean isTagLost() {
- return mTagLost;
+ public TransceiveResult(final int result, final byte[] data) {
+ mResult = result;
+ mResponseData = data;
}
- public byte[] getResponseData() {
- return mResponseData;
+ public byte[] getResponseOrThrow() throws IOException {
+ switch (mResult) {
+ case RESULT_SUCCESS:
+ return mResponseData;
+ case RESULT_TAGLOST:
+ throw new TagLostException("Tag was lost.");
+ case RESULT_EXCEEDED_LENGTH:
+ throw new IOException("Transceive length exceeds supported maximum");
+ default:
+ throw new IOException("Transceive failed");
+ }
}
@Override
@@ -55,9 +60,8 @@ public final class TransceiveResult implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mSuccess ? 1 : 0);
- dest.writeInt(mTagLost ? 1 : 0);
- if (mSuccess) {
+ dest.writeInt(mResult);
+ if (mResult == RESULT_SUCCESS) {
dest.writeInt(mResponseData.length);
dest.writeByteArray(mResponseData);
}
@@ -67,18 +71,17 @@ public final class TransceiveResult implements Parcelable {
new Parcelable.Creator<TransceiveResult>() {
@Override
public TransceiveResult createFromParcel(Parcel in) {
- boolean success = (in.readInt() == 1) ? true : false;
- boolean tagLost = (in.readInt() == 1) ? true : false;
+ int result = in.readInt();
byte[] responseData;
- if (success) {
+ if (result == RESULT_SUCCESS) {
int responseLength = in.readInt();
responseData = new byte[responseLength];
in.readByteArray(responseData);
} else {
responseData = null;
}
- return new TransceiveResult(success, tagLost, responseData);
+ return new TransceiveResult(result, responseData);
}
@Override
diff --git a/core/java/android/nfc/tech/BasicTagTechnology.java b/core/java/android/nfc/tech/BasicTagTechnology.java
index bcb7199..913ae0e 100644
--- a/core/java/android/nfc/tech/BasicTagTechnology.java
+++ b/core/java/android/nfc/tech/BasicTagTechnology.java
@@ -129,6 +129,15 @@ import java.io.IOException;
}
}
+ /** Internal getMaxTransceiveLength() */
+ int getMaxTransceiveLengthInternal() {
+ try {
+ return mTag.getTagService().getMaxTransceiveLength(mSelectedTechnology);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service dead", e);
+ return 0;
+ }
+ }
/** Internal transceive */
/*package*/ byte[] transceive(byte[] data, boolean raw) throws IOException {
checkConnected();
@@ -139,16 +148,7 @@ import java.io.IOException;
if (result == null) {
throw new IOException("transceive failed");
} else {
- if (result.isSuccessful()) {
- return result.getResponseData();
- } else {
- if (result.isTagLost()) {
- throw new TagLostException("Tag was lost.");
- }
- else {
- throw new IOException("transceive failed");
- }
- }
+ return result.getResponseOrThrow();
}
} catch (RemoteException e) {
Log.e(TAG, "NFC service dead", e);
diff --git a/core/java/android/nfc/tech/IsoDep.java b/core/java/android/nfc/tech/IsoDep.java
index 0672a4e..6054fe8 100644
--- a/core/java/android/nfc/tech/IsoDep.java
+++ b/core/java/android/nfc/tech/IsoDep.java
@@ -156,6 +156,9 @@ public final class IsoDep extends BasicTagTechnology {
* will be automatically fragmented and defragmented by {@link #transceive} if
* it exceeds FSD/FSC limits.
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -170,4 +173,12 @@ public final class IsoDep extends BasicTagTechnology {
public byte[] transceive(byte[] data) throws IOException {
return transceive(data, true);
}
+
+ /**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
}
diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java
index 93e7cbd..ce923ae 100644
--- a/core/java/android/nfc/tech/MifareClassic.java
+++ b/core/java/android/nfc/tech/MifareClassic.java
@@ -560,6 +560,9 @@ public final class MifareClassic extends BasicTagTechnology {
* and calling {@link NfcA#transceive}. Note that all MIFARE Classic
* tags are based on {@link NfcA} technology.
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -573,6 +576,14 @@ public final class MifareClassic extends BasicTagTechnology {
}
/**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
+
+ /**
* Set the timeout of {@link #transceive} in milliseconds.
* <p>The timeout only applies to MifareUltralight {@link #transceive},
* and is reset to a default value when {@link #close} is called.
diff --git a/core/java/android/nfc/tech/MifareUltralight.java b/core/java/android/nfc/tech/MifareUltralight.java
index ca74ebe..890b735 100644
--- a/core/java/android/nfc/tech/MifareUltralight.java
+++ b/core/java/android/nfc/tech/MifareUltralight.java
@@ -200,6 +200,9 @@ public final class MifareUltralight extends BasicTagTechnology {
* and calling {@link NfcA#transceive}. Note that all MIFARE Classic
* tags are based on {@link NfcA} technology.
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -213,6 +216,14 @@ public final class MifareUltralight extends BasicTagTechnology {
}
/**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
+
+ /**
* Set the timeout of {@link #transceive} in milliseconds.
* <p>The timeout only applies to MifareUltralight {@link #transceive},
* and is reset to a default value when {@link #close} is called.
diff --git a/core/java/android/nfc/tech/Ndef.java b/core/java/android/nfc/tech/Ndef.java
index e4daa57..b266bb6 100644
--- a/core/java/android/nfc/tech/Ndef.java
+++ b/core/java/android/nfc/tech/Ndef.java
@@ -334,9 +334,11 @@ public final class Ndef extends BasicTagTechnology {
* @return true if it is possible to make this tag read-only
*/
public boolean canMakeReadOnly() {
- if (mNdefType == TYPE_1 || mNdefType == TYPE_2) {
- return true;
- } else {
+ INfcTag tagService = mTag.getTagService();
+ try {
+ return tagService.canMakeReadOnly(mNdefType);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service dead", e);
return false;
}
}
diff --git a/core/java/android/nfc/tech/NfcA.java b/core/java/android/nfc/tech/NfcA.java
index bd1f95a..bb8aec9 100644
--- a/core/java/android/nfc/tech/NfcA.java
+++ b/core/java/android/nfc/tech/NfcA.java
@@ -102,6 +102,9 @@ public final class NfcA extends BasicTagTechnology {
* for example a SENS_REQ is not possible (these are used to
* manage tag polling and initialization).
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -118,6 +121,14 @@ public final class NfcA extends BasicTagTechnology {
}
/**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
+
+ /**
* Set the timeout of {@link #transceive} in milliseconds.
* <p>The timeout only applies to NfcA {@link #transceive}, and is
* reset to a default value when {@link #close} is called.
diff --git a/core/java/android/nfc/tech/NfcB.java b/core/java/android/nfc/tech/NfcB.java
index 22cb11d..3ebd47f 100644
--- a/core/java/android/nfc/tech/NfcB.java
+++ b/core/java/android/nfc/tech/NfcB.java
@@ -97,6 +97,9 @@ public final class NfcB extends BasicTagTechnology {
* <p>Applications must not send commands that manage the polling
* loop and initialization (SENSB_REQ, SLOT_MARKER etc).
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum number of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -111,4 +114,12 @@ public final class NfcB extends BasicTagTechnology {
public byte[] transceive(byte[] data) throws IOException {
return transceive(data, true);
}
+
+ /**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
}
diff --git a/core/java/android/nfc/tech/NfcF.java b/core/java/android/nfc/tech/NfcF.java
index 7b25a72..0938fb4 100644
--- a/core/java/android/nfc/tech/NfcF.java
+++ b/core/java/android/nfc/tech/NfcF.java
@@ -101,6 +101,9 @@ public final class NfcF extends BasicTagTechnology {
* <p>Applications must not append the SoD (length) or EoD (CRC) to the payload,
* it will be automatically calculated.
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum amount of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -117,6 +120,14 @@ public final class NfcF extends BasicTagTechnology {
}
/**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
+
+ /**
* Set the timeout of {@link #transceive} in milliseconds.
* <p>The timeout only applies to NfcF {@link #transceive}, and is
* reset to a default value when {@link #close} is called.
diff --git a/core/java/android/nfc/tech/NfcV.java b/core/java/android/nfc/tech/NfcV.java
index fe721c8..186c63b 100644
--- a/core/java/android/nfc/tech/NfcV.java
+++ b/core/java/android/nfc/tech/NfcV.java
@@ -97,6 +97,9 @@ public final class NfcV extends BasicTagTechnology {
* it will be automatically calculated. The application does
* provide FLAGS, CMD and PARAMETER bytes.
*
+ * <p>Use {@link #getMaxTransceiveLength} to retrieve the maximum amount of bytes
+ * that can be sent with {@link #transceive}.
+ *
* <p>This is an I/O operation and will block until complete. It must
* not be called from the main application thread. A blocked call will be canceled with
* {@link IOException} if {@link #close} is called from another thread.
@@ -111,4 +114,13 @@ public final class NfcV extends BasicTagTechnology {
public byte[] transceive(byte[] data) throws IOException {
return transceive(data, true);
}
+
+
+ /**
+ * Return the maximum number of bytes that can be sent with {@link #transceive}.
+ * @return the maximum number of bytes that can be sent with {@link #transceive}.
+ */
+ public int getMaxTransceiveLength() {
+ return getMaxTransceiveLengthInternal();
+ }
}
diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java
index 73427d2..c59ed18 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -321,8 +321,7 @@ public abstract class DialogPreference extends Preference implements
*/
private void requestInputMethod(Dialog dialog) {
Window window = dialog.getWindow();
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE |
- WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+ window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
/**
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 5b29103..6fe5124 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -110,6 +110,12 @@ public final class CalendarContract {
public static final String EXTRA_EVENT_END_TIME = "endTime";
/**
+ * Intent Extras key: When creating an event, set this to true to create an
+ * all-day event by default
+ */
+ public static final String EXTRA_EVENT_ALL_DAY = "allDay";
+
+ /**
* This authority is used for writing to or querying from the calendar
* provider. Note: This is set at first run and cannot be changed without
* breaking apps that access the provider.
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index a66fa81..5321c6a 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -2692,6 +2692,7 @@ public final class ContactsContract {
ContentValues cv = new ContentValues();
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_NAME);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ACCOUNT_TYPE);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, DATA_SET);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, _ID);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, VERSION);
@@ -3023,6 +3024,16 @@ public final class ContactsContract {
Uri.withAppendedPath(AUTHORITY_URI, "stream_items_limit");
/**
+ * The MIME type of a directory of stream items.
+ */
+ public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
+
+ /**
+ * The MIME type of a single stream item.
+ */
+ public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
+
+ /**
* Queries to {@link ContactsContract.StreamItems#CONTENT_LIMIT_URI} will
* contain this column, with the value indicating the maximum number of
* stream items that will be stored under any single raw contact.
@@ -3049,6 +3060,17 @@ public final class ContactsContract {
* The directory twig for this sub-table
*/
public static final String CONTENT_DIRECTORY = "photo";
+
+ /**
+ * The MIME type of a directory of stream item photos.
+ */
+ public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
+
+ /**
+ * The MIME type of a single stream item photo.
+ */
+ public static final String CONTENT_ITEM_TYPE
+ = "vnd.android.cursor.item/stream_item_photo";
}
}
@@ -3059,8 +3081,27 @@ public final class ContactsContract {
*/
protected interface StreamItemsColumns {
/**
+ * A reference to the {@link android.provider.ContactsContract.Contacts#_ID}
+ * that this stream item belongs to.
+ *
+ * <p>Type: INTEGER</p>
+ * <p>read-only</p>
+ */
+ public static final String CONTACT_ID = "contact_id";
+
+ /**
+ * A reference to the {@link android.provider.ContactsContract.Contacts#LOOKUP_KEY}
+ * that this stream item belongs to.
+ *
+ * <p>Type: TEXT</p>
+ * <p>read-only</p>
+ */
+ public static final String CONTACT_LOOKUP_KEY = "contact_lookup";
+
+ /**
* A reference to the {@link RawContacts#_ID}
* that this stream item belongs to.
+ * <p>Type: INTEGER</p>
*/
public static final String RAW_CONTACT_ID = "raw_contact_id";
@@ -3076,7 +3117,7 @@ public final class ContactsContract {
* The account type to which the raw_contact of this item is associated. See
* {@link RawContacts#ACCOUNT_TYPE}
*
- * <p>TYPE: text</p>
+ * <p>Type: TEXT</p>
* <p>read-only</p>
*/
public static final String ACCOUNT_TYPE = "account_type";
@@ -3085,7 +3126,7 @@ public final class ContactsContract {
* The account name to which the raw_contact of this item is associated. See
* {@link RawContacts#ACCOUNT_NAME}
*
- * <p>TYPE: text</p>
+ * <p>Type: TEXT</p>
* <p>read-only</p>
*/
public static final String ACCOUNT_NAME = "account_name";
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 15c57e6..efdb79e 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -38,6 +38,7 @@ import android.os.BatteryManager;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemProperties;
+import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import android.util.AndroidException;
import android.util.Log;
@@ -1062,7 +1063,7 @@ public final class Settings {
public static void clearConfiguration(Configuration inoutConfig) {
inoutConfig.fontScale = 0;
}
-
+
/**
* Convenience function to write a batch of configuration-related
* settings from a {@link Configuration} object.
@@ -1737,6 +1738,14 @@ public final class Settings {
public static final String POINTER_LOCATION = "pointer_location";
/**
+ * Show touch positions on screen?
+ * 0 = no
+ * 1 = yes
+ * @hide
+ */
+ public static final String SHOW_TOUCHES = "show_touches";
+
+ /**
* Log raw orientation data from {@link WindowOrientationListener} for use with the
* orientationplot.py tool.
* 0 = no
@@ -2781,7 +2790,11 @@ public final class Settings {
* of the application settings.
* 1 = override application settings,
* 0 = use application settings (if specified).
+ *
+ * @deprecated The value of this setting is no longer respected by
+ * the framework text to speech APIs as of the Ice Cream Sandwich release.
*/
+ @Deprecated
public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
/**
@@ -2801,24 +2814,46 @@ public final class Settings {
/**
* Default text-to-speech language.
+ *
+ * @deprecated this setting is no longer in use, as of the Ice Cream
+ * Sandwich release. Apps should never need to read this setting directly,
+ * instead can query the TextToSpeech framework classes for the default
+ * locale. {@link TextToSpeech#getLanguage()}.
*/
+ @Deprecated
public static final String TTS_DEFAULT_LANG = "tts_default_lang";
/**
* Default text-to-speech country.
+ *
+ * @deprecated this setting is no longer in use, as of the Ice Cream
+ * Sandwich release. Apps should never need to read this setting directly,
+ * instead can query the TextToSpeech framework classes for the default
+ * locale. {@link TextToSpeech#getLanguage()}.
*/
+ @Deprecated
public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
/**
* Default text-to-speech locale variant.
+ *
+ * @deprecated this setting is no longer in use, as of the Ice Cream
+ * Sandwich release. Apps should never need to read this setting directly,
+ * instead can query the TextToSpeech framework classes for the
+ * locale that is in use {@link TextToSpeech#getLanguage()}.
*/
+ @Deprecated
public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
/**
* Stores the default tts locales on a per engine basis. Stored as
* a comma seperated list of values, each value being of the form
* {@code engine_name:locale} for example,
- * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}.
+ * {@code com.foo.ttsengine:eng-USA,com.bar.ttsengine:esp-ESP}. This
+ * supersedes {@link #TTS_DEFAULT_LANG}, {@link #TTS_DEFAULT_COUNTRY} and
+ * {@link #TTS_DEFAULT_VARIANT}. Apps should never need to read this
+ * setting directly, and can query the TextToSpeech framework classes
+ * for the locale that is in use.
*
* @hide
*/
@@ -3785,6 +3820,13 @@ public final class Settings {
"selected_spell_checker_subtype";
/**
+ * The {@link ComponentName} string whether spell checker is enabled or not.
+ *
+ * @hide
+ */
+ public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
+
+ /**
* What happens when the user presses the Power button while in-call
* and the screen is on.<br/>
* <b>Values:</b><br/>
@@ -4007,6 +4049,7 @@ public final class Settings {
TTS_DEFAULT_LANG,
TTS_DEFAULT_COUNTRY,
TTS_ENABLED_PLUGINS,
+ TTS_DEFAULT_LOCALE,
WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
WIFI_NUM_OPEN_NETWORKS_KEPT,
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index e942969..55a0624 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -117,6 +117,7 @@ public class BluetoothService extends IBluetooth.Stub {
private static final int MESSAGE_UUID_INTENT = 1;
private static final int MESSAGE_AUTO_PAIRING_FAILURE_ATTEMPT_DELAY = 2;
+ private static final int MESSAGE_REMOVE_SERVICE_RECORD = 3;
private static final int RFCOMM_RECORD_REAPER = 10;
private static final int STATE_CHANGE_REAPER = 11;
@@ -537,6 +538,10 @@ public class BluetoothService extends IBluetooth.Stub {
}
if (attempt > 0) mBondState.clearPinAttempts(address);
break;
+ case MESSAGE_REMOVE_SERVICE_RECORD:
+ Pair<Integer, Integer> pair = (Pair<Integer, Integer>) msg.obj;
+ checkAndRemoveRecord(pair.first, pair.second);
+ break;
}
}
};
@@ -1542,7 +1547,9 @@ public class BluetoothService extends IBluetooth.Stub {
public void removeServiceRecord(int handle) {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM,
"Need BLUETOOTH permission");
- checkAndRemoveRecord(handle, Binder.getCallingPid());
+ Message message = mHandler.obtainMessage(MESSAGE_REMOVE_SERVICE_RECORD);
+ message.obj = new Pair<Integer, Integer>(handle, Binder.getCallingPid());
+ mHandler.sendMessage(message);
}
private synchronized void checkAndRemoveRecord(int handle, int pid) {
diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java
index 07e71f9..85a3bbb 100644
--- a/core/java/android/text/Html.java
+++ b/core/java/android/text/Html.java
@@ -449,11 +449,11 @@ class HtmlToSpannedConverter implements ContentHandler {
handleP(mSpannableStringBuilder);
} else if (tag.equalsIgnoreCase("div")) {
handleP(mSpannableStringBuilder);
- } else if (tag.equalsIgnoreCase("em")) {
+ } else if (tag.equalsIgnoreCase("strong")) {
start(mSpannableStringBuilder, new Bold());
} else if (tag.equalsIgnoreCase("b")) {
start(mSpannableStringBuilder, new Bold());
- } else if (tag.equalsIgnoreCase("strong")) {
+ } else if (tag.equalsIgnoreCase("em")) {
start(mSpannableStringBuilder, new Italic());
} else if (tag.equalsIgnoreCase("cite")) {
start(mSpannableStringBuilder, new Italic());
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 6bde802..5fed775 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -16,21 +16,18 @@
package android.text;
-import com.android.internal.util.ArrayUtils;
-
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.text.style.SuggestionSpan;
+
+import com.android.internal.util.ArrayUtils;
import java.lang.reflect.Array;
/**
* This is the class for text whose content and markup can both be changed.
*/
-public class SpannableStringBuilder
-implements CharSequence, GetChars, Spannable, Editable, Appendable,
- GraphicsOperations
-{
+public class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
+ Appendable, GraphicsOperations {
/**
* Create a new SpannableStringBuilder with empty contents
*/
@@ -111,8 +108,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
if (where < 0) {
throw new IndexOutOfBoundsException("charAt: " + where + " < 0");
} else if (where >= len) {
- throw new IndexOutOfBoundsException("charAt: " + where +
- " >= length " + len);
+ throw new IndexOutOfBoundsException("charAt: " + where + " >= length " + len);
}
if (where >= mGapStart)
@@ -266,8 +262,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
return append(String.valueOf(text));
}
- private int change(int start, int end,
- CharSequence tb, int tbstart, int tbend) {
+ private int change(int start, int end, CharSequence tb, int tbstart, int tbend) {
return change(true, start, end, tb, tbstart, tbend);
}
@@ -277,8 +272,9 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
int ret = tbend - tbstart;
TextWatcher[] recipients = null;
- if (notify)
+ if (notify) {
recipients = sendTextWillChange(start, end - start, tbend - tbstart);
+ }
for (int i = mSpanCount - 1; i >= 0; i--) {
if ((mSpanFlags[i] & SPAN_PARAGRAPH) == SPAN_PARAGRAPH) {
@@ -353,7 +349,6 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
// no need for span fixup on pure insertion
if (tbend > tbstart && end - start == 0) {
if (notify) {
- removeSuggestionSpans(start, end);
sendTextChange(recipients, start, end - start, tbend - tbstart);
sendTextHasChanged(recipients);
}
@@ -388,7 +383,6 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
if (mSpanEnds[i] < mSpanStarts[i]) {
removeSpan(i);
}
- removeSuggestionSpans(start, end);
}
if (notify) {
@@ -399,30 +393,26 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
return ret;
}
- /**
- * Removes the SuggestionSpan that overlap the [start, end] range, and that would
- * not make sense anymore after the change.
- */
- private void removeSuggestionSpans(int start, int end) {
- for (int i = mSpanCount - 1; i >= 0; i--) {
- final int spanEnd = mSpanEnds[i];
- final int spanSpart = mSpanStarts[i];
- if ((mSpans[i] instanceof SuggestionSpan) && (
- (spanSpart < start && spanEnd > start) ||
- (spanSpart < end && spanEnd > end))) {
- removeSpan(i);
- }
- }
- }
-
private void removeSpan(int i) {
- // XXX send notification on removal
- System.arraycopy(mSpans, i + 1, mSpans, i, mSpanCount - (i + 1));
- System.arraycopy(mSpanStarts, i + 1, mSpanStarts, i, mSpanCount - (i + 1));
- System.arraycopy(mSpanEnds, i + 1, mSpanEnds, i, mSpanCount - (i + 1));
- System.arraycopy(mSpanFlags, i + 1, mSpanFlags, i, mSpanCount - (i + 1));
+ Object object = mSpans[i];
+
+ int start = mSpanStarts[i];
+ int end = mSpanEnds[i];
+
+ if (start > mGapStart) start -= mGapLength;
+ if (end > mGapStart) end -= mGapLength;
+
+ int count = mSpanCount - (i + 1);
+ System.arraycopy(mSpans, i + 1, mSpans, i, count);
+ System.arraycopy(mSpanStarts, i + 1, mSpanStarts, i, count);
+ System.arraycopy(mSpanEnds, i + 1, mSpanEnds, i, count);
+ System.arraycopy(mSpanFlags, i + 1, mSpanFlags, i, count);
mSpanCount--;
+
+ mSpans[mSpanCount] = null;
+
+ sendSpanRemoved(object, start, end);
}
// Documentation from interface
@@ -462,11 +452,10 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
moveGapTo(end);
TextWatcher[] recipients;
- recipients = sendTextWillChange(start, end - start,
- tbend - tbstart);
-
int origlen = end - start;
+ recipients = sendTextWillChange(start, origlen, tbend - tbstart);
+
if (mGapLength < 2)
resizeFor(length() + 1);
@@ -486,11 +475,9 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
new Exception("mGapLength < 1").printStackTrace();
}
- int oldlen = (end + 1) - start;
-
int inserted = change(false, start + 1, start + 1, tb, tbstart, tbend);
change(false, start, start + 1, "", 0, 0);
- change(false, start + inserted, start + inserted + oldlen - 1, "", 0, 0);
+ change(false, start + inserted, start + inserted + origlen, "", 0, 0);
/*
* Special case to keep the cursor in the same position
@@ -515,13 +502,12 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
off = off * inserted / (end - start);
selend = (int) off + start;
- setSpan(false, Selection.SELECTION_END, selend, selend,
- Spanned.SPAN_POINT_POINT);
+ setSpan(false, Selection.SELECTION_END, selend, selend, Spanned.SPAN_POINT_POINT);
}
-
sendTextChange(recipients, start, origlen, inserted);
sendTextHasChanged(recipients);
}
+
return this;
}
@@ -534,8 +520,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
setSpan(true, what, start, end, flags);
}
- private void setSpan(boolean send,
- Object what, int start, int end, int flags) {
+ private void setSpan(boolean send, Object what, int start, int end, int flags) {
int nstart = start;
int nend = end;
@@ -546,8 +531,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
char c = charAt(start - 1);
if (c != '\n')
- throw new RuntimeException(
- "PARAGRAPH span must start at paragraph boundary");
+ throw new RuntimeException("PARAGRAPH span must start at paragraph boundary");
}
}
@@ -556,23 +540,22 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
char c = charAt(end - 1);
if (c != '\n')
- throw new RuntimeException(
- "PARAGRAPH span must end at paragraph boundary");
+ throw new RuntimeException("PARAGRAPH span must end at paragraph boundary");
}
}
- if (start > mGapStart)
+ if (start > mGapStart) {
start += mGapLength;
- else if (start == mGapStart) {
+ } else if (start == mGapStart) {
int flag = (flags & START_MASK) >> START_SHIFT;
if (flag == POINT || (flag == PARAGRAPH && start == length()))
start += mGapLength;
}
- if (end > mGapStart)
+ if (end > mGapStart) {
end += mGapLength;
- else if (end == mGapStart) {
+ } else if (end == mGapStart) {
int flag = (flags & END_MASK);
if (flag == POINT || (flag == PARAGRAPH && end == length()))
@@ -637,25 +620,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
public void removeSpan(Object what) {
for (int i = mSpanCount - 1; i >= 0; i--) {
if (mSpans[i] == what) {
- int ostart = mSpanStarts[i];
- int oend = mSpanEnds[i];
-
- if (ostart > mGapStart)
- ostart -= mGapLength;
- if (oend > mGapStart)
- oend -= mGapLength;
-
- int count = mSpanCount - (i + 1);
-
- System.arraycopy(mSpans, i + 1, mSpans, i, count);
- System.arraycopy(mSpanStarts, i + 1, mSpanStarts, i, count);
- System.arraycopy(mSpanEnds, i + 1, mSpanEnds, i, count);
- System.arraycopy(mSpanFlags, i + 1, mSpanFlags, i, count);
-
- mSpanCount--;
- mSpans[mSpanCount] = null;
-
- sendSpanRemoved(what, ostart, oend);
+ removeSpan(i);
return;
}
}
@@ -729,6 +694,8 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
*/
@SuppressWarnings("unchecked")
public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) {
+ if (kind == null) return ArrayUtils.emptyArray(kind);
+
int spanCount = mSpanCount;
Object[] spans = mSpans;
int[] starts = mSpanStarts;
@@ -742,6 +709,8 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
T ret1 = null;
for (int i = 0; i < spanCount; i++) {
+ if (!kind.isInstance(spans[i])) continue;
+
int spanStart = starts[i];
int spanEnd = ends[i];
@@ -766,10 +735,6 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
continue;
}
- if (kind != null && !kind.isInstance(spans[i])) {
- continue;
- }
-
if (count == 0) {
// Safe conversion thanks to the isInstance test above
ret1 = (T) spans[i];
@@ -909,8 +874,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
return recip;
}
- private void sendTextChange(TextWatcher[] recip, int start, int before,
- int after) {
+ private void sendTextChange(TextWatcher[] recip, int start, int before, int after) {
int n = recip.length;
for (int i = 0; i < n; i++) {
@@ -945,8 +909,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
}
private void sendSpanChanged(Object what, int s, int e, int st, int en) {
- SpanWatcher[] recip = getSpans(Math.min(s, st), Math.max(e, en),
- SpanWatcher.class);
+ SpanWatcher[] recip = getSpans(Math.min(s, st), Math.max(e, en), SpanWatcher.class);
int n = recip.length;
for (int i = 0; i < n; i++) {
diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java
index 6debc6b..18b4040 100644
--- a/core/java/android/text/TextDirectionHeuristics.java
+++ b/core/java/android/text/TextDirectionHeuristics.java
@@ -17,6 +17,10 @@
package android.text;
+import java.util.Locale;
+
+import android.util.LocaleUtil;
+
/**
* Some objects that implement TextDirectionHeuristic.
* @hide
@@ -75,6 +79,11 @@ public class TextDirectionHeuristics {
public static final TextDirectionHeuristic CHARCOUNT_RTL =
new TextDirectionHeuristicInternal(CharCount.INSTANCE_DEFAULT, true);
+ /**
+ * Force the paragraph direction to the Locale direction. Falls back to left to right.
+ */
+ public static final TextDirectionHeuristic LOCALE = TextDirectionHeuristicLocale.INSTANCE;
+
private static enum TriState {
TRUE, FALSE, UNKNOWN;
}
@@ -300,4 +309,23 @@ public class TextDirectionHeuristics {
public static final float DEFAULT_THRESHOLD = 0.6f;
public static final CharCount INSTANCE_DEFAULT = new CharCount(DEFAULT_THRESHOLD);
}
+
+ /**
+ * Algorithm that uses the Locale direction to force the direction of a paragraph.
+ */
+ public static class TextDirectionHeuristicLocale extends TextDirectionHeuristicImpl {
+
+ public TextDirectionHeuristicLocale() {
+ super(null);
+ }
+
+ @Override
+ protected boolean defaultIsRtl() {
+ final int dir = LocaleUtil.getLayoutDirectionFromLocale(java.util.Locale.getDefault());
+ return (dir == LocaleUtil.TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE);
+ }
+
+ public static final TextDirectionHeuristicLocale INSTANCE =
+ new TextDirectionHeuristicLocale();
+ }
}
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 83ef6ce..b8b54f4 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -31,9 +31,11 @@ import android.text.style.QuoteSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ReplacementSpan;
import android.text.style.ScaleXSpan;
+import android.text.style.SpellCheckSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
+import android.text.style.SuggestionRangeSpan;
import android.text.style.SuggestionSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
@@ -579,6 +581,10 @@ public class TextUtils {
public static final int ANNOTATION = 18;
/** @hide */
public static final int SUGGESTION_SPAN = 19;
+ /** @hide */
+ public static final int SPELL_CHECK_SPAN = 20;
+ /** @hide */
+ public static final int SUGGESTION_RANGE_SPAN = 21;
/**
* Flatten a CharSequence and whatever styles can be copied across processes
@@ -734,6 +740,14 @@ public class TextUtils {
readSpan(p, sp, new SuggestionSpan(p));
break;
+ case SPELL_CHECK_SPAN:
+ readSpan(p, sp, new SpellCheckSpan(p));
+ break;
+
+ case SUGGESTION_RANGE_SPAN:
+ readSpan(p, sp, new SuggestionRangeSpan());
+ break;
+
default:
throw new RuntimeException("bogus span encoding " + kind);
}
diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java
index af524ee..0433ec4 100644
--- a/core/java/android/text/method/WordIterator.java
+++ b/core/java/android/text/method/WordIterator.java
@@ -73,6 +73,10 @@ public class WordIterator implements Selection.PositionIterator {
}
};
+ public void forceUpdate() {
+ mCurrentDirty = true;
+ }
+
public void setCharSequence(CharSequence incoming) {
// When incoming is different object, move listeners to new sequence
// and mark as dirty so we reload contents.
diff --git a/core/java/android/text/style/SpellCheckSpan.java b/core/java/android/text/style/SpellCheckSpan.java
new file mode 100644
index 0000000..caaae99
--- /dev/null
+++ b/core/java/android/text/style/SpellCheckSpan.java
@@ -0,0 +1,64 @@
+/*
+ * 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 android.text.style;
+
+import android.os.Parcel;
+import android.text.ParcelableSpan;
+import android.text.TextUtils;
+
+/**
+ * A SpellCheckSpan is an internal data structure created by the TextView's SpellChecker to
+ * annotate portions of the text that are about to or currently being spell checked. They are
+ * automatically removed once the spell check is completed.
+ *
+ * @hide
+ */
+public class SpellCheckSpan implements ParcelableSpan {
+
+ private boolean mSpellCheckInProgress;
+
+ public SpellCheckSpan() {
+ mSpellCheckInProgress = false;
+ }
+
+ public SpellCheckSpan(Parcel src) {
+ mSpellCheckInProgress = (src.readInt() != 0);
+ }
+
+ public void setSpellCheckInProgress() {
+ mSpellCheckInProgress = true;
+ }
+
+ public boolean isSpellCheckInProgress() {
+ return mSpellCheckInProgress;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mSpellCheckInProgress ? 1 : 0);
+ }
+
+ @Override
+ public int getSpanTypeId() {
+ return TextUtils.SPELL_CHECK_SPAN;
+ }
+}
diff --git a/core/java/android/text/style/SuggestionRangeSpan.java b/core/java/android/text/style/SuggestionRangeSpan.java
new file mode 100644
index 0000000..fc91697
--- /dev/null
+++ b/core/java/android/text/style/SuggestionRangeSpan.java
@@ -0,0 +1,51 @@
+/*
+ * 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 android.text.style;
+
+import android.graphics.Color;
+import android.os.Parcel;
+import android.text.ParcelableSpan;
+import android.text.TextPaint;
+import android.text.TextUtils;
+
+/**
+ * A SuggestionRangeSpan is used to show which part of an EditText is affected by a suggestion
+ * popup window.
+ *
+ * @hide
+ */
+public class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpan {
+ @Override
+ public void updateDrawState(TextPaint tp) {
+ tp.setColor(Color.GREEN);
+ }
+
+ public SuggestionRangeSpan() { /* Nothing to do*/ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) { /* Nothing to do*/ }
+
+ @Override
+ public int getSpanTypeId() {
+ return TextUtils.SUGGESTION_RANGE_SPAN;
+ }
+}
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index fb94bc7..ea57f917 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -40,7 +40,7 @@ import java.util.Locale;
* These spans should typically be created by the input method to provide correction and alternates
* for the text.
*
- * @see TextView#setSuggestionsEnabled(boolean)
+ * @see TextView#isSuggestionsEnabled()
*/
public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
@@ -76,7 +76,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
* And the current IME might want to specify any IME as the target IME including other IMEs.
*/
- private final int mFlags;
+ private int mFlags;
private final String[] mSuggestions;
private final String mLocaleString;
private final String mNotificationTargetClassName;
@@ -134,8 +134,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
} else {
mNotificationTargetClassName = "";
}
- mHashCode = hashCodeInternal(
- mFlags, mSuggestions, mLocaleString, mNotificationTargetClassName);
+ mHashCode = hashCodeInternal(mSuggestions, mLocaleString, mNotificationTargetClassName);
initStyle(context);
}
@@ -211,6 +210,10 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
return mFlags;
}
+ public void setFlags(int flags) {
+ mFlags = flags;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -247,10 +250,10 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
return mHashCode;
}
- private static int hashCodeInternal(int flags, String[] suggestions,String locale,
+ private static int hashCodeInternal(String[] suggestions, String locale,
String notificationTargetClassName) {
- return Arrays.hashCode(new Object[] {SystemClock.uptimeMillis(), flags, suggestions, locale,
- notificationTargetClassName});
+ return Arrays.hashCode(new Object[] {Long.valueOf(SystemClock.uptimeMillis()), suggestions,
+ locale, notificationTargetClassName});
}
public static final Parcelable.Creator<SuggestionSpan> CREATOR =
diff --git a/core/java/android/util/LocaleUtil.java b/core/java/android/util/LocaleUtil.java
index 74a930f..763af73 100644
--- a/core/java/android/util/LocaleUtil.java
+++ b/core/java/android/util/LocaleUtil.java
@@ -32,11 +32,6 @@ public class LocaleUtil {
/**
* @hide Do not use. Implementation not finished.
*/
- public static final int TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE = -1;
-
- /**
- * @hide Do not use. Implementation not finished.
- */
public static final int TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE = 0;
/**
@@ -54,7 +49,6 @@ public class LocaleUtil {
*
* @param locale the Locale for which we want the layout direction. Can be null.
* @return the layout direction. This may be one of:
- * {@link #TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE} or
* {@link #TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE} or
* {@link #TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE}.
*
@@ -63,17 +57,16 @@ public class LocaleUtil {
* @hide
*/
public static int getLayoutDirectionFromLocale(Locale locale) {
- if (locale == null || locale.equals(Locale.ROOT)) {
- return TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE;
- }
-
- final String scriptSubtag = ICU.getScript(ICU.addLikelySubtags(locale.toString()));
- if (scriptSubtag == null) return getLayoutDirectionFromFirstChar(locale);
+ if (locale != null && !locale.equals(Locale.ROOT)) {
+ final String scriptSubtag = ICU.getScript(ICU.addLikelySubtags(locale.toString()));
+ if (scriptSubtag == null) return getLayoutDirectionFromFirstChar(locale);
- if (scriptSubtag.equalsIgnoreCase(ARAB_SCRIPT_SUBTAG) ||
- scriptSubtag.equalsIgnoreCase(HEBR_SCRIPT_SUBTAG)) {
- return TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE;
+ if (scriptSubtag.equalsIgnoreCase(ARAB_SCRIPT_SUBTAG) ||
+ scriptSubtag.equalsIgnoreCase(HEBR_SCRIPT_SUBTAG)) {
+ return TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE;
+ }
}
+
return TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE;
}
@@ -84,7 +77,6 @@ public class LocaleUtil {
*
* @param locale
* @return the layout direction. This may be one of:
- * {@link #TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE} or
* {@link #TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE} or
* {@link #TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE}.
*
@@ -94,13 +86,13 @@ public class LocaleUtil {
*/
private static int getLayoutDirectionFromFirstChar(Locale locale) {
switch(Character.getDirectionality(locale.getDisplayName(locale).charAt(0))) {
- case Character.DIRECTIONALITY_LEFT_TO_RIGHT:
- return TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE;
case Character.DIRECTIONALITY_RIGHT_TO_LEFT:
case Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC:
return TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE;
+
+ case Character.DIRECTIONALITY_LEFT_TO_RIGHT:
default:
- return TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE;
+ return TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE;
}
}
}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index cfbb47c..c934c7b 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -541,9 +541,19 @@ class GLES20Canvas extends HardwareCanvas {
@Override
public int saveLayer(RectF bounds, Paint paint, int saveFlags) {
- return saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags);
+ if (bounds != null) {
+ return saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags);
+ }
+
+ int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
+ final int nativePaint = paint == null ? 0 : paint.mNativePaint;
+ int count = nSaveLayer(mRenderer, nativePaint, saveFlags);
+ if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
+ return count;
}
+ private static native int nSaveLayer(int renderer, int paint, int saveFlags);
+
@Override
public int saveLayer(float left, float top, float right, float bottom, Paint paint,
int saveFlags) {
@@ -562,10 +572,15 @@ class GLES20Canvas extends HardwareCanvas {
@Override
public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags) {
- return saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom,
- alpha, saveFlags);
+ if (bounds != null) {
+ return saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom,
+ alpha, saveFlags);
+ }
+ return nSaveLayerAlpha(mRenderer, alpha, saveFlags);
}
+ private static native int nSaveLayerAlpha(int renderer, int alpha, int saveFlags);
+
@Override
public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
int saveFlags) {
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index a05637d..2bf16d8 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -21,6 +21,7 @@ import android.content.ComponentCallbacks2;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
+import android.opengl.GLUtils;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.util.Log;
@@ -402,51 +403,6 @@ public abstract class HardwareRenderer {
}
/**
- * Return a string for the EGL error code, or the hex representation
- * if the error is unknown.
- *
- * @param error The EGL error to convert into a String.
- *
- * @return An error string correponding to the EGL error code.
- */
- static String getEGLErrorString(int error) {
- switch (error) {
- case EGL_SUCCESS:
- return "EGL_SUCCESS";
- case EGL_NOT_INITIALIZED:
- return "EGL_NOT_INITIALIZED";
- case EGL_BAD_ACCESS:
- return "EGL_BAD_ACCESS";
- case EGL_BAD_ALLOC:
- return "EGL_BAD_ALLOC";
- case EGL_BAD_ATTRIBUTE:
- return "EGL_BAD_ATTRIBUTE";
- case EGL_BAD_CONFIG:
- return "EGL_BAD_CONFIG";
- case EGL_BAD_CONTEXT:
- return "EGL_BAD_CONTEXT";
- case EGL_BAD_CURRENT_SURFACE:
- return "EGL_BAD_CURRENT_SURFACE";
- case EGL_BAD_DISPLAY:
- return "EGL_BAD_DISPLAY";
- case EGL_BAD_MATCH:
- return "EGL_BAD_MATCH";
- case EGL_BAD_NATIVE_PIXMAP:
- return "EGL_BAD_NATIVE_PIXMAP";
- case EGL_BAD_NATIVE_WINDOW:
- return "EGL_BAD_NATIVE_WINDOW";
- case EGL_BAD_PARAMETER:
- return "EGL_BAD_PARAMETER";
- case EGL_BAD_SURFACE:
- return "EGL_BAD_SURFACE";
- case EGL11.EGL_CONTEXT_LOST:
- return "EGL_CONTEXT_LOST";
- default:
- return "0x" + Integer.toHexString(error);
- }
- }
-
- /**
* Checks for OpenGL errors. If an error has occured, {@link #destroy(boolean)}
* is invoked and the requested flag is turned off. The error code is
* also logged as a warning.
@@ -457,8 +413,8 @@ public abstract class HardwareRenderer {
if (error != EGL_SUCCESS) {
// something bad has happened revert to
// normal rendering.
+ Log.w(LOG_TAG, "EGL error: " + GLUtils.getEGLErrorString(error));
fallback(error != EGL11.EGL_CONTEXT_LOST);
- Log.w(LOG_TAG, "EGL error: " + getEGLErrorString(error));
}
}
}
@@ -523,14 +479,14 @@ public abstract class HardwareRenderer {
if (sEglDisplay == EGL_NO_DISPLAY) {
throw new RuntimeException("eglGetDisplay failed "
- + getEGLErrorString(sEgl.eglGetError()));
+ + GLUtils.getEGLErrorString(sEgl.eglGetError()));
}
// We can now initialize EGL for that display
int[] version = new int[2];
if (!sEgl.eglInitialize(sEglDisplay, version)) {
throw new RuntimeException("eglInitialize failed " +
- getEGLErrorString(sEgl.eglGetError()));
+ GLUtils.getEGLErrorString(sEgl.eglGetError()));
}
sEglConfig = chooseEglConfig();
@@ -579,7 +535,7 @@ public abstract class HardwareRenderer {
if (!sEgl.eglChooseConfig(sEglDisplay, configSpec, configs, 1, configsCount)) {
throw new IllegalArgumentException("eglChooseConfig failed " +
- getEGLErrorString(sEgl.eglGetError()));
+ GLUtils.getEGLErrorString(sEgl.eglGetError()));
} else if (configsCount[0] > 0) {
if ("choice".equalsIgnoreCase(debug)) {
printConfig(configs[0]);
@@ -647,7 +603,7 @@ public abstract class HardwareRenderer {
*/
if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
throw new Surface.OutOfResourcesException("eglMakeCurrent failed "
- + getEGLErrorString(sEgl.eglGetError()));
+ + GLUtils.getEGLErrorString(sEgl.eglGetError()));
}
// If mDirtyRegions is set, this means we have an EGL configuration
@@ -734,7 +690,7 @@ public abstract class HardwareRenderer {
return false;
}
throw new RuntimeException("createWindowSurface failed "
- + getEGLErrorString(error));
+ + GLUtils.getEGLErrorString(error));
}
return true;
}
@@ -746,8 +702,9 @@ public abstract class HardwareRenderer {
@Override
void setup(int width, int height) {
- checkCurrent();
- mCanvas.setViewport(width, height);
+ if (validate()) {
+ mCanvas.setViewport(width, height);
+ }
}
boolean canDraw() {
@@ -854,9 +811,9 @@ public abstract class HardwareRenderer {
if (!mEglContext.equals(sEgl.eglGetCurrentContext()) ||
!mEglSurface.equals(sEgl.eglGetCurrentSurface(EGL_DRAW))) {
if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
- fallback(true);
Log.e(LOG_TAG, "eglMakeCurrent failed " +
- getEGLErrorString(sEgl.eglGetError()));
+ GLUtils.getEGLErrorString(sEgl.eglGetError()));
+ fallback(true);
return SURFACE_STATE_ERROR;
} else {
return SURFACE_STATE_UPDATED;
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 5e7e509..ef3d3fa 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -36,6 +36,20 @@ public class Surface implements Parcelable {
public static final int ROTATION_270 = 3;
/**
+ * Create Surface from a SurfaceTexture.
+ *
+ * @param surfaceTexture The {@link SurfaceTexture} that is updated by this Surface.
+ * @hide
+ */
+ public Surface(SurfaceTexture surfaceTexture) {
+ if (DEBUG_RELEASE) {
+ mCreationStack = new Exception();
+ }
+ mCanvas = new CompatibleCanvas();
+ initFromSurfaceTexture(surfaceTexture);
+ }
+
+ /**
* Does this object hold a valid surface? Returns true if it holds
* a physical surface, so lockCanvas() will succeed. Otherwise
* returns false.
@@ -222,20 +236,6 @@ public class Surface implements Parcelable {
native private static void nativeClassInit();
static { nativeClassInit(); }
- /**
- * Create Surface from a SurfaceTexture.
- *
- * @param surfaceTexture The {@link SurfaceTexture} that is updated by this Surface.
- * @hide
- */
- public Surface(SurfaceTexture surfaceTexture) {
- if (DEBUG_RELEASE) {
- mCreationStack = new Exception();
- }
- mCanvas = new CompatibleCanvas();
- initFromSurfaceTexture(surfaceTexture);
- }
-
/** create a surface @hide */
public Surface(SurfaceSession s,
int pid, int display, int w, int h, int format, int flags)
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 17e637c..14677e1 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -6433,10 +6433,12 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
if ((flags & VISIBILITY_MASK) == VISIBLE) {
if ((changed & VISIBILITY_MASK) != 0) {
/*
- * If this view is becoming visible, set the DRAWN flag so that
- * the next invalidate() will not be skipped.
+ * If this view is becoming visible, invalidate it in case it changed while
+ * it was not visible. Marking it drawn ensures that the invalidation will
+ * go through.
*/
mPrivateFlags |= DRAWN;
+ invalidate(true);
needGlobalAttributesUpdate(true);
@@ -6454,11 +6456,17 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
if ((changed & GONE) != 0) {
needGlobalAttributesUpdate(false);
requestLayout();
- invalidate(true);
if (((mViewFlags & VISIBILITY_MASK) == GONE)) {
if (hasFocus()) clearFocus();
destroyDrawingCache();
+ if (mParent instanceof View) {
+ // GONE views noop invalidation, so invalidate the parent
+ ((View) mParent).invalidate(true);
+ }
+ // Mark the view drawn to ensure that it gets invalidated properly the next
+ // time it is visible and gets invalidated
+ mPrivateFlags |= DRAWN;
}
if (mAttachInfo != null) {
mAttachInfo.mViewVisibilityChanged = true;
@@ -6489,6 +6497,8 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
if (mParent instanceof ViewGroup) {
((ViewGroup) mParent).onChildVisibilityChanged(this, (flags & VISIBILITY_MASK));
((View) mParent).invalidate(true);
+ } else if (mParent != null) {
+ mParent.invalidateChild(this, null);
}
dispatchVisibilityChanged(this, (flags & VISIBILITY_MASK));
}
@@ -8074,6 +8084,15 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
}
/**
+ * Do not invalidate views which are not visible and which are not running an animation. They
+ * will not get drawn and they should not set dirty flags as if they will be drawn
+ */
+ private boolean skipInvalidate() {
+ return (mViewFlags & VISIBILITY_MASK) != VISIBLE && mCurrentAnimation == null &&
+ (!(mParent instanceof ViewGroup) ||
+ !((ViewGroup) mParent).isViewTransitioning(this));
+ }
+ /**
* Mark the the area defined by dirty as needing to be drawn. If the view is
* visible, {@link #onDraw(android.graphics.Canvas)} will be called at some point
* in the future. This must be called from a UI thread. To call from a non-UI
@@ -8087,9 +8106,7 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
}
- if ((mViewFlags & VISIBILITY_MASK) != VISIBLE && mCurrentAnimation == null) {
- // Noop for views which are not visible and which are not running an animation. They
- // will not get drawn and they should not set dirty flags as if they will be drawn
+ if (skipInvalidate()) {
return;
}
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
@@ -8135,9 +8152,7 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
}
- if ((mViewFlags & VISIBILITY_MASK) != VISIBLE && mCurrentAnimation == null) {
- // Noop for views which are not visible and which are not running an animation. They
- // will not get drawn and they should not set dirty flags as if they will be drawn
+ if (skipInvalidate()) {
return;
}
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
@@ -8192,9 +8207,7 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
}
- if ((mViewFlags & VISIBILITY_MASK) != VISIBLE && mCurrentAnimation == null) {
- // Noop for views which are not visible and which are not running an animation. They
- // will not get drawn and they should not set dirty flags as if they will be drawn
+ if (skipInvalidate()) {
return;
}
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
@@ -8232,9 +8245,7 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
* @hide
*/
public void fastInvalidate() {
- if ((mViewFlags & VISIBILITY_MASK) != VISIBLE && mCurrentAnimation == null) {
- // Noop for views which are not visible and which are not running an animation. They
- // will not get drawn and they should not set dirty flags as if they will be drawn
+ if (skipInvalidate()) {
return;
}
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
@@ -9992,8 +10003,6 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
// The dirty rect should always be null for a display list
canvas.onPreDraw(null);
- final int restoreCount = canvas.save();
-
computeScroll();
canvas.translate(-mScrollX, -mScrollY);
mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
@@ -10005,8 +10014,6 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
} else {
draw(canvas);
}
-
- canvas.restoreToCount(restoreCount);
} finally {
canvas.onPostDraw();
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 7c826ca..0e420d6 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -4749,6 +4749,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
/**
+ * Utility function called by View during invalidation to determine whether a view that
+ * is invisible or gone should still be invalidated because it is being transitioned (and
+ * therefore still needs to be drawn).
+ */
+ boolean isViewTransitioning(View view) {
+ return (mTransitioningViews != null && mTransitioningViews.contains(view));
+ }
+
+ /**
* This method tells the ViewGroup that the given View object, which should have this
* ViewGroup as its parent,
* should be kept around (re-displayed when the ViewGroup draws its children) even if it
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index f23c366..a0cc287 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -61,6 +61,7 @@ import android.util.SparseArray;
import android.util.TypedValue;
import android.view.View.MeasureSpec;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityInteractionClient;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -575,7 +576,6 @@ public final class ViewRootImpl extends Handler implements ViewParent,
if (hardwareAccelerated) {
if (!HardwareRenderer.isAvailable()) {
- mAttachInfo.mHardwareAccelerationRequested = true;
return;
}
@@ -601,6 +601,13 @@ public final class ViewRootImpl extends Handler implements ViewParent,
mAttachInfo.mHardwareRenderer = HardwareRenderer.createGlRenderer(2, translucent);
mAttachInfo.mHardwareAccelerated = mAttachInfo.mHardwareAccelerationRequested
= mAttachInfo.mHardwareRenderer != null;
+ } else {
+ // We would normally have enabled hardware acceleration, but
+ // haven't because we are in the system process. We still want
+ // what is drawn on the screen to behave as if it is accelerated,
+ // so that our preview starting windows visually match what will
+ // actually be drawn by the app.
+ mAttachInfo.mHardwareAccelerationRequested = true;
}
}
}
@@ -879,6 +886,8 @@ public final class ViewRootImpl extends Handler implements ViewParent,
host.dispatchAttachedToWindow(attachInfo, 0);
//Log.i(TAG, "Screen on initialized: " + attachInfo.mKeepScreenOn);
+ host.fitSystemWindows(mAttachInfo.mContentInsets);
+
} else {
desiredWindowWidth = frame.width();
desiredWindowHeight = frame.height();
@@ -914,85 +923,15 @@ public final class ViewRootImpl extends Handler implements ViewParent,
final Resources res = mView.getContext().getResources();
if (mFirst) {
- host.fitSystemWindows(mAttachInfo.mContentInsets);
// make sure touch mode code executes by setting cached value
// to opposite of the added touch mode.
mAttachInfo.mInTouchMode = !mAddedTouchMode;
ensureTouchModeLocally(mAddedTouchMode);
} else {
- if (!mAttachInfo.mContentInsets.equals(mPendingContentInsets)) {
- if (mWidth > 0 && mHeight > 0 &&
- mSurface != null && mSurface.isValid() &&
- !mAttachInfo.mTurnOffWindowResizeAnim &&
- mAttachInfo.mHardwareRenderer != null &&
- mAttachInfo.mHardwareRenderer.isEnabled() &&
- mAttachInfo.mHardwareRenderer.validate() &&
- lp != null && !PixelFormat.formatHasAlpha(lp.format)) {
-
- disposeResizeBuffer();
-
- boolean completed = false;
- HardwareCanvas canvas = null;
- try {
- if (mResizeBuffer == null) {
- mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
- mWidth, mHeight, false);
- } else if (mResizeBuffer.getWidth() != mWidth ||
- mResizeBuffer.getHeight() != mHeight) {
- mResizeBuffer.resize(mWidth, mHeight);
- }
- canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas);
- canvas.setViewport(mWidth, mHeight);
- canvas.onPreDraw(null);
- final int restoreCount = canvas.save();
-
- canvas.drawColor(0xff000000, PorterDuff.Mode.SRC);
-
- int yoff;
- final boolean scrolling = mScroller != null
- && mScroller.computeScrollOffset();
- if (scrolling) {
- yoff = mScroller.getCurrY();
- mScroller.abortAnimation();
- } else {
- yoff = mScrollY;
- }
-
- canvas.translate(0, -yoff);
- if (mTranslator != null) {
- mTranslator.translateCanvas(canvas);
- }
-
- mView.draw(canvas);
-
- mResizeBufferStartTime = SystemClock.uptimeMillis();
- mResizeBufferDuration = mView.getResources().getInteger(
- com.android.internal.R.integer.config_mediumAnimTime);
- completed = true;
-
- canvas.restoreToCount(restoreCount);
- } catch (OutOfMemoryError e) {
- Log.w(TAG, "Not enough memory for content change anim buffer", e);
- } finally {
- if (canvas != null) {
- canvas.onPostDraw();
- }
- if (mResizeBuffer != null) {
- mResizeBuffer.end(mAttachInfo.mHardwareCanvas);
- if (!completed) {
- mResizeBuffer.destroy();
- mResizeBuffer = null;
- }
- }
- }
- }
- mAttachInfo.mContentInsets.set(mPendingContentInsets);
- host.fitSystemWindows(mAttachInfo.mContentInsets);
+ if (!mPendingContentInsets.equals(mAttachInfo.mContentInsets)) {
insetsChanged = true;
- if (DEBUG_LAYOUT) Log.v(TAG, "Content insets changing to: "
- + mAttachInfo.mContentInsets);
}
- if (!mAttachInfo.mVisibleInsets.equals(mPendingVisibleInsets)) {
+ if (!mPendingVisibleInsets.equals(mAttachInfo.mVisibleInsets)) {
mAttachInfo.mVisibleInsets.set(mPendingVisibleInsets);
if (DEBUG_LAYOUT) Log.v(TAG, "Visible insets changing to: "
+ mAttachInfo.mVisibleInsets);
@@ -1203,6 +1142,71 @@ public final class ViewRootImpl extends Handler implements ViewParent,
visibleInsetsChanged = !mPendingVisibleInsets.equals(
mAttachInfo.mVisibleInsets);
if (contentInsetsChanged) {
+ if (mWidth > 0 && mHeight > 0 &&
+ mSurface != null && mSurface.isValid() &&
+ !mAttachInfo.mTurnOffWindowResizeAnim &&
+ mAttachInfo.mHardwareRenderer != null &&
+ mAttachInfo.mHardwareRenderer.isEnabled() &&
+ mAttachInfo.mHardwareRenderer.validate() &&
+ lp != null && !PixelFormat.formatHasAlpha(lp.format)) {
+
+ disposeResizeBuffer();
+
+ boolean completed = false;
+ HardwareCanvas canvas = null;
+ try {
+ if (mResizeBuffer == null) {
+ mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
+ mWidth, mHeight, false);
+ } else if (mResizeBuffer.getWidth() != mWidth ||
+ mResizeBuffer.getHeight() != mHeight) {
+ mResizeBuffer.resize(mWidth, mHeight);
+ }
+ canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas);
+ canvas.setViewport(mWidth, mHeight);
+ canvas.onPreDraw(null);
+ final int restoreCount = canvas.save();
+
+ canvas.drawColor(0xff000000, PorterDuff.Mode.SRC);
+
+ int yoff;
+ final boolean scrolling = mScroller != null
+ && mScroller.computeScrollOffset();
+ if (scrolling) {
+ yoff = mScroller.getCurrY();
+ mScroller.abortAnimation();
+ } else {
+ yoff = mScrollY;
+ }
+
+ canvas.translate(0, -yoff);
+ if (mTranslator != null) {
+ mTranslator.translateCanvas(canvas);
+ }
+
+ mView.draw(canvas);
+
+ mResizeBufferStartTime = SystemClock.uptimeMillis();
+ mResizeBufferDuration = mView.getResources().getInteger(
+ com.android.internal.R.integer.config_mediumAnimTime);
+ completed = true;
+
+ canvas.restoreToCount(restoreCount);
+ } catch (OutOfMemoryError e) {
+ Log.w(TAG, "Not enough memory for content change anim buffer", e);
+ } finally {
+ if (canvas != null) {
+ canvas.onPostDraw();
+ }
+ if (mResizeBuffer != null) {
+ mResizeBuffer.end(mAttachInfo.mHardwareCanvas);
+ if (!completed) {
+ mResizeBuffer.destroy();
+ mResizeBuffer = null;
+ }
+ }
+ }
+ }
mAttachInfo.mContentInsets.set(mPendingContentInsets);
host.fitSystemWindows(mAttachInfo.mContentInsets);
if (DEBUG_LAYOUT) Log.v(TAG, "Content insets changing to: "
@@ -1348,7 +1352,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
mAttachInfo.mHardwareRenderer != null &&
mAttachInfo.mHardwareRenderer.isEnabled())) {
mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
- if (!hwInitialized) {
+ if (!hwInitialized && mAttachInfo.mHardwareRenderer.isEnabled()) {
mAttachInfo.mHardwareRenderer.invalidate(mHolder);
}
}
@@ -4359,37 +4363,42 @@ public final class ViewRootImpl extends Handler implements ViewParent,
}
public void findAccessibilityNodeInfoByAccessibilityId(int accessibilityId,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid) {
if (mViewAncestor.get() != null) {
getAccessibilityInteractionController()
.findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityId,
- interactionId, callback);
+ interactionId, callback, interrogatingPid, interrogatingTid);
}
}
public void performAccessibilityAction(int accessibilityId, int action,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interogatingPid, long interrogatingTid) {
if (mViewAncestor.get() != null) {
getAccessibilityInteractionController()
.performAccessibilityActionClientThread(accessibilityId, action, interactionId,
- callback);
+ callback, interogatingPid, interrogatingTid);
}
}
public void findAccessibilityNodeInfoByViewId(int viewId,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid) {
if (mViewAncestor.get() != null) {
getAccessibilityInteractionController()
- .findAccessibilityNodeInfoByViewIdClientThread(viewId, interactionId, callback);
+ .findAccessibilityNodeInfoByViewIdClientThread(viewId, interactionId, callback,
+ interrogatingPid, interrogatingTid);
}
}
public void findAccessibilityNodeInfosByViewText(String text, int accessibilityId,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid) {
if (mViewAncestor.get() != null) {
getAccessibilityInteractionController()
.findAccessibilityNodeInfosByViewTextClientThread(text, accessibilityId,
- interactionId, callback);
+ interactionId, callback, interrogatingPid, interrogatingTid);
}
}
}
@@ -4465,13 +4474,24 @@ public final class ViewRootImpl extends Handler implements ViewParent,
}
public void findAccessibilityNodeInfoByAccessibilityIdClientThread(int accessibilityId,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid) {
Message message = Message.obtain();
message.what = DO_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID;
message.arg1 = accessibilityId;
message.arg2 = interactionId;
message.obj = callback;
- sendMessage(message);
+ // If the interrogation is performed by the same thread as the main UI
+ // thread in this process, set the message as a static reference so
+ // after this call completes the same thread but in the interrogating
+ // client can handle the message to generate the result.
+ if (interrogatingPid == Process.myPid()
+ && interrogatingTid == Looper.getMainLooper().getThread().getId()) {
+ message.setTarget(ViewRootImpl.this);
+ AccessibilityInteractionClient.getInstance().setSameThreadMessage(message);
+ } else {
+ sendMessage(message);
+ }
}
public void findAccessibilityNodeInfoByAccessibilityIdUiThread(Message message) {
@@ -4499,13 +4519,24 @@ public final class ViewRootImpl extends Handler implements ViewParent,
}
public void findAccessibilityNodeInfoByViewIdClientThread(int viewId, int interactionId,
- IAccessibilityInteractionConnectionCallback callback) {
+ IAccessibilityInteractionConnectionCallback callback, int interrogatingPid,
+ long interrogatingTid) {
Message message = Message.obtain();
message.what = DO_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID;
message.arg1 = viewId;
message.arg2 = interactionId;
message.obj = callback;
- sendMessage(message);
+ // If the interrogation is performed by the same thread as the main UI
+ // thread in this process, set the message as a static reference so
+ // after this call completes the same thread but in the interrogating
+ // client can handle the message to generate the result.
+ if (interrogatingPid == Process.myPid()
+ && interrogatingTid == Looper.getMainLooper().getThread().getId()) {
+ message.setTarget(ViewRootImpl.this);
+ AccessibilityInteractionClient.getInstance().setSameThreadMessage(message);
+ } else {
+ sendMessage(message);
+ }
}
public void findAccessibilityNodeInfoByViewIdUiThread(Message message) {
@@ -4532,7 +4563,8 @@ public final class ViewRootImpl extends Handler implements ViewParent,
public void findAccessibilityNodeInfosByViewTextClientThread(String text,
int accessibilityViewId, int interactionId,
- IAccessibilityInteractionConnectionCallback callback) {
+ IAccessibilityInteractionConnectionCallback callback, int interrogatingPid,
+ long interrogatingTid) {
Message message = Message.obtain();
message.what = DO_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_TEXT;
SomeArgs args = mPool.acquire();
@@ -4541,7 +4573,17 @@ public final class ViewRootImpl extends Handler implements ViewParent,
args.argi2 = interactionId;
args.arg2 = callback;
message.obj = args;
- sendMessage(message);
+ // If the interrogation is performed by the same thread as the main UI
+ // thread in this process, set the message as a static reference so
+ // after this call completes the same thread but in the interrogating
+ // client can handle the message to generate the result.
+ if (interrogatingPid == Process.myPid()
+ && interrogatingTid == Looper.getMainLooper().getThread().getId()) {
+ message.setTarget(ViewRootImpl.this);
+ AccessibilityInteractionClient.getInstance().setSameThreadMessage(message);
+ } else {
+ sendMessage(message);
+ }
}
public void findAccessibilityNodeInfosByViewTextUiThread(Message message) {
@@ -4594,7 +4636,8 @@ public final class ViewRootImpl extends Handler implements ViewParent,
}
public void performAccessibilityActionClientThread(int accessibilityId, int action,
- int interactionId, IAccessibilityInteractionConnectionCallback callback) {
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interogatingPid, long interrogatingTid) {
Message message = Message.obtain();
message.what = DO_PERFORM_ACCESSIBILITY_ACTION;
SomeArgs args = mPool.acquire();
@@ -4603,7 +4646,17 @@ public final class ViewRootImpl extends Handler implements ViewParent,
args.argi3 = interactionId;
args.arg1 = callback;
message.obj = args;
- sendMessage(message);
+ // If the interrogation is performed by the same thread as the main UI
+ // thread in this process, set the message as a static reference so
+ // after this call completes the same thread but in the interrogating
+ // client can handle the message to generate the result.
+ if (interogatingPid == Process.myPid()
+ && interrogatingTid == Looper.getMainLooper().getThread().getId()) {
+ message.setTarget(ViewRootImpl.this);
+ AccessibilityInteractionClient.getInstance().setSameThreadMessage(message);
+ } else {
+ sendMessage(message);
+ }
}
public void perfromAccessibilityActionUiThread(Message message) {
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
new file mode 100644
index 0000000..071701e
--- /dev/null
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -0,0 +1,462 @@
+/*
+ ** Copyright 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 android.view.accessibility;
+
+import android.accessibilityservice.IAccessibilityServiceConnection;
+import android.graphics.Rect;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.SystemClock;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * This class is a singleton that performs accessibility interaction
+ * which is it queries remote view hierarchies about snapshots of their
+ * views as well requests from these hierarchies to perform certain
+ * actions on their views.
+ *
+ * Rationale: The content retrieval APIs are synchronous from a client's
+ * perspective but internally they are asynchronous. The client thread
+ * calls into the system requesting an action and providing a callback
+ * to receive the result after which it waits up to a timeout for that
+ * result. The system enforces security and the delegates the request
+ * to a given view hierarchy where a message is posted (from a binder
+ * thread) describing what to be performed by the main UI thread the
+ * result of which it delivered via the mentioned callback. However,
+ * the blocked client thread and the main UI thread of the target view
+ * hierarchy can be the same thread, for example an accessibility service
+ * and an activity run in the same process, thus they are executed on the
+ * same main thread. In such a case the retrieval will fail since the UI
+ * thread that has to process the message describing the work to be done
+ * is blocked waiting for a result is has to compute! To avoid this scenario
+ * when making a call the client also passes its process and thread ids so
+ * the accessed view hierarchy can detect if the client making the request
+ * is running in its main UI thread. In such a case the view hierarchy,
+ * specifically the binder thread performing the IPC to it, does not post a
+ * message to be run on the UI thread but passes it to the singleton
+ * interaction client through which all interactions occur and the latter is
+ * responsible to execute the message before starting to wait for the
+ * asynchronous result delivered via the callback. In this case the expected
+ * result is already received so no waiting is performed.
+ *
+ * @hide
+ */
+public final class AccessibilityInteractionClient
+ extends IAccessibilityInteractionConnectionCallback.Stub {
+
+ private static final long TIMEOUT_INTERACTION_MILLIS = 5000;
+
+ private static final Object sStaticLock = new Object();
+
+ private static AccessibilityInteractionClient sInstance;
+
+ private final AtomicInteger mInteractionIdCounter = new AtomicInteger();
+
+ private final Object mInstanceLock = new Object();
+
+ private int mInteractionId = -1;
+
+ private AccessibilityNodeInfo mFindAccessibilityNodeInfoResult;
+
+ private List<AccessibilityNodeInfo> mFindAccessibilityNodeInfosResult;
+
+ private boolean mPerformAccessibilityActionResult;
+
+ private Message mSameThreadMessage;
+
+ private final Rect mTempBounds = new Rect();
+
+ /**
+ * @return The singleton of this class.
+ */
+ public static AccessibilityInteractionClient getInstance() {
+ synchronized (sStaticLock) {
+ if (sInstance == null) {
+ sInstance = new AccessibilityInteractionClient();
+ }
+ return sInstance;
+ }
+ }
+
+ /**
+ * Sets the message to be processed if the interacted view hierarchy
+ * and the interacting client are running in the same thread.
+ *
+ * @param message The message.
+ */
+ public void setSameThreadMessage(Message message) {
+ synchronized (mInstanceLock) {
+ mSameThreadMessage = message;
+ }
+ }
+
+ /**
+ * Finds an {@link AccessibilityNodeInfo} by accessibility id.
+ *
+ * @param connection A connection for interacting with the system.
+ * @param accessibilityWindowId A unique window id.
+ * @param accessibilityViewId A unique View accessibility id.
+ * @return An {@link AccessibilityNodeInfo} if found, null otherwise.
+ */
+ public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId(
+ IAccessibilityServiceConnection connection, int accessibilityWindowId,
+ int accessibilityViewId) {
+ try {
+ final int interactionId = mInteractionIdCounter.getAndIncrement();
+ final float windowScale = connection.findAccessibilityNodeInfoByAccessibilityId(
+ accessibilityWindowId, accessibilityViewId, interactionId, this,
+ Thread.currentThread().getId());
+ // If the scale is zero the call has failed.
+ if (windowScale > 0) {
+ handleSameThreadMessageIfNeeded();
+ AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
+ interactionId);
+ finalizeAccessibilityNodeInfo(info, connection, windowScale);
+ return info;
+ }
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ return null;
+ }
+
+ /**
+ * Finds an {@link AccessibilityNodeInfo} by View id. The search is performed
+ * in the currently active window and starts from the root View in the window.
+ *
+ * @param connection A connection for interacting with the system.
+ * @param id The id of the node.
+ * @return An {@link AccessibilityNodeInfo} if found, null otherwise.
+ */
+ public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(
+ IAccessibilityServiceConnection connection, int viewId) {
+ try {
+ final int interactionId = mInteractionIdCounter.getAndIncrement();
+ final float windowScale = connection.findAccessibilityNodeInfoByViewIdInActiveWindow(
+ viewId, interactionId, this, Thread.currentThread().getId());
+ // If the scale is zero the call has failed.
+ if (windowScale > 0) {
+ handleSameThreadMessageIfNeeded();
+ AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
+ interactionId);
+ finalizeAccessibilityNodeInfo(info, connection, windowScale);
+ return info;
+ }
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ return null;
+ }
+
+ /**
+ * Finds {@link AccessibilityNodeInfo}s by View text. The match is case
+ * insensitive containment. The search is performed in the currently
+ * active window and starts from the root View in the window.
+ *
+ * @param connection A connection for interacting with the system.
+ * @param text The searched text.
+ * @return A list of found {@link AccessibilityNodeInfo}s.
+ */
+ public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewTextInActiveWindow(
+ IAccessibilityServiceConnection connection, String text) {
+ try {
+ final int interactionId = mInteractionIdCounter.getAndIncrement();
+ final float windowScale = connection.findAccessibilityNodeInfosByViewTextInActiveWindow(
+ text, interactionId, this, Thread.currentThread().getId());
+ // If the scale is zero the call has failed.
+ if (windowScale > 0) {
+ handleSameThreadMessageIfNeeded();
+ List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
+ interactionId);
+ finalizeAccessibilityNodeInfos(infos, connection, windowScale);
+ return infos;
+ }
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ return null;
+ }
+
+ /**
+ * Finds {@link AccessibilityNodeInfo}s by View text. The match is case
+ * insensitive containment. The search is performed in the window whose
+ * id is specified and starts from the View whose accessibility id is
+ * specified.
+ *
+ * @param connection A connection for interacting with the system.
+ * @param text The searched text.
+ * @param accessibilityWindowId A unique window id.
+ * @param accessibilityViewId A unique View accessibility id from where to start the search.
+ * Use {@link android.view.View#NO_ID} to start from the root.
+ * @return A list of found {@link AccessibilityNodeInfo}s.
+ */
+ public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewText(
+ IAccessibilityServiceConnection connection, String text, int accessibilityWindowId,
+ int accessibilityViewId) {
+ try {
+ final int interactionId = mInteractionIdCounter.getAndIncrement();
+ final float windowScale = connection.findAccessibilityNodeInfosByViewText(text,
+ accessibilityWindowId, accessibilityViewId, interactionId, this,
+ Thread.currentThread().getId());
+ // If the scale is zero the call has failed.
+ if (windowScale > 0) {
+ handleSameThreadMessageIfNeeded();
+ List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
+ interactionId);
+ finalizeAccessibilityNodeInfos(infos, connection, windowScale);
+ return infos;
+ }
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * Performs an accessibility action on an {@link AccessibilityNodeInfo}.
+ *
+ * @param connection A connection for interacting with the system.
+ * @param accessibilityWindowId The id of the window.
+ * @param accessibilityViewId A unique View accessibility id.
+ * @param action The action to perform.
+ * @return Whether the action was performed.
+ */
+ public boolean performAccessibilityAction(IAccessibilityServiceConnection connection,
+ int accessibilityWindowId, int accessibilityViewId, int action) {
+ try {
+ final int interactionId = mInteractionIdCounter.getAndIncrement();
+ final boolean success = connection.performAccessibilityAction(
+ accessibilityWindowId, accessibilityViewId, action, interactionId, this,
+ Thread.currentThread().getId());
+ if (success) {
+ handleSameThreadMessageIfNeeded();
+ return getPerformAccessibilityActionResult(interactionId);
+ }
+ } catch (RemoteException re) {
+ /* ignore */
+ }
+ return false;
+ }
+
+ /**
+ * Gets the the result of an async request that returns an {@link AccessibilityNodeInfo}.
+ *
+ * @param interactionId The interaction id to match the result with the request.
+ * @return The result {@link AccessibilityNodeInfo}.
+ */
+ private AccessibilityNodeInfo getFindAccessibilityNodeInfoResultAndClear(int interactionId) {
+ synchronized (mInstanceLock) {
+ final boolean success = waitForResultTimedLocked(interactionId);
+ AccessibilityNodeInfo result = success ? mFindAccessibilityNodeInfoResult : null;
+ clearResultLocked();
+ return result;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setFindAccessibilityNodeInfoResult(AccessibilityNodeInfo info,
+ int interactionId) {
+ synchronized (mInstanceLock) {
+ if (interactionId > mInteractionId) {
+ mFindAccessibilityNodeInfoResult = info;
+ mInteractionId = interactionId;
+ }
+ mInstanceLock.notifyAll();
+ }
+ }
+
+ /**
+ * Gets the the result of an async request that returns {@link AccessibilityNodeInfo}s.
+ *
+ * @param interactionId The interaction id to match the result with the request.
+ * @return The result {@link AccessibilityNodeInfo}s.
+ */
+ private List<AccessibilityNodeInfo> getFindAccessibilityNodeInfosResultAndClear(
+ int interactionId) {
+ synchronized (mInstanceLock) {
+ final boolean success = waitForResultTimedLocked(interactionId);
+ List<AccessibilityNodeInfo> result = success ? mFindAccessibilityNodeInfosResult : null;
+ clearResultLocked();
+ return result;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setFindAccessibilityNodeInfosResult(List<AccessibilityNodeInfo> infos,
+ int interactionId) {
+ synchronized (mInstanceLock) {
+ if (interactionId > mInteractionId) {
+ mFindAccessibilityNodeInfosResult = infos;
+ mInteractionId = interactionId;
+ }
+ mInstanceLock.notifyAll();
+ }
+ }
+
+ /**
+ * Gets the result of a request to perform an accessibility action.
+ *
+ * @param interactionId The interaction id to match the result with the request.
+ * @return Whether the action was performed.
+ */
+ private boolean getPerformAccessibilityActionResult(int interactionId) {
+ synchronized (mInstanceLock) {
+ final boolean success = waitForResultTimedLocked(interactionId);
+ final boolean result = success ? mPerformAccessibilityActionResult : false;
+ clearResultLocked();
+ return result;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setPerformAccessibilityActionResult(boolean succeeded, int interactionId) {
+ synchronized (mInstanceLock) {
+ if (interactionId > mInteractionId) {
+ mPerformAccessibilityActionResult = succeeded;
+ mInteractionId = interactionId;
+ }
+ mInstanceLock.notifyAll();
+ }
+ }
+
+ /**
+ * Clears the result state.
+ */
+ private void clearResultLocked() {
+ mInteractionId = -1;
+ mFindAccessibilityNodeInfoResult = null;
+ mFindAccessibilityNodeInfosResult = null;
+ mPerformAccessibilityActionResult = false;
+ }
+
+ /**
+ * Waits up to a given bound for a result of a request and returns it.
+ *
+ * @param interactionId The interaction id to match the result with the request.
+ * @return Whether the result was received.
+ */
+ private boolean waitForResultTimedLocked(int interactionId) {
+ long waitTimeMillis = TIMEOUT_INTERACTION_MILLIS;
+ final long startTimeMillis = SystemClock.uptimeMillis();
+ while (true) {
+ try {
+ if (mInteractionId == interactionId) {
+ return true;
+ }
+ if (mInteractionId > interactionId) {
+ return false;
+ }
+ final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
+ waitTimeMillis = TIMEOUT_INTERACTION_MILLIS - elapsedTimeMillis;
+ if (waitTimeMillis <= 0) {
+ return false;
+ }
+ mInstanceLock.wait(waitTimeMillis);
+ } catch (InterruptedException ie) {
+ /* ignore */
+ }
+ }
+ }
+
+ /**
+ * Applies compatibility scale to the info bounds if it is not equal to one.
+ *
+ * @param info The info whose bounds to scale.
+ * @param scale The scale to apply.
+ */
+ private void applyCompatibilityScaleIfNeeded(AccessibilityNodeInfo info, float scale) {
+ if (scale == 1.0f) {
+ return;
+ }
+ Rect bounds = mTempBounds;
+ info.getBoundsInParent(bounds);
+ bounds.scale(scale);
+ info.setBoundsInParent(bounds);
+
+ info.getBoundsInScreen(bounds);
+ bounds.scale(scale);
+ info.setBoundsInScreen(bounds);
+ }
+
+ /**
+ * Handles the message stored if the interacted and interacting
+ * threads are the same otherwise this is a NOP.
+ */
+ private void handleSameThreadMessageIfNeeded() {
+ Message sameProcessMessage = getSameProcessMessageAndClear();
+ if (sameProcessMessage != null) {
+ sameProcessMessage.getTarget().handleMessage(sameProcessMessage);
+ }
+ }
+
+ /**
+ * Finalize an {@link AccessibilityNodeInfo} before passing it to the client.
+ *
+ * @param info The info.
+ * @param connection The current connection to the system.
+ * @param windowScale The source window compatibility scale.
+ */
+ private void finalizeAccessibilityNodeInfo(AccessibilityNodeInfo info,
+ IAccessibilityServiceConnection connection, float windowScale) {
+ if (info != null) {
+ applyCompatibilityScaleIfNeeded(info, windowScale);
+ info.setConnection(connection);
+ info.setSealed(true);
+ }
+ }
+
+ /**
+ * Finalize {@link AccessibilityNodeInfo}s before passing them to the client.
+ *
+ * @param infos The {@link AccessibilityNodeInfo}s.
+ * @param connection The current connection to the system.
+ * @param windowScale The source window compatibility scale.
+ */
+ private void finalizeAccessibilityNodeInfos(List<AccessibilityNodeInfo> infos,
+ IAccessibilityServiceConnection connection, float windowScale) {
+ if (infos != null) {
+ final int infosCount = infos.size();
+ for (int i = 0; i < infosCount; i++) {
+ AccessibilityNodeInfo info = infos.get(i);
+ finalizeAccessibilityNodeInfo(info, connection, windowScale);
+ }
+ }
+ }
+
+ /**
+ * Gets the message stored if the interacted and interacting
+ * threads are the same.
+ *
+ * @return The message.
+ */
+ private Message getSameProcessMessageAndClear() {
+ synchronized (mInstanceLock) {
+ Message result = mSameThreadMessage;
+ mSameThreadMessage = null;
+ return result;
+ }
+ }
+}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 6469b35..f0e8005 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -20,7 +20,6 @@ import android.accessibilityservice.IAccessibilityServiceConnection;
import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.text.TextUtils;
import android.util.SparseIntArray;
import android.view.View;
@@ -181,13 +180,9 @@ public class AccessibilityNodeInfo implements Parcelable {
if (!canPerformRequestOverConnection(childAccessibilityViewId)) {
return null;
}
- try {
- return mConnection.findAccessibilityNodeInfoByAccessibilityId(mAccessibilityWindowId,
- childAccessibilityViewId);
- } catch (RemoteException re) {
- /* ignore*/
- }
- return null;
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnection,
+ mAccessibilityWindowId, childAccessibilityViewId);
}
/**
@@ -257,13 +252,9 @@ public class AccessibilityNodeInfo implements Parcelable {
if (!canPerformRequestOverConnection(mAccessibilityViewId)) {
return false;
}
- try {
- return mConnection.performAccessibilityAction(mAccessibilityWindowId,
- mAccessibilityViewId, action);
- } catch (RemoteException e) {
- /* ignore */
- }
- return false;
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.performAccessibilityAction(mConnection, mAccessibilityWindowId,
+ mAccessibilityViewId, action);
}
/**
@@ -284,13 +275,9 @@ public class AccessibilityNodeInfo implements Parcelable {
if (!canPerformRequestOverConnection(mAccessibilityViewId)) {
return Collections.emptyList();
}
- try {
- return mConnection.findAccessibilityNodeInfosByViewText(text, mAccessibilityWindowId,
- mAccessibilityViewId);
- } catch (RemoteException e) {
- /* ignore */
- }
- return Collections.emptyList();
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfosByViewText(mConnection, text,
+ mAccessibilityWindowId, mAccessibilityViewId);
}
/**
@@ -308,13 +295,9 @@ public class AccessibilityNodeInfo implements Parcelable {
if (!canPerformRequestOverConnection(mAccessibilityViewId)) {
return null;
}
- try {
- return mConnection.findAccessibilityNodeInfoByAccessibilityId(
- mAccessibilityWindowId, mParentAccessibilityViewId);
- } catch (RemoteException e) {
- /* ignore */
- }
- return null;
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnection,
+ mAccessibilityWindowId, mParentAccessibilityViewId);
}
/**
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index 210106f..afd7473 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -18,7 +18,6 @@ package android.view.accessibility;
import android.accessibilityservice.IAccessibilityServiceConnection;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.view.View;
import java.util.ArrayList;
@@ -127,13 +126,9 @@ public class AccessibilityRecord {
if (mSourceWindowId == View.NO_ID || mSourceViewId == View.NO_ID || mConnection == null) {
return null;
}
- try {
- return mConnection.findAccessibilityNodeInfoByAccessibilityId(mSourceWindowId,
- mSourceViewId);
- } catch (RemoteException e) {
- /* ignore */
- }
- return null;
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnection, mSourceWindowId,
+ mSourceViewId);
}
/**
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionCallback.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionCallback.aidl
new file mode 100644
index 0000000..eeab4f2
--- /dev/null
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionCallback.aidl
@@ -0,0 +1,54 @@
+/*
+ * 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 android.view.accessibility;
+
+import android.view.accessibility.AccessibilityNodeInfo;
+import java.util.List;
+
+/**
+ * Callback for specifying the result for an asynchronous request made
+ * via calling a method on IAccessibilityInteractionCallback.
+ *
+ * @hide
+ */
+oneway interface IAccessibilityInteractionCallback {
+
+ /**
+ * Sets the result of an async request that returns an {@link AccessibilityNodeInfo}.
+ *
+ * @param infos The result {@link AccessibilityNodeInfo}.
+ * @param interactionId The interaction id to match the result with the request.
+ */
+ void setFindAccessibilityNodeInfoResult(in AccessibilityNodeInfo info, int interactionId);
+
+ /**
+ * Sets the result of an async request that returns {@link AccessibilityNodeInfo}s.
+ *
+ * @param infos The result {@link AccessibilityNodeInfo}s.
+ * @param interactionId The interaction id to match the result with the request.
+ */
+ void setFindAccessibilityNodeInfosResult(in List<AccessibilityNodeInfo> infos,
+ int interactionId);
+
+ /**
+ * Sets the result of a request to perform an accessibility action.
+ *
+ * @param Whether the action was performed.
+ * @param interactionId The interaction id to match the result with the request.
+ */
+ void setPerformAccessibilityActionResult(boolean succeeded, int interactionId);
+}
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
index d35186b..535d594 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
@@ -28,14 +28,18 @@ import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
oneway interface IAccessibilityInteractionConnection {
void findAccessibilityNodeInfoByAccessibilityId(int accessibilityViewId, int interactionId,
- IAccessibilityInteractionConnectionCallback callback);
+ IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid);
void findAccessibilityNodeInfoByViewId(int id, int interactionId,
- IAccessibilityInteractionConnectionCallback callback);
+ IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid);
void findAccessibilityNodeInfosByViewText(String text, int accessibilityViewId,
- int interactionId, IAccessibilityInteractionConnectionCallback callback);
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ int interrogatingPid, long interrogatingTid);
void performAccessibilityAction(int accessibilityId, int action, int interactionId,
- IAccessibilityInteractionConnectionCallback callback);
+ IAccessibilityInteractionConnectionCallback callback, int interrogatingPid,
+ long interrogatingTid);
}
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
index 9c5e8dc..c1a3ab7 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
@@ -27,10 +27,28 @@ import java.util.List;
*/
oneway interface IAccessibilityInteractionConnectionCallback {
+ /**
+ * Sets the result of an async request that returns an {@link AccessibilityNodeInfo}.
+ *
+ * @param infos The result {@link AccessibilityNodeInfo}.
+ * @param interactionId The interaction id to match the result with the request.
+ */
void setFindAccessibilityNodeInfoResult(in AccessibilityNodeInfo info, int interactionId);
+ /**
+ * Sets the result of an async request that returns {@link AccessibilityNodeInfo}s.
+ *
+ * @param infos The result {@link AccessibilityNodeInfo}s.
+ * @param interactionId The interaction id to match the result with the request.
+ */
void setFindAccessibilityNodeInfosResult(in List<AccessibilityNodeInfo> infos,
int interactionId);
+ /**
+ * Sets the result of a request to perform an accessibility action.
+ *
+ * @param Whether the action was performed.
+ * @param interactionId The interaction id to match the result with the request.
+ */
void setPerformAccessibilityActionResult(boolean succeeded, int interactionId);
}
diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java
index f4b9252..c1eec6f 100644
--- a/core/java/android/view/animation/Animation.java
+++ b/core/java/android/view/animation/Animation.java
@@ -441,6 +441,7 @@ public abstract class Animation implements Cloneable {
*/
public void scaleCurrentDuration(float scale) {
mDuration = (long) (mDuration * scale);
+ mStartOffset = (long) (mStartOffset * scale);
}
/**
diff --git a/core/java/android/view/textservice/SpellCheckerInfo.java b/core/java/android/view/textservice/SpellCheckerInfo.java
index 89cb11c..9d8475d 100644
--- a/core/java/android/view/textservice/SpellCheckerInfo.java
+++ b/core/java/android/view/textservice/SpellCheckerInfo.java
@@ -24,7 +24,6 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
@@ -71,7 +70,6 @@ public final class SpellCheckerInfo implements Parcelable {
final PackageManager pm = context.getPackageManager();
int label = 0;
String settingsActivityComponent = null;
- int isDefaultResId = 0;
XmlResourceParser parser = null;
try {
@@ -221,6 +219,15 @@ public final class SpellCheckerInfo implements Parcelable {
return mService.loadIcon(pm);
}
+
+ /**
+ * Return the raw information about the Service implementing this
+ * spell checker. Do not modify the returned object.
+ */
+ public ServiceInfo getServiceInfo() {
+ return mService.serviceInfo;
+ }
+
/**
* Return the class name of an activity that provides a settings UI.
* You can launch this activity be starting it with
diff --git a/core/java/android/view/textservice/SpellCheckerSubtype.java b/core/java/android/view/textservice/SpellCheckerSubtype.java
index dbd3081..aeb3ba6 100644
--- a/core/java/android/view/textservice/SpellCheckerSubtype.java
+++ b/core/java/android/view/textservice/SpellCheckerSubtype.java
@@ -17,13 +17,16 @@
package android.view.textservice;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
/**
* This class is used to specify meta information of a subtype contained in a spell checker.
@@ -97,6 +100,48 @@ public final class SpellCheckerSubtype implements Parcelable {
return false;
}
+ private static Locale constructLocaleFromString(String localeStr) {
+ if (TextUtils.isEmpty(localeStr))
+ return null;
+ String[] localeParams = localeStr.split("_", 3);
+ // The length of localeStr is guaranteed to always return a 1 <= value <= 3
+ // because localeStr is not empty.
+ if (localeParams.length == 1) {
+ return new Locale(localeParams[0]);
+ } else if (localeParams.length == 2) {
+ return new Locale(localeParams[0], localeParams[1]);
+ } else if (localeParams.length == 3) {
+ return new Locale(localeParams[0], localeParams[1], localeParams[2]);
+ }
+ return null;
+ }
+
+ /**
+ * @param context Context will be used for getting Locale and PackageManager.
+ * @param packageName The package name of the spell checker
+ * @param appInfo The application info of the spell checker
+ * @return a display name for this subtype. The string resource of the label (mSubtypeNameResId)
+ * can have only one %s in it. If there is, the %s part will be replaced with the locale's
+ * display name by the formatter. If there is not, this method simply returns the string
+ * specified by mSubtypeNameResId. If mSubtypeNameResId is not specified (== 0), it's up to the
+ * framework to generate an appropriate display name.
+ */
+ public CharSequence getDisplayName(
+ Context context, String packageName, ApplicationInfo appInfo) {
+ final Locale locale = constructLocaleFromString(mSubtypeLocale);
+ final String localeStr = locale != null ? locale.getDisplayName() : mSubtypeLocale;
+ if (mSubtypeNameResId == 0) {
+ return localeStr;
+ }
+ final CharSequence subtypeName = context.getPackageManager().getText(
+ packageName, mSubtypeNameResId, appInfo);
+ if (!TextUtils.isEmpty(subtypeName)) {
+ return String.format(subtypeName.toString(), localeStr);
+ } else {
+ return localeStr;
+ }
+ }
+
@Override
public int describeContents() {
return 0;
diff --git a/core/java/android/view/textservice/SuggestionsInfo.java b/core/java/android/view/textservice/SuggestionsInfo.java
index ed0f89d..62a06b9 100644
--- a/core/java/android/view/textservice/SuggestionsInfo.java
+++ b/core/java/android/view/textservice/SuggestionsInfo.java
@@ -16,6 +16,8 @@
package android.view.textservice;
+import com.android.internal.util.ArrayUtils;
+
import android.os.Parcel;
import android.os.Parcelable;
@@ -23,7 +25,7 @@ import android.os.Parcelable;
* This class contains a metadata of suggestions from the text service
*/
public final class SuggestionsInfo implements Parcelable {
- private static final String[] EMPTY = new String[0];
+ private static final String[] EMPTY = ArrayUtils.emptyArray(String.class);
/**
* Flag of the attributes of the suggestions that can be obtained by
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index bb13052..c85b2d9 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -72,27 +72,53 @@ public final class TextServicesManager {
* languages in settings will be returned.
* @return the spell checker session of the spell checker
*/
- // TODO: Add a method to get enabled spell checkers.
- // TODO: Handle referToSpellCheckerLanguageSettings
public SpellCheckerSession newSpellCheckerSession(Bundle bundle, Locale locale,
SpellCheckerSessionListener listener, boolean referToSpellCheckerLanguageSettings) {
if (listener == null) {
throw new NullPointerException();
}
- // TODO: set a proper locale instead of the dummy locale
- final String localeString = locale == null ? "en" : locale.toString();
+ if (!referToSpellCheckerLanguageSettings && locale == null) {
+ throw new IllegalArgumentException("Locale should not be null if you don't refer"
+ + " settings.");
+ }
final SpellCheckerInfo sci;
try {
- sci = sService.getCurrentSpellChecker(localeString);
+ sci = sService.getCurrentSpellChecker(null);
} catch (RemoteException e) {
return null;
}
if (sci == null) {
return null;
}
+ SpellCheckerSubtype subtypeInUse = null;
+ if (referToSpellCheckerLanguageSettings) {
+ subtypeInUse = getCurrentSpellCheckerSubtype(true);
+ if (subtypeInUse == null) {
+ return null;
+ }
+ if (locale != null) {
+ final String subtypeLocale = subtypeInUse.getLocale();
+ final String inputLocale = locale.toString();
+ if (subtypeLocale.length() < 2 || inputLocale.length() < 2
+ || !subtypeLocale.substring(0, 2).equals(inputLocale.substring(0, 2))) {
+ return null;
+ }
+ }
+ } else {
+ final String localeStr = locale.toString();
+ for (int i = 0; i < sci.getSubtypeCount(); ++i) {
+ final SpellCheckerSubtype subtype = sci.getSubtypeAt(i);
+ if (subtype.getLocale().equals(localeStr)) {
+ subtypeInUse = subtype;
+ }
+ }
+ }
+ if (subtypeInUse == null) {
+ return null;
+ }
final SpellCheckerSession session = new SpellCheckerSession(sci, sService, listener);
try {
- sService.getSpellCheckerService(sci.getId(), localeString,
+ sService.getSpellCheckerService(sci.getId(), subtypeInUse.getLocale(),
session.getTextServicesSessionListener(),
session.getSpellCheckerSessionListener(), bundle);
} catch (RemoteException e) {
@@ -146,10 +172,11 @@ public final class TextServicesManager {
/**
* @hide
*/
- public SpellCheckerSubtype getCurrentSpellCheckerSubtype() {
+ public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
+ boolean allowImplicitlySelectedSubtype) {
try {
// Passing null as a locale for ICS
- return sService.getCurrentSpellCheckerSubtype(null);
+ return sService.getCurrentSpellCheckerSubtype(null, allowImplicitlySelectedSubtype);
} catch (RemoteException e) {
Log.e(TAG, "Error in getCurrentSpellCheckerSubtype: " + e);
return null;
@@ -161,14 +188,38 @@ public final class TextServicesManager {
*/
public void setSpellCheckerSubtype(SpellCheckerSubtype subtype) {
try {
+ final int hashCode;
if (subtype == null) {
- throw new NullPointerException("SpellCheckerSubtype is null.");
+ hashCode = 0;
+ } else {
+ hashCode = subtype.hashCode();
}
- sService.setCurrentSpellCheckerSubtype(null, subtype.hashCode());
+ sService.setCurrentSpellCheckerSubtype(null, hashCode);
} catch (RemoteException e) {
Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
}
}
+ /**
+ * @hide
+ */
+ public void setSpellCheckerEnabled(boolean enabled) {
+ try {
+ sService.setSpellCheckerEnabled(enabled);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
+ }
+ }
+ /**
+ * @hide
+ */
+ public boolean isSpellCheckerEnabled() {
+ try {
+ return sService.isSpellCheckerEnabled();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
+ return false;
+ }
+ }
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 5d776fd..4748522 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -43,6 +43,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
+import android.graphics.RegionIterator;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
import android.net.Proxy;
@@ -605,8 +606,9 @@ public class WebView extends AbsoluteLayout
// know to handle Shift and arrows natively first
private boolean mAccessibilityScriptInjected;
+ static final boolean USE_WEBKIT_RINGS = true;
// the color used to highlight the touch rectangles
- private static final int mHightlightColor = 0x33000000;
+ private static final int mHightlightColor = 0x6633b5e5;
// the round corner for the highlight path
private static final float TOUCH_HIGHLIGHT_ARC = 5.0f;
// the region indicating where the user touched on the screen
@@ -619,6 +621,7 @@ public class WebView extends AbsoluteLayout
private Paint mTouchCrossHairColor;
private int mTouchHighlightX;
private int mTouchHighlightY;
+ private long mTouchHighlightRequested;
// Basically this proxy is used to tell the Video to update layer tree at
// SetBaseLayer time and to pause when WebView paused.
@@ -3451,6 +3454,7 @@ public class WebView extends AbsoluteLayout
}
abortAnimation();
mPrivateHandler.removeMessages(RESUME_WEBCORE_PRIORITY);
+ nativeSetIsScrolling(false);
if (!mBlockWebkitViewMessages) {
WebViewCore.resumePriority();
if (!mSelectingText) {
@@ -3991,7 +3995,7 @@ public class WebView extends AbsoluteLayout
return super.drawChild(canvas, child, drawingTime);
}
- private void drawContent(Canvas canvas) {
+ private void drawContent(Canvas canvas, boolean drawRings) {
// Update the buttons in the picture, so when we draw the picture
// to the screen, they are in the correct state.
// Tell the native side if user is a) touching the screen,
@@ -4000,10 +4004,14 @@ public class WebView extends AbsoluteLayout
// state.
// If mNativeClass is 0, we should not reach here, so we do not
// need to check it again.
- nativeRecordButtons(hasFocus() && hasWindowFocus(),
- mTouchMode == TOUCH_SHORTPRESS_START_MODE
- || mTrackballDown || mGotCenterDown, false);
- drawCoreAndCursorRing(canvas, mBackgroundColor, mDrawCursorRing);
+ if (mDrawCursorRing && drawRings) {
+ // Only update if we are actually going to use the result
+ nativeRecordButtons(hasFocus() && hasWindowFocus(),
+ mTouchMode == TOUCH_SHORTPRESS_START_MODE
+ || mTrackballDown || mGotCenterDown, false);
+ }
+ drawCoreAndCursorRing(canvas, mBackgroundColor,
+ mDrawCursorRing && drawRings);
}
/**
@@ -4067,7 +4075,16 @@ public class WebView extends AbsoluteLayout
if (mTitleBar != null) {
canvas.translate(0, getTitleHeight());
}
- drawContent(canvas);
+ boolean drawJavaRings = !mTouchHighlightRegion.isEmpty()
+ && (mTouchMode == TOUCH_INIT_MODE
+ || mTouchMode == TOUCH_SHORTPRESS_START_MODE
+ || mTouchMode == TOUCH_SHORTPRESS_MODE
+ || mTouchMode == TOUCH_DONE_MODE);
+ boolean drawNativeRings = !drawJavaRings;
+ if (USE_WEBKIT_RINGS) {
+ drawNativeRings = !drawJavaRings && !isInTouchMode();
+ }
+ drawContent(canvas, drawNativeRings);
canvas.restoreToCount(saveCount);
if (AUTO_REDRAW_HACK && mAutoRedraw) {
@@ -4080,16 +4097,22 @@ public class WebView extends AbsoluteLayout
}
// paint the highlight in the end
- if (!mTouchHighlightRegion.isEmpty()) {
- if (mTouchHightlightPaint == null) {
- mTouchHightlightPaint = new Paint();
- mTouchHightlightPaint.setColor(mHightlightColor);
- mTouchHightlightPaint.setAntiAlias(true);
- mTouchHightlightPaint.setPathEffect(new CornerPathEffect(
- TOUCH_HIGHLIGHT_ARC));
+ if (drawJavaRings) {
+ long delay = System.currentTimeMillis() - mTouchHighlightRequested;
+ if (delay < ViewConfiguration.getTapTimeout()) {
+ Rect r = mTouchHighlightRegion.getBounds();
+ postInvalidateDelayed(delay, r.left, r.top, r.right, r.bottom);
+ } else {
+ if (mTouchHightlightPaint == null) {
+ mTouchHightlightPaint = new Paint();
+ mTouchHightlightPaint.setColor(mHightlightColor);
+ }
+ RegionIterator iter = new RegionIterator(mTouchHighlightRegion);
+ Rect r = new Rect();
+ while (iter.next(r)) {
+ canvas.drawRect(r, mTouchHightlightPaint);
+ }
}
- canvas.drawPath(mTouchHighlightRegion.getBoundaryPath(),
- mTouchHightlightPaint);
}
if (DEBUG_TOUCH_HIGHLIGHT) {
if (getSettings().getNavDump()) {
@@ -4112,11 +4135,10 @@ public class WebView extends AbsoluteLayout
}
}
- private void removeTouchHighlight(boolean removePendingMessage) {
- if (removePendingMessage) {
- mWebViewCore.removeMessages(EventHub.GET_TOUCH_HIGHLIGHT_RECTS);
- }
- mWebViewCore.sendMessage(EventHub.REMOVE_TOUCH_HIGHLIGHT_RECTS);
+ private void removeTouchHighlight() {
+ mWebViewCore.removeMessages(EventHub.GET_TOUCH_HIGHLIGHT_RECTS);
+ mPrivateHandler.removeMessages(SET_TOUCH_HIGHLIGHT_RECTS);
+ setTouchHighlightRects(null);
}
@Override
@@ -5785,8 +5807,8 @@ public class WebView extends AbsoluteLayout
mPrivateHandler.removeMessages(RESUME_WEBCORE_PRIORITY);
} else if (mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP)) {
mPrivateHandler.removeMessages(RELEASE_SINGLE_TAP);
- if (getSettings().supportTouchOnly()) {
- removeTouchHighlight(true);
+ if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
+ removeTouchHighlight();
}
if (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare) {
mTouchMode = TOUCH_DOUBLE_TAP_MODE;
@@ -5809,15 +5831,19 @@ public class WebView extends AbsoluteLayout
mWebViewCore.sendMessage(
EventHub.UPDATE_FRAME_CACHE_IF_LOADING);
}
- if (getSettings().supportTouchOnly()) {
+ if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
TouchHighlightData data = new TouchHighlightData();
data.mX = contentX;
data.mY = contentY;
+ data.mNativeLayerRect = new Rect();
+ data.mNativeLayer = nativeScrollableLayer(
+ contentX, contentY, data.mNativeLayerRect, null);
data.mSlop = viewToContentDimension(mNavSlop);
+ mTouchHighlightRegion.setEmpty();
if (!mBlockWebkitViewMessages) {
- mWebViewCore.sendMessageDelayed(
- EventHub.GET_TOUCH_HIGHLIGHT_RECTS, data,
- ViewConfiguration.getTapTimeout());
+ mTouchHighlightRequested = System.currentTimeMillis();
+ mWebViewCore.sendMessageAtFrontOfQueue(
+ EventHub.GET_TOUCH_HIGHLIGHT_RECTS, data);
}
if (DEBUG_TOUCH_HIGHLIGHT) {
if (getSettings().getNavDump()) {
@@ -5904,8 +5930,8 @@ public class WebView extends AbsoluteLayout
if (mTouchMode == TOUCH_DOUBLE_TAP_MODE) {
mTouchMode = TOUCH_INIT_MODE;
}
- if (getSettings().supportTouchOnly()) {
- removeTouchHighlight(true);
+ if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
+ removeTouchHighlight();
}
}
// pass the touch events from UI thread to WebCore thread
@@ -6382,6 +6408,8 @@ public class WebView extends AbsoluteLayout
WebViewCore.reducePriority();
// to get better performance, pause updating the picture
WebViewCore.pauseUpdatePicture(mWebViewCore);
+ nativeSetIsScrolling(true);
+
if (!mDragFromTextInput) {
nativeHideCursor();
}
@@ -6478,13 +6506,14 @@ public class WebView extends AbsoluteLayout
|| mTouchMode == TOUCH_DRAG_LAYER_MODE) && !mSelectingText) {
WebViewCore.resumePriority();
WebViewCore.resumeUpdatePicture(mWebViewCore);
+ nativeSetIsScrolling(false);
}
mPrivateHandler.removeMessages(SWITCH_TO_SHORTPRESS);
mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS);
mPrivateHandler.removeMessages(DRAG_HELD_MOTIONLESS);
mPrivateHandler.removeMessages(AWAKEN_SCROLL_BARS);
- if (getSettings().supportTouchOnly()) {
- removeTouchHighlight(true);
+ if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
+ removeTouchHighlight();
}
mHeldMotionless = MOTIONLESS_TRUE;
mTouchMode = TOUCH_DONE_MODE;
@@ -7136,8 +7165,20 @@ public class WebView extends AbsoluteLayout
int contentX = viewToContentX(mLastTouchX + mScrollX);
int contentY = viewToContentY(mLastTouchY + mScrollY);
int slop = viewToContentDimension(mNavSlop);
+ if (USE_WEBKIT_RINGS && !mTouchHighlightRegion.isEmpty()) {
+ // set mTouchHighlightRequested to 0 to cause an immediate
+ // drawing of the touch rings
+ mTouchHighlightRequested = 0;
+ invalidate(mTouchHighlightRegion.getBounds());
+ mPrivateHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ removeTouchHighlight();
+ }
+ }, ViewConfiguration.getPressedStateDuration());
+ }
if (getSettings().supportTouchOnly()) {
- removeTouchHighlight(false);
+ removeTouchHighlight();
WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData();
// use "0" as generation id to inform WebKit to use the same x/y as
// it used when processing GET_TOUCH_HIGHLIGHT_RECTS
@@ -8027,8 +8068,8 @@ public class WebView extends AbsoluteLayout
break;
}
case SWITCH_TO_LONGPRESS: {
- if (getSettings().supportTouchOnly()) {
- removeTouchHighlight(false);
+ if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
+ removeTouchHighlight();
}
if (inFullScreenMode() || mDeferTouchProcess) {
TouchEventData ted = new TouchEventData();
@@ -8350,26 +8391,9 @@ public class WebView extends AbsoluteLayout
break;
case SET_TOUCH_HIGHLIGHT_RECTS:
- invalidate(mTouchHighlightRegion.getBounds());
- mTouchHighlightRegion.setEmpty();
- if (msg.obj != null) {
- ArrayList<Rect> rects = (ArrayList<Rect>) msg.obj;
- for (Rect rect : rects) {
- Rect viewRect = contentToViewRect(rect);
- // some sites, like stories in nytimes.com, set
- // mouse event handler in the top div. It is not
- // user friendly to highlight the div if it covers
- // more than half of the screen.
- if (viewRect.width() < getWidth() >> 1
- || viewRect.height() < getHeight() >> 1) {
- mTouchHighlightRegion.union(viewRect);
- invalidate(viewRect);
- } else {
- Log.w(LOGTAG, "Skip the huge selection rect:"
- + viewRect);
- }
- }
- }
+ @SuppressWarnings("unchecked")
+ ArrayList<Rect> rects = (ArrayList<Rect>) msg.obj;
+ setTouchHighlightRects(rects);
break;
case SAVE_WEBARCHIVE_FINISHED:
@@ -8406,6 +8430,28 @@ public class WebView extends AbsoluteLayout
}
}
+ private void setTouchHighlightRects(ArrayList<Rect> rects) {
+ invalidate(mTouchHighlightRegion.getBounds());
+ mTouchHighlightRegion.setEmpty();
+ if (rects != null) {
+ for (Rect rect : rects) {
+ Rect viewRect = contentToViewRect(rect);
+ // some sites, like stories in nytimes.com, set
+ // mouse event handler in the top div. It is not
+ // user friendly to highlight the div if it covers
+ // more than half of the screen.
+ if (viewRect.width() < getWidth() >> 1
+ || viewRect.height() < getHeight() >> 1) {
+ mTouchHighlightRegion.union(viewRect);
+ } else {
+ Log.w(LOGTAG, "Skip the huge selection rect:"
+ + viewRect);
+ }
+ }
+ invalidate(mTouchHighlightRegion.getBounds());
+ }
+ }
+
/** @hide Called by JNI when pages are swapped (only occurs with hardware
* acceleration) */
protected void pageSwapCallback() {
@@ -9078,7 +9124,9 @@ public class WebView extends AbsoluteLayout
/** @hide send content invalidate */
protected void contentInvalidateAll() {
- mWebViewCore.sendMessage(EventHub.CONTENT_INVALIDATE_ALL);
+ if (mWebViewCore != null && !mBlockWebkitViewMessages) {
+ mWebViewCore.sendMessage(EventHub.CONTENT_INVALIDATE_ALL);
+ }
}
/** @hide call pageSwapCallback upon next page swap */
@@ -9277,6 +9325,7 @@ public class WebView extends AbsoluteLayout
* @return True if the layer is successfully scrolled.
*/
private native boolean nativeScrollLayer(int layer, int newX, int newY);
+ private native void nativeSetIsScrolling(boolean isScrolling);
private native int nativeGetBackgroundColor();
native boolean nativeSetProperty(String key, String value);
native String nativeGetProperty(String key);
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 400cdbd..3ca3eaa 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -801,6 +801,8 @@ public final class WebViewCore {
int mX;
int mY;
int mSlop;
+ int mNativeLayer;
+ Rect mNativeLayerRect;
}
static class AutoFillData {
@@ -1015,7 +1017,6 @@ public final class WebViewCore {
static final int REMOVE_PACKAGE_NAME = 186;
static final int GET_TOUCH_HIGHLIGHT_RECTS = 187;
- static final int REMOVE_TOUCH_HIGHLIGHT_RECTS = 188;
// accessibility support
static final int MODIFY_SELECTION = 190;
@@ -1172,6 +1173,7 @@ public final class WebViewCore {
loadParams.mMimeType,
loadParams.mEncoding,
loadParams.mHistoryUrl);
+ nativeContentInvalidateAll();
break;
case STOP_LOADING:
@@ -1576,6 +1578,10 @@ public final class WebViewCore {
case GET_TOUCH_HIGHLIGHT_RECTS:
TouchHighlightData d = (TouchHighlightData) msg.obj;
+ if (d.mNativeLayer != 0) {
+ nativeScrollLayer(d.mNativeLayer,
+ d.mNativeLayerRect);
+ }
ArrayList<Rect> rects = nativeGetTouchHighlightRects
(d.mX, d.mY, d.mSlop);
mWebView.mPrivateHandler.obtainMessage(
@@ -1583,12 +1589,6 @@ public final class WebViewCore {
.sendToTarget();
break;
- case REMOVE_TOUCH_HIGHLIGHT_RECTS:
- mWebView.mPrivateHandler.obtainMessage(
- WebView.SET_TOUCH_HIGHLIGHT_RECTS, null)
- .sendToTarget();
- break;
-
case USE_MOCK_DEVICE_ORIENTATION:
useMockDeviceOrientation();
break;
@@ -2070,10 +2070,8 @@ public final class WebViewCore {
if (!core.getSettings().enableSmoothTransition()) return;
synchronized (core) {
+ core.nativeSetIsPaused(true);
core.mDrawIsPaused = true;
- if (core.mDrawIsScheduled) {
- core.mEventHub.removeMessages(EventHub.WEBKIT_DRAW);
- }
}
}
@@ -2082,15 +2080,14 @@ public final class WebViewCore {
static void resumeUpdatePicture(WebViewCore core) {
if (core != null) {
// if mDrawIsPaused is true, ignore the setting, continue to resume
- if (!core.mDrawIsPaused
- && !core.getSettings().enableSmoothTransition()) return;
+ if (!core.mDrawIsPaused)
+ return;
synchronized (core) {
+ core.nativeSetIsPaused(false);
core.mDrawIsPaused = false;
// always redraw on resume to reenable gif animations
core.mDrawIsScheduled = false;
- core.nativeContentInvalidateAll();
- core.contentDraw();
}
}
}
@@ -2127,7 +2124,6 @@ public final class WebViewCore {
// only fire an event if this is our first request
if (mDrawIsScheduled) return;
mDrawIsScheduled = true;
- if (mDrawIsPaused) return;
mEventHub.sendMessage(Message.obtain(null, EventHub.WEBKIT_DRAW));
}
}
@@ -2228,9 +2224,9 @@ public final class WebViewCore {
}
// remove the touch highlight when moving to a new page
- if (getSettings().supportTouchOnly()) {
- mEventHub.sendMessage(Message.obtain(null,
- EventHub.REMOVE_TOUCH_HIGHLIGHT_RECTS));
+ if (WebView.USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) {
+ mWebView.mPrivateHandler.sendEmptyMessage(
+ WebView.SET_TOUCH_HIGHLIGHT_RECTS);
}
// reset the scroll position, the restored offset and scales
@@ -2789,6 +2785,7 @@ public final class WebViewCore {
return mDeviceOrientationService;
}
+ private native void nativeSetIsPaused(boolean isPaused);
private native void nativePause();
private native void nativeResume();
private native void nativeFreeMemory();
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 86f061a..80cbbfb 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1574,8 +1574,17 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
ss.inActionMode = mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null;
- ss.checkState = mCheckStates;
- ss.checkIdState = mCheckedIdStates;
+ if (mCheckStates != null) {
+ ss.checkState = mCheckStates.clone();
+ }
+ if (mCheckedIdStates != null) {
+ final LongSparseArray<Boolean> idState = new LongSparseArray<Boolean>();
+ final int count = mCheckedIdStates.size();
+ for (int i = 0; i < count; i++) {
+ idState.put(mCheckedIdStates.keyAt(i), mCheckedIdStates.valueAt(i));
+ }
+ ss.checkIdState = idState;
+ }
ss.checkedItemCount = mCheckedItemCount;
return ss;
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 7ad5d6c..51506e8 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -368,8 +368,10 @@ class FastScroller {
} else if (mState == STATE_EXIT) {
if (alpha == 0) { // Done with exit
setState(STATE_NONE);
+ } else if (mTrackDrawable != null) {
+ mList.invalidate(viewWidth - mThumbW, 0, viewWidth, mList.getHeight());
} else {
- mList.invalidate(viewWidth - mThumbW, y, viewWidth, y + mThumbH);
+ mList.invalidate(viewWidth - mThumbW, y, viewWidth, y + mThumbH);
}
}
}
@@ -597,7 +599,7 @@ class FastScroller {
private int getThumbPositionForListPosition(int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
- if (mSectionIndexer == null) {
+ if (mSectionIndexer == null || mListAdapter == null) {
getSectionsFromIndexer();
}
if (mSectionIndexer == null || !mMatchDragPosition) {
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
new file mode 100644
index 0000000..ff13dcb
--- /dev/null
+++ b/core/java/android/widget/SpellChecker.java
@@ -0,0 +1,226 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package android.widget;
+
+import android.content.Context;
+import android.text.Editable;
+import android.text.Selection;
+import android.text.Spanned;
+import android.text.style.SpellCheckSpan;
+import android.text.style.SuggestionSpan;
+import android.util.Log;
+import android.view.textservice.SpellCheckerSession;
+import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
+import android.view.textservice.SuggestionsInfo;
+import android.view.textservice.TextInfo;
+import android.view.textservice.TextServicesManager;
+
+import com.android.internal.util.ArrayUtils;
+
+import java.util.Locale;
+
+
+/**
+ * Helper class for TextView. Bridge between the TextView and the Dictionnary service.
+ *
+ * @hide
+ */
+public class SpellChecker implements SpellCheckerSessionListener {
+ private static final String LOG_TAG = "SpellChecker";
+ private static final boolean DEBUG_SPELL_CHECK = false;
+ private static final int DELAY_BEFORE_SPELL_CHECK = 400; // milliseconds
+
+ private final TextView mTextView;
+
+ final SpellCheckerSession spellCheckerSession;
+ final int mCookie;
+
+ // Paired arrays for the (id, spellCheckSpan) pair. mIndex is the next available position
+ private int[] mIds;
+ private SpellCheckSpan[] mSpellCheckSpans;
+ // The actual current number of used slots in the above arrays
+ private int mLength;
+
+ private int mSpanSequenceCounter = 0;
+ private Runnable mChecker;
+
+ public SpellChecker(TextView textView) {
+ mTextView = textView;
+
+ final TextServicesManager textServicesManager = (TextServicesManager) textView.getContext().
+ getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
+ spellCheckerSession = textServicesManager.newSpellCheckerSession(
+ null /* not currently used by the textServicesManager */, Locale.getDefault(),
+ this, true /* means use the languages defined in Settings */);
+ mCookie = hashCode();
+
+ // Arbitrary: 4 simultaneous spell check spans. Will automatically double size on demand
+ final int size = ArrayUtils.idealObjectArraySize(4);
+ mIds = new int[size];
+ mSpellCheckSpans = new SpellCheckSpan[size];
+ mLength = 0;
+ }
+
+ public void addSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
+ int length = mIds.length;
+ if (mLength >= length) {
+ final int newSize = length * 2;
+ int[] newIds = new int[newSize];
+ SpellCheckSpan[] newSpellCheckSpans = new SpellCheckSpan[newSize];
+ System.arraycopy(mIds, 0, newIds, 0, length);
+ System.arraycopy(mSpellCheckSpans, 0, newSpellCheckSpans, 0, length);
+ mIds = newIds;
+ mSpellCheckSpans = newSpellCheckSpans;
+ }
+
+ mIds[mLength] = mSpanSequenceCounter++;
+ mSpellCheckSpans[mLength] = spellCheckSpan;
+ mLength++;
+
+ if (DEBUG_SPELL_CHECK) {
+ final Editable mText = (Editable) mTextView.getText();
+ int start = mText.getSpanStart(spellCheckSpan);
+ int end = mText.getSpanEnd(spellCheckSpan);
+ if (start >= 0 && end >= 0) {
+ Log.d(LOG_TAG, "Schedule check " + mText.subSequence(start, end));
+ } else {
+ Log.d(LOG_TAG, "Schedule check EMPTY!");
+ }
+ }
+
+ scheduleSpellCheck();
+ }
+
+ public void removeSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
+ for (int i = 0; i < mLength; i++) {
+ if (mSpellCheckSpans[i] == spellCheckSpan) {
+ removeAtIndex(i);
+ return;
+ }
+ }
+ }
+
+ private void removeAtIndex(int i) {
+ System.arraycopy(mIds, i + 1, mIds, i, mLength - i - 1);
+ System.arraycopy(mSpellCheckSpans, i + 1, mSpellCheckSpans, i, mLength - i - 1);
+ mLength--;
+ }
+
+ public void onSelectionChanged() {
+ scheduleSpellCheck();
+ }
+
+ private void scheduleSpellCheck() {
+ if (mLength == 0) return;
+ if (mChecker != null) {
+ mTextView.removeCallbacks(mChecker);
+ }
+ if (mChecker == null) {
+ mChecker = new Runnable() {
+ public void run() {
+ spellCheck();
+ }
+ };
+ }
+ mTextView.postDelayed(mChecker, DELAY_BEFORE_SPELL_CHECK);
+ }
+
+ private void spellCheck() {
+ final Editable editable = (Editable) mTextView.getText();
+ final int selectionStart = Selection.getSelectionStart(editable);
+ final int selectionEnd = Selection.getSelectionEnd(editable);
+
+ TextInfo[] textInfos = new TextInfo[mLength];
+ int textInfosCount = 0;
+
+ for (int i = 0; i < mLength; i++) {
+ SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
+
+ if (spellCheckSpan.isSpellCheckInProgress()) continue;
+
+ final int start = editable.getSpanStart(spellCheckSpan);
+ final int end = editable.getSpanEnd(spellCheckSpan);
+
+ // Do not check this word if the user is currently editing it
+ if (start >= 0 && end > start && (selectionEnd < start || selectionStart > end)) {
+ final String word = editable.subSequence(start, end).toString();
+ spellCheckSpan.setSpellCheckInProgress();
+ textInfos[textInfosCount++] = new TextInfo(word, mCookie, mIds[i]);
+ }
+ }
+
+ if (textInfosCount > 0) {
+ if (textInfosCount < mLength) {
+ TextInfo[] textInfosCopy = new TextInfo[textInfosCount];
+ System.arraycopy(textInfos, 0, textInfosCopy, 0, textInfosCount);
+ textInfos = textInfosCopy;
+ }
+ spellCheckerSession.getSuggestions(textInfos, SuggestionSpan.SUGGESTIONS_MAX_SIZE,
+ false /* TODO Set sequentialWords to true for initial spell check */);
+ }
+ }
+
+ @Override
+ public void onGetSuggestions(SuggestionsInfo[] results) {
+ final Editable editable = (Editable) mTextView.getText();
+ for (int i = 0; i < results.length; i++) {
+ SuggestionsInfo suggestionsInfo = results[i];
+ if (suggestionsInfo.getCookie() != mCookie) continue;
+
+ final int sequenceNumber = suggestionsInfo.getSequence();
+ // Starting from the end, to limit the number of array copy while removing
+ for (int j = mLength - 1; j >= 0; j--) {
+ if (sequenceNumber == mIds[j]) {
+ SpellCheckSpan spellCheckSpan = mSpellCheckSpans[j];
+ final int attributes = suggestionsInfo.getSuggestionsAttributes();
+ boolean isInDictionary =
+ ((attributes & SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY) > 0);
+ boolean looksLikeTypo =
+ ((attributes & SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO) > 0);
+
+ if (DEBUG_SPELL_CHECK) {
+ final int start = editable.getSpanStart(spellCheckSpan);
+ final int end = editable.getSpanEnd(spellCheckSpan);
+ Log.d(LOG_TAG, "Result sequence=" + suggestionsInfo.getSequence() + " " +
+ editable.subSequence(start, end) +
+ "\t" + (isInDictionary?"IN_DICT" : "NOT_DICT") +
+ "\t" + (looksLikeTypo?"TYPO" : "NOT_TYPO"));
+ }
+
+ if (!isInDictionary && looksLikeTypo) {
+ String[] suggestions = getSuggestions(suggestionsInfo);
+ if (suggestions.length > 0) {
+ SuggestionSpan suggestionSpan = new SuggestionSpan(
+ mTextView.getContext(), suggestions,
+ SuggestionSpan.FLAG_EASY_CORRECT |
+ SuggestionSpan.FLAG_MISSPELLED);
+ final int start = editable.getSpanStart(spellCheckSpan);
+ final int end = editable.getSpanEnd(spellCheckSpan);
+ editable.setSpan(suggestionSpan, start, end,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ // TODO limit to the word rectangle region
+ mTextView.invalidate();
+
+ if (DEBUG_SPELL_CHECK) {
+ String suggestionsString = "";
+ for (String s : suggestions) { suggestionsString += s + "|"; }
+ Log.d(LOG_TAG, " Suggestions for " + sequenceNumber + " " +
+ editable.subSequence(start, end)+ " " + suggestionsString);
+ }
+ }
+ }
+ editable.removeSpan(spellCheckSpan);
+ }
+ }
+ }
+ }
+
+ private static String[] getSuggestions(SuggestionsInfo suggestionsInfo) {
+ final int len = Math.max(0, suggestionsInfo.getSuggestionsCount());
+ String[] suggestions = new String[len];
+ for (int j = 0; j < len; ++j) {
+ suggestions[j] = suggestionsInfo.getSuggestionAt(j);
+ }
+ return suggestions;
+ }
+}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 4143383..4fcb358 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -41,9 +41,15 @@ import com.android.internal.R;
/**
* A Switch is a two-state toggle switch widget that can select between two
* options. The user may drag the "thumb" back and forth to choose the selected option,
- * or simply tap to toggle as if it were a checkbox.
+ * or simply tap to toggle as if it were a checkbox. The {@link #setText(CharSequence) text}
+ * property controls the text displayed in the label for the switch, whereas the
+ * {@link #setTextOff(CharSequence) off} and {@link #setTextOn(CharSequence) on} text
+ * controls the text on the thumb. Similarly, the
+ * {@link #setTextAppearance(android.content.Context, int) textAppearance} and the related
+ * setTypeface() methods control the typeface and style of label text, whereas the
+ * {@link #setSwitchTextAppearance(android.content.Context, int) switchTextAppearance} and
+ * the related seSwitchTypeface() methods control that of the thumb.
*
- * @hide
*/
public class Switch extends CompoundButton {
private static final int TOUCH_MODE_IDLE = 0;
@@ -132,8 +138,8 @@ public class Switch extends CompoundButton {
TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.Switch, defStyle, 0);
- mThumbDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_switchThumb);
- mTrackDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_switchTrack);
+ mThumbDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_thumb);
+ mTrackDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_track);
mTextOn = a.getText(com.android.internal.R.styleable.Switch_textOn);
mTextOff = a.getText(com.android.internal.R.styleable.Switch_textOff);
mThumbTextPadding = a.getDimensionPixelSize(
@@ -146,7 +152,7 @@ public class Switch extends CompoundButton {
int appearance = a.getResourceId(
com.android.internal.R.styleable.Switch_switchTextAppearance, 0);
if (appearance != 0) {
- setSwitchTextAppearance(appearance);
+ setSwitchTextAppearance(context, appearance);
}
a.recycle();
@@ -162,9 +168,9 @@ public class Switch extends CompoundButton {
* Sets the switch text color, size, style, hint color, and highlight color
* from the specified TextAppearance resource.
*/
- public void setSwitchTextAppearance(int resid) {
+ public void setSwitchTextAppearance(Context context, int resid) {
TypedArray appearance =
- getContext().obtainStyledAttributes(resid,
+ context.obtainStyledAttributes(resid,
com.android.internal.R.styleable.TextAppearance);
ColorStateList colors;
@@ -174,6 +180,9 @@ public class Switch extends CompoundButton {
TextAppearance_textColor);
if (colors != null) {
mTextColors = colors;
+ } else {
+ // If no color set in TextAppearance, default to the view's textColor
+ mTextColors = getTextColors();
}
ts = appearance.getDimensionPixelSize(com.android.internal.R.styleable.
@@ -244,7 +253,7 @@ public class Switch extends CompoundButton {
}
/**
- * Sets the typeface and style in which the text should be displayed on the switch.
+ * Sets the typeface in which the text should be displayed on the switch.
* Note that not all Typeface families actually have bold and italic
* variants, so you may need to use
* {@link #setSwitchTypeface(Typeface, int)} to get the appearance
@@ -263,18 +272,14 @@ public class Switch extends CompoundButton {
}
/**
- * Returns the text for when the button is in the checked state.
- *
- * @return The text.
+ * Returns the text displayed when the button is in the checked state.
*/
public CharSequence getTextOn() {
return mTextOn;
}
/**
- * Sets the text for when the button is in the checked state.
- *
- * @param textOn The text.
+ * Sets the text displayed when the button is in the checked state.
*/
public void setTextOn(CharSequence textOn) {
mTextOn = textOn;
@@ -282,18 +287,14 @@ public class Switch extends CompoundButton {
}
/**
- * Returns the text for when the button is not in the checked state.
- *
- * @return The text.
+ * Returns the text displayed when the button is not in the checked state.
*/
public CharSequence getTextOff() {
return mTextOff;
}
/**
- * Sets the text for when the button is not in the checked state.
- *
- * @param textOff The text.
+ * Sets the text displayed when the button is not in the checked state.
*/
public void setTextOff(CharSequence textOff) {
mTextOff = textOff;
@@ -582,8 +583,11 @@ public class Switch extends CompoundButton {
mThumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
mThumbDrawable.draw(canvas);
- mTextPaint.setColor(mTextColors.getColorForState(getDrawableState(),
- mTextColors.getDefaultColor()));
+ // mTextColors should not be null, but just in case
+ if (mTextColors != null) {
+ mTextPaint.setColor(mTextColors.getColorForState(getDrawableState(),
+ mTextColors.getDefaultColor()));
+ }
mTextPaint.drawableState = getDrawableState();
Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 662b964..e9662ae 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -61,11 +61,6 @@ import android.text.SpannedString;
import android.text.StaticLayout;
import android.text.TextDirectionHeuristic;
import android.text.TextDirectionHeuristics;
-import android.text.TextDirectionHeuristics.AnyStrong;
-import android.text.TextDirectionHeuristics.CharCount;
-import android.text.TextDirectionHeuristics.FirstStrong;
-import android.text.TextDirectionHeuristics.TextDirectionAlgorithm;
-import android.text.TextDirectionHeuristics.TextDirectionHeuristicImpl;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -88,10 +83,11 @@ import android.text.method.TransformationMethod2;
import android.text.method.WordIterator;
import android.text.style.ClickableSpan;
import android.text.style.ParagraphStyle;
+import android.text.style.SpellCheckSpan;
+import android.text.style.SuggestionRangeSpan;
import android.text.style.SuggestionSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.URLSpan;
-import android.text.style.UnderlineSpan;
import android.text.style.UpdateAppearance;
import android.text.util.Linkify;
import android.util.AttributeSet;
@@ -220,7 +216,6 @@ import java.util.HashMap;
* @attr ref android.R.styleable#TextView_imeActionLabel
* @attr ref android.R.styleable#TextView_imeActionId
* @attr ref android.R.styleable#TextView_editorExtras
- * @attr ref android.R.styleable#TextView_suggestionsEnabled
*/
@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
@@ -334,7 +329,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private int mTextEditSuggestionItemLayout;
private SuggestionsPopupWindow mSuggestionsPopupWindow;
private SuggestionRangeSpan mSuggestionRangeSpan;
- private boolean mSuggestionsEnabled = true;
private int mCursorDrawableRes;
private final Drawable[] mCursorDrawable = new Drawable[2];
@@ -356,6 +350,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private WordIterator mWordIterator;
+ private SpellChecker mSpellChecker;
+
// The alignment to pass to Layout, or null if not resolved.
private Layout.Alignment mLayoutAlignment;
@@ -826,10 +822,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mTextIsSelectable = a.getBoolean(attr, false);
break;
- case com.android.internal.R.styleable.TextView_suggestionsEnabled:
- mSuggestionsEnabled = a.getBoolean(attr, true);
- break;
-
case com.android.internal.R.styleable.TextView_textAllCaps:
allCaps = a.getBoolean(attr, false);
break;
@@ -2902,7 +2894,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
sp.removeSpan(cw);
}
- // hideControllers would do it, but it gets called after this method on rotation
sp.removeSpan(mSuggestionRangeSpan);
ss.text = sp;
@@ -3100,18 +3091,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
boolean needEditableForNotification = false;
+ boolean startSpellCheck = false;
if (mListeners != null && mListeners.size() != 0) {
needEditableForNotification = true;
}
- if (type == BufferType.EDITABLE || mInput != null ||
- needEditableForNotification) {
+ if (type == BufferType.EDITABLE || mInput != null || needEditableForNotification) {
Editable t = mEditableFactory.newEditable(text);
text = t;
setFilters(t, mFilters);
InputMethodManager imm = InputMethodManager.peekInstance();
if (imm != null) imm.restartInput(this);
+ startSpellCheck = true;
} else if (type == BufferType.SPANNABLE || mMovement != null) {
text = mSpannableFactory.newSpannable(text);
} else if (!(text instanceof CharWrapper)) {
@@ -3200,6 +3192,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
sendOnTextChanged(text, 0, oldlen, textLength);
onTextChanged(text, 0, oldlen, textLength);
+ if (startSpellCheck) {
+ updateSpellCheckSpans(0, textLength);
+ }
+
if (needEditableForNotification) {
sendAfterTextChanged((Editable) text);
}
@@ -4791,8 +4787,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
selEnd = getSelectionEnd();
if (selStart >= 0) {
- if (mHighlightPath == null)
- mHighlightPath = new Path();
+ if (mHighlightPath == null) mHighlightPath = new Path();
if (selStart == selEnd) {
if (isCursorVisible() &&
@@ -4998,6 +4993,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
} else {
// Selection extends across multiple lines -- the focused
// rect covers the entire width.
+ if (mHighlightPath == null) mHighlightPath = new Path();
if (mHighlightPathBogus) {
mHighlightPath.reset();
mLayout.getSelectionPath(selStart, selEnd, mHighlightPath);
@@ -5102,10 +5098,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
- boolean areSuggestionsShown = areSuggestionsShown();
boolean isInSelectionMode = mSelectionActionMode != null;
- if (areSuggestionsShown || isInSelectionMode) {
+ if (isInSelectionMode) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
KeyEvent.DispatcherState state = getKeyDispatcherState();
if (state != null) {
@@ -5118,10 +5113,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
state.handleUpEvent(event);
}
if (event.isTracking() && !event.isCanceled()) {
- if (areSuggestionsShown) {
- hideSuggestions();
- return true;
- }
if (isInSelectionMode) {
stopSelectionActionMode();
return true;
@@ -5285,10 +5276,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Has to be done on key down (and not on key up) to correctly be intercepted.
case KeyEvent.KEYCODE_BACK:
- if (areSuggestionsShown()) {
- hideSuggestions();
- return -1;
- }
if (mSelectionActionMode != null) {
stopSelectionActionMode();
return -1;
@@ -7113,8 +7100,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* to turn off ellipsizing.
*
* If {@link #setMaxLines} has been used to set two or more lines,
- * {@link TextUtils.TruncateAt#END} and {@link TextUtils.TruncateAt#MARQUEE}
- * are only supported (other ellipsizing types will not do anything).
+ * {@link android.text.TextUtils.TruncateAt#END} and
+ * {@link android.text.TextUtils.TruncateAt#MARQUEE}* are only supported
+ * (other ellipsizing types will not do anything).
*
* @attr ref android.R.styleable#TextView_ellipsize
*/
@@ -7376,7 +7364,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @param lengthAfter The length of the replacement modified text
*/
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
- // intentionally empty
+ // intentionally empty, template pattern method can be overridden by subclasses
}
/**
@@ -7388,6 +7376,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
*/
protected void onSelectionChanged(int selStart, int selEnd) {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED);
+ if (mSpellChecker != null) {
+ mSpellChecker.onSelectionChanged();
+ }
}
/**
@@ -7422,8 +7413,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
- private void sendBeforeTextChanged(CharSequence text, int start, int before,
- int after) {
+ private void sendBeforeTextChanged(CharSequence text, int start, int before, int after) {
if (mListeners != null) {
final ArrayList<TextWatcher> list = mListeners;
final int count = list.size();
@@ -7431,14 +7421,32 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
list.get(i).beforeTextChanged(text, start, before, after);
}
}
+
+ // The spans that are inside or intersect the modified region no longer make sense
+ removeIntersectingSpans(start, start + before, SpellCheckSpan.class);
+ removeIntersectingSpans(start, start + before, SuggestionSpan.class);
+ }
+
+ // Removes all spans that are inside or actually overlap the start..end range
+ private <T> void removeIntersectingSpans(int start, int end, Class<T> type) {
+ if (!(mText instanceof Editable)) return;
+ Editable text = (Editable) mText;
+
+ T[] spans = text.getSpans(start, end, type);
+ final int length = spans.length;
+ for (int i = 0; i < length; i++) {
+ final int s = text.getSpanStart(spans[i]);
+ final int e = text.getSpanEnd(spans[i]);
+ if (e == start || s == end) break;
+ text.removeSpan(spans[i]);
+ }
}
/**
* Not private so it can be called from an inner class without going
* through a thunk.
*/
- void sendOnTextChanged(CharSequence text, int start, int before,
- int after) {
+ void sendOnTextChanged(CharSequence text, int start, int before, int after) {
if (mListeners != null) {
final ArrayList<TextWatcher> list = mListeners;
final int count = list.size();
@@ -7486,6 +7494,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
sendOnTextChanged(buffer, start, before, after);
onTextChanged(buffer, start, before, after);
+ // The WordIterator text change listener may be called after this one.
+ // Make sure this changed text is rescanned before the iterator is used on it.
+ getWordIterator().forceUpdate();
+ updateSpellCheckSpans(start, start + after);
+
// Hide the controllers if the amount of content changed
if (before != after) {
hideControllers();
@@ -7573,7 +7586,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
}
-
+
if (what instanceof ParcelableSpan) {
// If this is a span that can be sent to a remote process,
// the current extract editor would be interested in it.
@@ -7603,10 +7616,96 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
}
+
+ if (what instanceof SpellCheckSpan) {
+ if (newStart < 0) {
+ getSpellChecker().removeSpellCheckSpan((SpellCheckSpan) what);
+ } else if (oldStart < 0) {
+ getSpellChecker().addSpellCheckSpan((SpellCheckSpan) what);
+ }
+ }
+ }
+
+ /**
+ * Create new SpellCheckSpans on the modified region.
+ */
+ private void updateSpellCheckSpans(int start, int end) {
+ if (!(mText instanceof Editable) || !isSuggestionsEnabled()) return;
+ Editable text = (Editable) mText;
+
+ WordIterator wordIterator = getWordIterator();
+ wordIterator.setCharSequence(text);
+
+ // Move back to the beginning of the current word, if any
+ int wordStart = wordIterator.preceding(start);
+ int wordEnd;
+ if (wordStart == BreakIterator.DONE) {
+ wordEnd = wordIterator.following(start);
+ if (wordEnd != BreakIterator.DONE) {
+ wordStart = wordIterator.getBeginning(wordEnd);
+ }
+ } else {
+ wordEnd = wordIterator.getEnd(wordStart);
+ }
+ if (wordEnd == BreakIterator.DONE) {
+ return;
+ }
+
+ // Iterate over the newly added text and schedule new SpellCheckSpans
+ while (wordStart <= end) {
+ if (wordEnd >= start) {
+ // A word across the interval boundaries must remove boundary edition spans
+ if (wordStart < start && wordEnd > start) {
+ removeEditionSpansAt(start, text);
+ }
+
+ if (wordStart < end && wordEnd > end) {
+ removeEditionSpansAt(end, text);
+ }
+
+ // Do not create new boundary spans if they already exist
+ boolean createSpellCheckSpan = true;
+ if (wordEnd == start) {
+ SpellCheckSpan[] spellCheckSpans = text.getSpans(start, start,
+ SpellCheckSpan.class);
+ if (spellCheckSpans.length > 0) createSpellCheckSpan = false;
+ }
+
+ if (wordStart == end) {
+ SpellCheckSpan[] spellCheckSpans = text.getSpans(end, end,
+ SpellCheckSpan.class);
+ if (spellCheckSpans.length > 0) createSpellCheckSpan = false;
+ }
+
+ if (createSpellCheckSpan) {
+ text.setSpan(new SpellCheckSpan(), wordStart, wordEnd,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ }
+
+ // iterate word by word
+ wordEnd = wordIterator.following(wordEnd);
+ if (wordEnd == BreakIterator.DONE) return;
+ wordStart = wordIterator.getBeginning(wordEnd);
+ if (wordStart == BreakIterator.DONE) {
+ Log.e(LOG_TAG, "Unable to find word beginning from " + wordEnd + "in " + mText);
+ return;
+ }
+ }
+ }
+
+ private static void removeEditionSpansAt(int offset, Editable text) {
+ SuggestionSpan[] suggestionSpans = text.getSpans(offset, offset, SuggestionSpan.class);
+ for (int i = 0; i < suggestionSpans.length; i++) {
+ text.removeSpan(suggestionSpans[i]);
+ }
+ SpellCheckSpan[] spellCheckSpans = text.getSpans(offset, offset, SpellCheckSpan.class);
+ for (int i = 0; i < spellCheckSpans.length; i++) {
+ text.removeSpan(spellCheckSpans[i]);
+ }
}
- private class ChangeWatcher
- implements TextWatcher, SpanWatcher {
+ private class ChangeWatcher implements TextWatcher, SpanWatcher {
private CharSequence mBeforeText;
@@ -7631,8 +7730,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
TextView.this.handleTextChanged(buffer, start, before, after);
if (AccessibilityManager.getInstance(mContext).isEnabled() &&
- (isFocused() || isSelected() &&
- isShown())) {
+ (isFocused() || isSelected() && isShown())) {
sendAccessibilityEventTypeViewTextChanged(mBeforeText, start, before, after);
mBeforeText = null;
}
@@ -7642,8 +7740,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (DEBUG_EXTRACT) Log.v(LOG_TAG, "afterTextChanged: " + buffer);
TextView.this.sendAfterTextChanged(buffer);
- if (MetaKeyKeyListener.getMetaState(buffer,
- MetaKeyKeyListener.META_SELECTING) != 0) {
+ if (MetaKeyKeyListener.getMetaState(buffer, MetaKeyKeyListener.META_SELECTING) != 0) {
MetaKeyKeyListener.stopSelecting(TextView.this, buffer);
}
}
@@ -7841,17 +7938,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (mInputContentType != null) {
mInputContentType.enterDown = false;
}
+
hideControllers();
- removeAllSuggestionSpans();
}
startStopMarquee(hasWindowFocus);
}
- private void removeAllSuggestionSpans() {
+ private void removeSpans(int start, int end, Class<?> type) {
if (mText instanceof Editable) {
Editable editable = ((Editable) mText);
- SuggestionSpan[] spans = editable.getSpans(0, mText.length(), SuggestionSpan.class);
+ Object[] spans = editable.getSpans(start, end, type);
final int length = spans.length;
for (int i = 0; i < length; i++) {
editable.removeSpan(spans[i]);
@@ -7969,6 +8066,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
}
+
+ handled = true;
}
if (handled) {
@@ -7980,11 +8079,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
/**
+ * @return <code>true</code> if the cursor/current selection overlaps a {@link SuggestionSpan}.
+ */
+ private boolean isCursorInsideSuggestionSpan() {
+ if (!(mText instanceof Spannable)) return false;
+
+ SuggestionSpan[] suggestionSpans = ((Spannable) mText).getSpans(getSelectionStart(),
+ getSelectionEnd(), SuggestionSpan.class);
+ return (suggestionSpans.length > 0);
+ }
+
+ /**
* @return <code>true</code> if the cursor is inside an {@link SuggestionSpan} with
* {@link SuggestionSpan#FLAG_EASY_CORRECT} set.
*/
private boolean isCursorInsideEasyCorrectionSpan() {
- Spannable spannable = (Spannable) TextView.this.mText;
+ Spannable spannable = (Spannable) mText;
SuggestionSpan[] suggestionSpans = spannable.getSpans(getSelectionStart(),
getSelectionEnd(), SuggestionSpan.class);
for (int i = 0; i < suggestionSpans.length; i++) {
@@ -8445,16 +8555,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
selectionStart = ((Spanned) mText).getSpanStart(url);
selectionEnd = ((Spanned) mText).getSpanEnd(url);
} else {
- if (mWordIterator == null) {
- mWordIterator = new WordIterator();
- }
- // WordIerator handles text changes, this is a no-op if text in unchanged.
- mWordIterator.setCharSequence(mText);
+ WordIterator wordIterator = getWordIterator();
+ // WordIterator handles text changes, this is a no-op if text in unchanged.
+ wordIterator.setCharSequence(mText);
- selectionStart = mWordIterator.getBeginning(minOffset);
+ selectionStart = wordIterator.getBeginning(minOffset);
if (selectionStart == BreakIterator.DONE) return false;
- selectionEnd = mWordIterator.getEnd(maxOffset);
+ selectionEnd = wordIterator.getEnd(maxOffset);
if (selectionEnd == BreakIterator.DONE) return false;
}
@@ -8462,6 +8570,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
return true;
}
+ WordIterator getWordIterator() {
+ if (mWordIterator == null) {
+ mWordIterator = new WordIterator();
+ }
+ return mWordIterator;
+ }
+
+ private SpellChecker getSpellChecker() {
+ if (mSpellChecker == null) {
+ mSpellChecker = new SpellChecker(this);
+ }
+ return mSpellChecker;
+ }
+
private long getLastTouchOffsets() {
int minOffset, maxOffset;
@@ -8790,7 +8912,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final int offset = getOffsetForPosition(mLastDownPositionX, mLastDownPositionY);
stopSelectionActionMode();
Selection.setSelection((Spannable) mText, offset);
- getInsertionController().showImmediately();
+ getInsertionController().showWithActionPopup();
handled = true;
}
@@ -9061,23 +9183,49 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
- private static class SuggestionRangeSpan extends UnderlineSpan {
- // TODO themable, would be nice to make it a child class of TextAppearanceSpan, but
- // there is no way to have underline and TextAppearanceSpan.
- }
-
private class SuggestionsPopupWindow extends PinnedPopupWindow implements OnClickListener {
- private static final int MAX_NUMBER_SUGGESTIONS = 5;
+ private static final int MAX_NUMBER_SUGGESTIONS = SuggestionSpan.SUGGESTIONS_MAX_SIZE;
private static final int NO_SUGGESTIONS = -1;
+ private static final float AVERAGE_HIGHLIGHTS_PER_SUGGESTION = 1.4f;
private WordIterator mSuggestionWordIterator;
- private TextAppearanceSpan[] mHighlightSpans = new TextAppearanceSpan[0];
+ private TextAppearanceSpan[] mHighlightSpans = new TextAppearanceSpan
+ [(int) (AVERAGE_HIGHLIGHTS_PER_SUGGESTION * MAX_NUMBER_SUGGESTIONS)];
+ private boolean mCursorWasVisibleBeforeSuggestions;
+
+ private class CustomPopupWindow extends PopupWindow {
+ public CustomPopupWindow(Context context, int defStyle) {
+ super(context, null, defStyle);
+ }
+
+ @Override
+ public void dismiss() {
+ super.dismiss();
+
+ if ((mText instanceof Editable) && mSuggestionRangeSpan != null) {
+ ((Editable) mText).removeSpan(mSuggestionRangeSpan);
+ }
+
+ setCursorVisible(mCursorWasVisibleBeforeSuggestions);
+ if (hasInsertionController()) {
+ getInsertionController().show();
+ }
+ }
+ }
+
+ public SuggestionsPopupWindow() {
+ for (int i = 0; i < mHighlightSpans.length; i++) {
+ mHighlightSpans[i] = new TextAppearanceSpan(mContext,
+ android.R.style.TextAppearance_SuggestionHighlight);
+ }
+ mCursorWasVisibleBeforeSuggestions = mCursorVisible;
+ }
@Override
protected void createPopupWindow() {
- mPopupWindow = new PopupWindow(TextView.this.mContext, null,
+ mPopupWindow = new CustomPopupWindow(TextView.this.mContext,
com.android.internal.R.attr.textSuggestionsWindowStyle);
mPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
- mPopupWindow.setOutsideTouchable(true);
+ mPopupWindow.setFocusable(true);
mPopupWindow.setClippingEnabled(false);
}
@@ -9149,9 +9297,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void show() {
if (!(mText instanceof Editable)) return;
- updateSuggestions();
- super.show();
+ if (updateSuggestions()) {
+ mCursorWasVisibleBeforeSuggestions = mCursorVisible;
+ setCursorVisible(false);
+ super.show();
+ }
}
@Override
@@ -9174,12 +9325,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void hide() {
super.hide();
- if ((mText instanceof Editable) && mSuggestionRangeSpan != null) {
- ((Editable) mText).removeSpan(mSuggestionRangeSpan);
- }
}
- private void updateSuggestions() {
+ private boolean updateSuggestions() {
Spannable spannable = (Spannable)TextView.this.mText;
SuggestionSpan[] suggestionSpans = getSuggestionSpans();
@@ -9217,22 +9365,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
- if (totalNbSuggestions == 0) {
- // TODO Replace by final text, use a dedicated layout, add a fade out timer...
- TextView textView = (TextView) mContentView.getChildAt(0);
- textView.setText("No suggestions available");
- SuggestionInfo suggestionInfo = (SuggestionInfo) textView.getTag();
- suggestionInfo.spanStart = NO_SUGGESTIONS;
- totalNbSuggestions++;
- } else {
- if (mSuggestionRangeSpan == null) mSuggestionRangeSpan = new SuggestionRangeSpan();
- ((Editable) mText).setSpan(mSuggestionRangeSpan, spanUnionStart, spanUnionEnd,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ if (totalNbSuggestions == 0) return false;
- for (int i = 0; i < totalNbSuggestions; i++) {
- final TextView textView = (TextView) mContentView.getChildAt(i);
- highlightTextDifferences(textView, spanUnionStart, spanUnionEnd);
- }
+ if (mSuggestionRangeSpan == null) mSuggestionRangeSpan = new SuggestionRangeSpan();
+ ((Editable) mText).setSpan(mSuggestionRangeSpan, spanUnionStart, spanUnionEnd,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ for (int i = 0; i < totalNbSuggestions; i++) {
+ final TextView textView = (TextView) mContentView.getChildAt(i);
+ highlightTextDifferences(textView, spanUnionStart, spanUnionEnd);
}
for (int i = 0; i < totalNbSuggestions; i++) {
@@ -9241,6 +9382,27 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
for (int i = totalNbSuggestions; i < MAX_NUMBER_SUGGESTIONS; i++) {
mContentView.getChildAt(i).setVisibility(GONE);
}
+
+ return true;
+ }
+
+ private void onDictionarySuggestionsReceived(String[] suggestions) {
+ if (suggestions.length == 0) {
+ // TODO Actual implementation of this feature
+ suggestions = new String[] {"Add to dictionary"};
+ }
+
+ WordIterator wordIterator = getWordIterator();
+ wordIterator.setCharSequence(mText);
+
+ final int pos = getSelectionStart();
+ int wordStart = wordIterator.getBeginning(pos);
+ int wordEnd = wordIterator.getEnd(pos);
+
+ SuggestionSpan suggestionSpan = new SuggestionSpan(getContext(), suggestions, 0);
+ ((Editable) mText).setSpan(suggestionSpan, wordStart, wordEnd,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ show();
}
private long[] getWordLimits(CharSequence text) {
@@ -9401,7 +9563,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final int spanEnd = suggestionInfo.spanEnd;
if (spanStart != NO_SUGGESTIONS) {
// SuggestionSpans are removed by replace: save them before
- Editable editable = ((Editable) mText);
+ Editable editable = (Editable) mText;
SuggestionSpan[] suggestionSpans = editable.getSpans(spanStart, spanEnd,
SuggestionSpan.class);
final int length = suggestionSpans.length;
@@ -9420,7 +9582,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final String suggestion = textView.getText().subSequence(
suggestionStart, suggestionEnd).toString();
final String originalText = mText.subSequence(spanStart, spanEnd).toString();
- ((Editable) mText).replace(spanStart, spanEnd, suggestion);
+ editable.replace(spanStart, spanEnd, suggestion);
+
+ // A replacement on a misspelled text removes the misspelled flag.
+ // TODO restore the flag if the misspelled word is selected back?
+ int suggestionSpanFlags = suggestionInfo.suggestionSpan.getFlags();
+ if ((suggestionSpanFlags & SuggestionSpan.FLAG_MISSPELLED) > 0) {
+ suggestionSpanFlags &= ~(SuggestionSpan.FLAG_MISSPELLED);
+ suggestionSpanFlags &= ~(SuggestionSpan.FLAG_EASY_CORRECT);
+ suggestionInfo.suggestionSpan.setFlags(suggestionSpanFlags);
+ }
// Notify source IME of the suggestion pick. Do this before swaping texts.
if (!TextUtils.isEmpty(
@@ -9463,61 +9634,48 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mSuggestionsPopupWindow.show();
}
- void hideSuggestions() {
+ boolean areSuggestionsShown() {
+ return mSuggestionsPopupWindow != null && mSuggestionsPopupWindow.isShowing();
+ }
+
+ void onDictionarySuggestionsReceived(String[] suggestions) {
if (mSuggestionsPopupWindow != null) {
- mSuggestionsPopupWindow.hide();
+ mSuggestionsPopupWindow.onDictionarySuggestionsReceived(suggestions);
}
}
- boolean areSuggestionsShown() {
- return mSuggestionsPopupWindow != null && mSuggestionsPopupWindow.isShowing();
- }
-
/**
- * Some parts of the text can have alternate suggestion text attached. This is typically done by
- * the IME by adding {@link SuggestionSpan}s to the text.
+ * Return whether or not suggestions are enabled on this TextView. The suggestions are generated
+ * by the IME or by the spell checker as the user types. This is done by adding
+ * {@link SuggestionSpan}s to the text.
*
* When suggestions are enabled (default), this list of suggestions will be displayed when the
- * user double taps on these parts of the text. No suggestions are displayed when this value is
- * false. Use {@link #setSuggestionsEnabled(boolean)} to change this value.
- *
- * Note that suggestions are only enabled for a subset of input types. In addition to setting
- * this flag to <code>true</code> using {@link #setSuggestionsEnabled(boolean)} or the
- * <code>android:suggestionsEnabled</code> xml attribute, this method will return
- * <code>true</code> only if the class of your input type is {@link InputType#TYPE_CLASS_TEXT}.
- * In addition, the type variation must also be one of
+ * user asks for them on these parts of the text. This value depends on the inputType of this
+ * TextView.
+ *
+ * The class of the input type must be {@link InputType#TYPE_CLASS_TEXT}.
+ *
+ * In addition, the type variation must be one of
* {@link InputType#TYPE_TEXT_VARIATION_NORMAL},
* {@link InputType#TYPE_TEXT_VARIATION_EMAIL_SUBJECT},
* {@link InputType#TYPE_TEXT_VARIATION_LONG_MESSAGE},
* {@link InputType#TYPE_TEXT_VARIATION_SHORT_MESSAGE} or
* {@link InputType#TYPE_TEXT_VARIATION_WEB_EDIT_TEXT}.
*
- * @return true if the suggestions popup window is enabled.
+ * And finally, the {@link InputType#TYPE_TEXT_FLAG_NO_SUGGESTIONS} flag must <i>not</i> be set.
*
- * @attr ref android.R.styleable#TextView_suggestionsEnabled
+ * @return true if the suggestions popup window is enabled, based on the inputType.
*/
public boolean isSuggestionsEnabled() {
- if (!mSuggestionsEnabled) return false;
if ((mInputType & InputType.TYPE_MASK_CLASS) != InputType.TYPE_CLASS_TEXT) return false;
+ if ((mInputType & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) > 0) return false;
+
final int variation = mInputType & EditorInfo.TYPE_MASK_VARIATION;
- if (variation == EditorInfo.TYPE_TEXT_VARIATION_NORMAL ||
+ return (variation == EditorInfo.TYPE_TEXT_VARIATION_NORMAL ||
variation == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_SUBJECT ||
variation == EditorInfo.TYPE_TEXT_VARIATION_LONG_MESSAGE ||
variation == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE ||
- variation == EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) return true;
-
- return false;
- }
-
- /**
- * Enables or disables the suggestion popup. See {@link #isSuggestionsEnabled()}.
- *
- * @param enabled Whether or not suggestions are enabled.
- *
- * @attr ref android.R.styleable#TextView_suggestionsEnabled
- */
- public void setSuggestionsEnabled(boolean enabled) {
- mSuggestionsEnabled = enabled;
+ variation == EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
}
/**
@@ -9787,11 +9945,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void show() {
boolean canPaste = canPaste();
- boolean suggestionsEnabled = isSuggestionsEnabled();
+ boolean canSuggest = isSuggestionsEnabled() && isCursorInsideSuggestionSpan();
mPasteTextView.setVisibility(canPaste ? View.VISIBLE : View.GONE);
- mReplaceTextView.setVisibility(suggestionsEnabled ? View.VISIBLE : View.GONE);
+ mReplaceTextView.setVisibility(canSuggest ? View.VISIBLE : View.GONE);
- if (!canPaste && !suggestionsEnabled) return;
+ if (!canPaste && !canSuggest) return;
super.show();
}
@@ -9802,6 +9960,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
onTextContextMenuItem(ID_PASTE);
hide();
} else if (view == mReplaceTextView) {
+ final int middle = (getSelectionStart() + getSelectionEnd()) / 2;
+ stopSelectionActionMode();
+ Selection.setSelection((Spannable) mText, middle);
showSuggestions();
}
}
@@ -10133,17 +10294,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void show() {
super.show();
- hideAfterDelay();
- }
-
- public void show(int delayBeforeShowActionPopup) {
- show();
final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
- delayBeforeShowActionPopup = 0;
+ showActionPopupWindow(0);
}
- showActionPopupWindow(delayBeforeShowActionPopup);
+
+ hideAfterDelay();
+ }
+
+ public void showWithActionPopup() {
+ show();
+ showActionPopupWindow(0);
}
private void hideAfterDelay() {
@@ -10194,7 +10356,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Tapping on the handle dismisses the displayed action popup
mActionPopupWindow.hide();
} else {
- show(0);
+ showWithActionPopup();
}
}
}
@@ -10349,16 +10511,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private class InsertionPointCursorController implements CursorController {
- private static final int DELAY_BEFORE_PASTE_ACTION = 1600;
-
private InsertionHandleView mHandle;
public void show() {
- getHandle().show(DELAY_BEFORE_PASTE_ACTION);
+ getHandle().show();
}
- public void showImmediately() {
- getHandle().show(0);
+ public void showWithActionPopup() {
+ getHandle().showWithActionPopup();
}
public void hide() {
@@ -10390,7 +10550,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private class SelectionModifierCursorController implements CursorController {
- private static final int DELAY_BEFORE_REPLACE_ACTION = 1200;
+ private static final int DELAY_BEFORE_REPLACE_ACTION = 200; // milliseconds
// The cursor controller handles, lazily created when shown.
private SelectionStartHandleView mStartHandle;
private SelectionEndHandleView mEndHandle;
@@ -10423,7 +10583,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mEndHandle.setActionPopupWindow(mStartHandle.getActionPopupWindow());
hideInsertionPointCursorController();
- hideSuggestions();
}
public void hide() {
@@ -10535,7 +10694,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private void hideControllers() {
hideInsertionPointCursorController();
stopSelectionActionMode();
- hideSuggestions();
}
/**
@@ -10730,6 +10888,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
protected void resolveTextDirection() {
+ if (hasPasswordTransformationMethod()) {
+ mTextDir = TextDirectionHeuristics.LOCALE;
+ return;
+ }
+
// Always need to resolve layout direction first
final boolean defaultIsRtl = (getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL);
@@ -10879,8 +11042,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private int mAutoLinkMask;
private boolean mLinksClickable = true;
- private float mSpacingMult = 1;
- private float mSpacingAdd = 0;
+ private float mSpacingMult = 1.0f;
+ private float mSpacingAdd = 0.0f;
private boolean mTextIsSelectable = false;
private static final int LINES = 1;
diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java
index ba9de24..a754268 100644
--- a/core/java/android/widget/ToggleButton.java
+++ b/core/java/android/widget/ToggleButton.java
@@ -138,6 +138,8 @@ public class ToggleButton extends CompoundButton {
LayerDrawable layerDrawable = (LayerDrawable) backgroundDrawable;
mIndicatorDrawable =
layerDrawable.findDrawableByLayerId(com.android.internal.R.id.toggle);
+ } else {
+ mIndicatorDrawable = null;
}
}
diff --git a/core/java/com/android/internal/textservice/ITextServicesManager.aidl b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
index cc30c17..4882a12 100644
--- a/core/java/com/android/internal/textservice/ITextServicesManager.aidl
+++ b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
@@ -30,12 +30,15 @@ import android.view.textservice.SpellCheckerSubtype;
*/
interface ITextServicesManager {
SpellCheckerInfo getCurrentSpellChecker(String locale);
- SpellCheckerSubtype getCurrentSpellCheckerSubtype(String locale);
+ SpellCheckerSubtype getCurrentSpellCheckerSubtype(
+ String locale, boolean allowImplicitlySelectedSubtype);
oneway void getSpellCheckerService(String sciId, in String locale,
in ITextServicesSessionListener tsListener,
in ISpellCheckerSessionListener scListener, in Bundle bundle);
oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener);
oneway void setCurrentSpellChecker(String locale, String sciId);
oneway void setCurrentSpellCheckerSubtype(String locale, int hashCode);
+ oneway void setSpellCheckerEnabled(boolean enabled);
+ boolean isSpellCheckerEnabled();
SpellCheckerInfo[] getEnabledSpellCheckers();
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index cde9a49..e245960 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -23,7 +23,9 @@ import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
@@ -157,14 +159,33 @@ public class ActionMenuItemView extends LinearLayout
public void setTitle(CharSequence title) {
mTitle = title;
- // populate accessibility description with title
- setContentDescription(title);
-
mTextButton.setText(mTitle);
+ setContentDescription(mTitle);
updateTextButtonVisibility();
}
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ onPopulateAccessibilityEvent(event);
+ return true;
+ }
+
+ @Override
+ public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+ super.onPopulateAccessibilityEvent(event);
+ final CharSequence cdesc = getContentDescription();
+ if (!TextUtils.isEmpty(cdesc)) {
+ event.getText().add(cdesc);
+ }
+ }
+
+ @Override
+ public boolean dispatchHoverEvent(MotionEvent event) {
+ // Don't allow children to hover; we want this to be treated as a single component.
+ return onHoverEvent(event);
+ }
+
public boolean showsIcon() {
return true;
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index 246c4de..fba6a5a 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -30,6 +30,9 @@ import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ImageButton;
import java.util.ArrayList;
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index d613921..8d8c72c 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -22,6 +22,7 @@ import android.view.Gravity;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
/**
@@ -31,6 +32,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
private static final String TAG = "ActionMenuView";
static final int MIN_CELL_SIZE = 56; // dips
+ static final int GENERATED_ITEM_PADDING = 4; // dips
private MenuBuilder mMenu;
@@ -39,6 +41,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
private boolean mFormatItems;
private int mFormatItemsWidth;
private int mMinCellSize;
+ private int mGeneratedItemPadding;
private int mMeasuredExtraWidth;
public ActionMenuView(Context context) {
@@ -48,7 +51,9 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
public ActionMenuView(Context context, AttributeSet attrs) {
super(context, attrs);
setBaselineAligned(false);
- mMinCellSize = (int) (MIN_CELL_SIZE * context.getResources().getDisplayMetrics().density);
+ final float density = context.getResources().getDisplayMetrics().density;
+ mMinCellSize = (int) (MIN_CELL_SIZE * density);
+ mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density);
}
public void setPresenter(ActionMenuPresenter presenter) {
@@ -133,8 +138,15 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
final View child = getChildAt(i);
if (child.getVisibility() == GONE) continue;
+ final boolean isGeneratedItem = child instanceof ActionMenuItemView;
visibleItemCount++;
+ if (isGeneratedItem) {
+ // Reset padding for generated menu item views; it may change below
+ // and views are recycled.
+ child.setPadding(mGeneratedItemPadding, 0, mGeneratedItemPadding, 0);
+ }
+
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
lp.expanded = false;
lp.extraPixels = 0;
@@ -142,6 +154,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
lp.expandable = false;
lp.leftMargin = 0;
lp.rightMargin = 0;
+ lp.preventEdgeOffset = isGeneratedItem && ((ActionMenuItemView) child).hasText();
// Overflow always gets 1 cell. No more, no less.
final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
@@ -158,6 +171,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
if (cellsUsed == 1) smallestItemsAt |= (1 << i);
}
+ // When we have overflow and a single expanded (text) item, we want to try centering it
+ // visually in the available space even though overflow consumes some of it.
+ final boolean centerSingleExpandedItem = hasOverflow && visibleItemCount == 2;
+
// Divide space for remaining cells if we have items that can expand.
// Try distributing whole leftover cells to smaller items first.
@@ -184,16 +201,27 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
}
}
- if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop.
-
// Items that get expanded will always be in the set of smallest items when we're done.
smallestItemsAt |= minCellsAt;
- for (int i = 0; i < childCount; i++) {
- if ((minCellsAt & (1 << i)) == 0) continue;
+ if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop.
+
+ // We have enough cells, all minimum size items will be incremented.
+ minCells++;
+ for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ if ((minCellsAt & (1 << i)) == 0) {
+ // If this item is already at our small item count, mark it for later.
+ if (lp.cellsUsed == minCells) smallestItemsAt |= 1 << i;
+ continue;
+ }
+
+ if (centerSingleExpandedItem && lp.preventEdgeOffset && cellsRemaining == 1) {
+ // Add padding to this item such that it centers.
+ child.setPadding(mGeneratedItemPadding + cellSize, 0, mGeneratedItemPadding, 0);
+ }
lp.cellsUsed++;
lp.expanded = true;
cellsRemaining--;
@@ -207,16 +235,18 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
final boolean singleItem = !hasOverflow && visibleItemCount == 1;
if (cellsRemaining > 0 && smallestItemsAt != 0 &&
- (cellsRemaining < visibleItemCount - 1 || singleItem)) {
+ (cellsRemaining < visibleItemCount - 1 || singleItem || maxCellsUsed > 1)) {
float expandCount = Long.bitCount(smallestItemsAt);
if (!singleItem) {
// The items at the far edges may only expand by half in order to pin to either side.
if ((smallestItemsAt & 1) != 0) {
- expandCount -= 0.5f;
+ LayoutParams lp = (LayoutParams) getChildAt(0).getLayoutParams();
+ if (!lp.preventEdgeOffset) expandCount -= 0.5f;
}
if ((smallestItemsAt & (1 << (childCount - 1))) != 0) {
- expandCount -= 0.5f;
+ LayoutParams lp = ((LayoutParams) getChildAt(childCount - 1).getLayoutParams());
+ if (!lp.preventEdgeOffset) expandCount -= 0.5f;
}
}
@@ -232,7 +262,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
// If this is one of our views, expand and measure at the larger size.
lp.extraPixels = extraPixels;
lp.expanded = true;
- if (i == 0) {
+ if (i == 0 && !lp.preventEdgeOffset) {
// First item gets part of its new padding pushed out of sight.
// The last item will get this implicitly from layout.
lp.leftMargin = -extraPixels / 2;
@@ -482,6 +512,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
return result;
}
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ return false;
+ }
+
public interface ActionMenuChildView {
public boolean needsDividerBefore();
public boolean needsDividerAfter();
@@ -496,6 +530,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
public int extraPixels;
@ViewDebug.ExportedProperty(category = "layout")
public boolean expandable;
+ @ViewDebug.ExportedProperty(category = "layout")
+ public boolean preventEdgeOffset;
public boolean expanded;
diff --git a/core/java/com/android/internal/widget/AbsActionBarView.java b/core/java/com/android/internal/widget/AbsActionBarView.java
index ccbce3e..df2f717 100644
--- a/core/java/com/android/internal/widget/AbsActionBarView.java
+++ b/core/java/com/android/internal/widget/AbsActionBarView.java
@@ -56,6 +56,16 @@ public abstract class AbsActionBarView extends ViewGroup {
mSplitView = splitView;
}
+ /**
+ * @return Current visibility or if animating, the visibility being animated to.
+ */
+ public int getAnimatedVisibility() {
+ if (mVisibilityAnim != null) {
+ return mVisAnimListener.mFinalVisibility;
+ }
+ return getVisibility();
+ }
+
public void animateToVisibility(int visibility) {
if (mVisibilityAnim != null) {
mVisibilityAnim.cancel();
@@ -179,7 +189,7 @@ public abstract class AbsActionBarView extends ViewGroup {
protected class VisibilityAnimListener implements Animator.AnimatorListener {
private boolean mCanceled = false;
- private int mFinalVisibility;
+ int mFinalVisibility;
public VisibilityAnimListener withFinalVisibility(int visibility) {
mFinalVisibility = visibility;
@@ -199,6 +209,9 @@ public abstract class AbsActionBarView extends ViewGroup {
mVisibilityAnim = null;
setVisibility(mFinalVisibility);
+ if (mSplitView != null && mMenuView != null) {
+ mMenuView.setVisibility(mFinalVisibility);
+ }
}
@Override
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 45d38ae..4fccc32 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -33,6 +33,7 @@ import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -270,14 +271,14 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
}
@Override
- protected LayoutParams generateDefaultLayoutParams() {
+ protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
// Used by custom views if they don't supply layout params. Everything else
// added to an ActionBarContextView should have them already.
return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
@Override
- public LayoutParams generateLayoutParams(AttributeSet attrs) {
+ public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new MarginLayoutParams(getContext(), attrs);
}
@@ -321,7 +322,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
}
if (mCustomView != null) {
- LayoutParams lp = mCustomView.getLayoutParams();
+ ViewGroup.LayoutParams lp = mCustomView.getLayoutParams();
final int customWidthMode = lp.width != LayoutParams.WRAP_CONTENT ?
MeasureSpec.EXACTLY : MeasureSpec.AT_MOST;
final int customWidth = lp.width >= 0 ?
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 4efb29f..ff26d50 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -46,10 +46,12 @@ import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.Window;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -220,6 +222,8 @@ public class ActionBarView extends AbsActionBarView {
mExpandedHomeLayout = (HomeView) inflater.inflate(homeResId, this, false);
mExpandedHomeLayout.setUp(true);
mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener);
+ mExpandedHomeLayout.setContentDescription(getResources().getText(
+ R.string.action_bar_up_description));
mTitleStyleRes = a.getResourceId(R.styleable.ActionBar_titleTextStyle, 0);
mSubtitleStyleRes = a.getResourceId(R.styleable.ActionBar_subtitleTextStyle, 0);
@@ -397,6 +401,7 @@ public class ActionBarView extends AbsActionBarView {
if (oldParent != null && oldParent != mSplitView) {
oldParent.removeView(menuView);
}
+ menuView.setVisibility(getAnimatedVisibility());
mSplitView.addView(menuView, layoutParams);
} else {
// We'll add this later if we missed it this time.
@@ -679,7 +684,7 @@ public class ActionBarView extends AbsActionBarView {
}
@Override
- protected LayoutParams generateDefaultLayoutParams() {
+ protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
// Used by custom nav views if they don't supply layout params. Everything else
// added to an ActionBarView should have them already.
return new ActionBar.LayoutParams(DEFAULT_CUSTOM_GRAVITY);
@@ -806,7 +811,7 @@ public class ActionBarView extends AbsActionBarView {
HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout;
if (homeLayout.getVisibility() != GONE) {
- final LayoutParams lp = homeLayout.getLayoutParams();
+ final ViewGroup.LayoutParams lp = homeLayout.getLayoutParams();
int homeWidthSpec;
if (lp.width < 0) {
homeWidthSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST);
@@ -826,15 +831,18 @@ public class ActionBarView extends AbsActionBarView {
rightOfCenter = Math.max(0, rightOfCenter - mMenuView.getMeasuredWidth());
}
- if (mExpandedActionView == null) {
- boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE &&
- (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0;
- if (showTitle) {
- availableWidth = measureChildView(mTitleLayout, availableWidth,
- MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0);
- leftOfCenter = Math.max(0, leftOfCenter - mTitleLayout.getMeasuredWidth());
- }
+ if (mIndeterminateProgressView != null &&
+ mIndeterminateProgressView.getVisibility() != GONE) {
+ availableWidth = measureChildView(mIndeterminateProgressView, availableWidth,
+ childSpecHeight, 0);
+ rightOfCenter = Math.max(0,
+ rightOfCenter - mIndeterminateProgressView.getMeasuredWidth());
+ }
+ final boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE &&
+ (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0;
+
+ if (mExpandedActionView == null) {
switch (mNavigationMode) {
case ActionBar.NAVIGATION_MODE_LIST:
if (mListNavLayout != null) {
@@ -865,14 +873,6 @@ public class ActionBarView extends AbsActionBarView {
}
}
- if (mIndeterminateProgressView != null &&
- mIndeterminateProgressView.getVisibility() != GONE) {
- availableWidth = measureChildView(mIndeterminateProgressView, availableWidth,
- childSpecHeight, 0);
- rightOfCenter = Math.max(0,
- rightOfCenter - mIndeterminateProgressView.getMeasuredWidth());
- }
-
View customView = null;
if (mExpandedActionView != null) {
customView = mExpandedActionView;
@@ -882,7 +882,7 @@ public class ActionBarView extends AbsActionBarView {
}
if (customView != null) {
- final LayoutParams lp = generateLayoutParams(customView.getLayoutParams());
+ final ViewGroup.LayoutParams lp = generateLayoutParams(customView.getLayoutParams());
final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
(ActionBar.LayoutParams) lp : null;
@@ -922,6 +922,13 @@ public class ActionBarView extends AbsActionBarView {
customView.measure(
MeasureSpec.makeMeasureSpec(customNavWidth, customNavWidthMode),
MeasureSpec.makeMeasureSpec(customNavHeight, customNavHeightMode));
+ availableWidth -= horizontalMargin + customView.getMeasuredWidth();
+ }
+
+ if (mExpandedActionView == null && showTitle) {
+ availableWidth = measureChildView(mTitleLayout, availableWidth,
+ MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0);
+ leftOfCenter = Math.max(0, leftOfCenter - mTitleLayout.getMeasuredWidth());
}
if (mContentHeight <= 0) {
@@ -1011,7 +1018,7 @@ public class ActionBarView extends AbsActionBarView {
customView = mCustomNavView;
}
if (customView != null) {
- LayoutParams lp = customView.getLayoutParams();
+ ViewGroup.LayoutParams lp = customView.getLayoutParams();
final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
(ActionBar.LayoutParams) lp : null;
@@ -1089,12 +1096,12 @@ public class ActionBarView extends AbsActionBarView {
}
@Override
- public LayoutParams generateLayoutParams(AttributeSet attrs) {
+ public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new ActionBar.LayoutParams(getContext(), attrs);
}
@Override
- public LayoutParams generateLayoutParams(LayoutParams lp) {
+ public ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
if (lp == null) {
lp = generateDefaultLayoutParams();
}
@@ -1189,6 +1196,27 @@ public class ActionBarView extends AbsActionBarView {
}
@Override
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ onPopulateAccessibilityEvent(event);
+ return true;
+ }
+
+ @Override
+ public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+ super.onPopulateAccessibilityEvent(event);
+ final CharSequence cdesc = getContentDescription();
+ if (!TextUtils.isEmpty(cdesc)) {
+ event.getText().add(cdesc);
+ }
+ }
+
+ @Override
+ public boolean dispatchHoverEvent(MotionEvent event) {
+ // Don't allow children to hover; we want this to be treated as a single component.
+ return onHoverEvent(event);
+ }
+
+ @Override
protected void onFinishInflate() {
mUpView = findViewById(com.android.internal.R.id.up);
mIconView = (ImageView) findViewById(com.android.internal.R.id.home);
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 6b5ca50..4cf4afa 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -40,6 +40,7 @@
#include <utils/threads.h>
#include <ScopedUtfChars.h>
+#include <ScopedLocalRef.h>
#include <android_runtime/AndroidRuntime.h>
@@ -447,21 +448,26 @@ public:
}
void warnIfStillLive() {
- JNIEnv* env = javavm_to_jnienv(mVM);
if (mObject != NULL) {
// Okay, something is wrong -- we have a hard reference to a live death
// recipient on the VM side, but the list is being torn down.
- jclass clazz = env->GetObjectClass(mObject);
- jmethodID getnameMethod = env->GetMethodID(clazz, "getName", NULL);
- jstring nameString = (jstring) env->CallObjectMethod(clazz, getnameMethod);
- if (nameString) {
- ScopedUtfChars nameUtf(env, nameString);
- LOGW("BinderProxy is being destroyed but the application did not call "
- "unlinkToDeath to unlink all of its death recipients beforehand. "
- "Releasing leaked death recipient: %s", nameUtf.c_str());
- env->DeleteLocalRef(nameString);
- }
- env->DeleteLocalRef(clazz);
+ JNIEnv* env = javavm_to_jnienv(mVM);
+ ScopedLocalRef<jclass> classRef(env, env->GetObjectClass(mObject));
+ jmethodID getnameMethod = env->GetMethodID(classRef.get(),
+ "getName", "()Ljava/lang/String;");
+ if (getnameMethod) {
+ ScopedLocalRef<jstring> nameRef(env,
+ (jstring) env->CallObjectMethod(classRef.get(), getnameMethod));
+ ScopedUtfChars nameUtf(env, nameRef.get());
+ if (nameUtf.c_str() != NULL) {
+ LOGW("BinderProxy is being destroyed but the application did not call "
+ "unlinkToDeath to unlink all of its death recipients beforehand. "
+ "Releasing leaked death recipient: %s", nameUtf.c_str());
+ } else {
+ LOGW("BinderProxy being destroyed; unable to get DR object name");
+ env->ExceptionClear();
+ }
+ } else LOGW("BinderProxy being destroyed; unable to find DR class getName");
}
}
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index fb5e5fe..bcf8e71 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -222,12 +222,26 @@ static jint android_view_GLES20Canvas_saveLayer(JNIEnv* env, jobject clazz,
return renderer->saveLayer(left, top, right, bottom, paint, saveFlags);
}
+static jint android_view_GLES20Canvas_saveLayerClip(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, SkPaint* paint, jint saveFlags) {
+ const android::uirenderer::Rect& bounds(renderer->getClipBounds());
+ return renderer->saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom,
+ paint, saveFlags);
+}
+
static jint android_view_GLES20Canvas_saveLayerAlpha(JNIEnv* env, jobject clazz,
OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom,
jint alpha, jint saveFlags) {
return renderer->saveLayerAlpha(left, top, right, bottom, alpha, saveFlags);
}
+static jint android_view_GLES20Canvas_saveLayerAlphaClip(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, jint alpha, jint saveFlags) {
+ const android::uirenderer::Rect& bounds(renderer->getClipBounds());
+ return renderer->saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom,
+ alpha, saveFlags);
+}
+
// ----------------------------------------------------------------------------
// Clipping
// ----------------------------------------------------------------------------
@@ -759,7 +773,9 @@ static JNINativeMethod gMethods[] = {
{ "nGetSaveCount", "(I)I", (void*) android_view_GLES20Canvas_getSaveCount },
{ "nSaveLayer", "(IFFFFII)I", (void*) android_view_GLES20Canvas_saveLayer },
+ { "nSaveLayer", "(III)I", (void*) android_view_GLES20Canvas_saveLayerClip },
{ "nSaveLayerAlpha", "(IFFFFII)I", (void*) android_view_GLES20Canvas_saveLayerAlpha },
+ { "nSaveLayerAlpha", "(III)I", (void*) android_view_GLES20Canvas_saveLayerAlphaClip },
{ "nQuickReject", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_quickReject },
{ "nClipRect", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_clipRectF },
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 2dbb0b2..540c65a 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -582,6 +582,12 @@
android:label="@string/permlab_readPhoneState"
android:description="@string/permdesc_readPhoneState" />
+ <!-- Allows read access to privileged phone state.
+ @hide Used internally. -->
+ <permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
+ android:permissionGroup="android.permission-group.PHONE_CALLS"
+ android:protectionLevel="signatureOrSystem" />
+
<!-- ================================== -->
<!-- Permissions for sdcard interaction -->
<!-- ================================== -->
diff --git a/core/res/res/anim-sw600dp/activity_close_exit.xml b/core/res/res/anim-sw600dp/activity_close_exit.xml
deleted file mode 100644
index ba33640..0000000
--- a/core/res/res/anim-sw600dp/activity_close_exit.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
- <scale android:fromXScale="1.0" android:toXScale="1.1"
- android:fromYScale="1.0" android:toYScale="1.1"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/activity_open_enter.xml b/core/res/res/anim-sw600dp/activity_open_enter.xml
deleted file mode 100644
index c4b5ed7..0000000
--- a/core/res/res/anim-sw600dp/activity_open_enter.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="false"
- android:duration="@android:integer/config_shortAnimTime"/>
- <scale android:fromXScale="1.1" android:toXScale="1.0"
- android:fromYScale="1.1" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="false"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/wallpaper_close_enter.xml b/core/res/res/anim-sw600dp/wallpaper_close_enter.xml
deleted file mode 100644
index b65ecf4..0000000
--- a/core/res/res/anim-sw600dp/wallpaper_close_enter.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="true" android:shareInterpolator="false"
- android:zAdjustment="top">
-
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-
- <scale android:fromXScale="2.0" android:toXScale="1.0"
- android:fromYScale="0.1" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-
-</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/wallpaper_close_exit.xml b/core/res/res/anim-sw600dp/wallpaper_close_exit.xml
deleted file mode 100644
index fabfacc..0000000
--- a/core/res/res/anim-sw600dp/wallpaper_close_exit.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="false" android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/wallpaper_open_enter.xml b/core/res/res/anim-sw600dp/wallpaper_open_enter.xml
deleted file mode 100644
index 96bdf42..0000000
--- a/core/res/res/anim-sw600dp/wallpaper_open_enter.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="false" android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/accelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/wallpaper_open_exit.xml b/core/res/res/anim-sw600dp/wallpaper_open_exit.xml
deleted file mode 100644
index d7bcc5c..0000000
--- a/core/res/res/anim-sw600dp/wallpaper_open_exit.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="true" android:shareInterpolator="false"
- android:zAdjustment="top">
-
-
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/accelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="@android:integer/config_shortAnimTime"/>
-
-
- <scale android:fromXScale="1.0" android:toXScale="2.0"
- android:fromYScale="1.0" android:toYScale="0.1"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="@android:integer/config_shortAnimTime" />
-
-</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_close_enter.xml b/core/res/res/anim/activity_close_enter.xml
index c17786f..c759a83 100644
--- a/core/res/res/anim/activity_close_enter.xml
+++ b/core/res/res/anim/activity_close_enter.xml
@@ -21,4 +21,11 @@
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="@android:integer/config_shortAnimTime"/>
+ <scale android:fromXScale=".95" android:toXScale="1.0"
+ android:fromYScale=".95" android:toYScale="1.0"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:interpolator="@interpolator/accelerate_quint"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:duration="@android:integer/config_shortAnimTime"/>
+
</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_close_exit.xml b/core/res/res/anim/activity_close_exit.xml
index e560a41..384810f 100644
--- a/core/res/res/anim/activity_close_exit.xml
+++ b/core/res/res/anim/activity_close_exit.xml
@@ -18,16 +18,15 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
+ android:shareInterpolator="false" android:zAdjustment="top">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/accelerate_decelerate"
+ android:interpolator="@interpolator/decelerate_cubic"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="@android:integer/config_shortAnimTime"/>
- <scale android:fromXScale="1.0" android:toXScale="1.15"
- android:fromYScale="1.0" android:toYScale="1.15"
+ <scale android:fromXScale="1.0" android:toXScale="1.1"
+ android:fromYScale="1.0" android:toYScale="1.1"
android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_decelerate"
+ android:interpolator="@interpolator/decelerate_quint"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:duration="@android:integer/config_shortAnimTime"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_open_enter.xml b/core/res/res/anim/activity_open_enter.xml
index 55fcc0d..744153d 100644
--- a/core/res/res/anim/activity_open_enter.xml
+++ b/core/res/res/anim/activity_open_enter.xml
@@ -21,14 +21,14 @@
android:shareInterpolator="false"
android:zAdjustment="top">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/accelerate_decelerate"
+ android:interpolator="@interpolator/decelerate_cubic"
android:fillEnabled="true"
android:fillBefore="false" android:fillAfter="false"
android:duration="@android:integer/config_shortAnimTime"/>
- <scale android:fromXScale="1.15" android:toXScale="1.0"
- android:fromYScale="1.15" android:toYScale="1.0"
+ <scale android:fromXScale="1.1" android:toXScale="1.0"
+ android:fromYScale="1.1" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_decelerate"
+ android:interpolator="@interpolator/decelerate_quint"
android:fillEnabled="true"
android:fillBefore="false" android:fillAfter="false"
android:duration="@android:integer/config_shortAnimTime"/>
diff --git a/core/res/res/anim/activity_open_exit.xml b/core/res/res/anim/activity_open_exit.xml
index b386b8b..58e8816 100644
--- a/core/res/res/anim/activity_open_exit.xml
+++ b/core/res/res/anim/activity_open_exit.xml
@@ -21,4 +21,12 @@
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="false" android:fillAfter="false"
android:duration="@android:integer/config_shortAnimTime"/>
+ <scale android:fromXScale="1.0" android:toXScale=".95"
+ android:fromYScale="1.0" android:toYScale=".95"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:interpolator="@interpolator/decelerate_quint"
+ android:fillEnabled="true"
+ android:fillBefore="false" android:fillAfter="false"
+ android:duration="@android:integer/config_shortAnimTime"/>
+
</set> \ No newline at end of file
diff --git a/core/res/res/anim-sw600dp/activity_close_enter.xml b/core/res/res/anim/fast_fade_in.xml
index c17786f..296eb49 100644
--- a/core/res/res/anim-sw600dp/activity_close_enter.xml
+++ b/core/res/res/anim/fast_fade_in.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
-/*
-** Copyright 2009, The Android Open Source Project
+/* //device/apps/common/res/anim/fade_in.xml
+**
+** Copyright 2007, 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.
@@ -17,8 +18,8 @@
*/
-->
-<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@interpolator/decelerate_quad"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"
+ android:duration="80" />
diff --git a/core/res/res/anim-sw600dp/activity_open_exit.xml b/core/res/res/anim/fast_fade_out.xml
index b386b8b..c534771 100644
--- a/core/res/res/anim-sw600dp/activity_open_exit.xml
+++ b/core/res/res/anim/fast_fade_out.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
-/*
-** Copyright 2009, The Android Open Source Project
+/* //device/apps/common/res/anim/fade_out.xml
+**
+** Copyright 2007, 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.
@@ -17,8 +18,9 @@
*/
-->
-<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:fillEnabled="true" android:fillBefore="false" android:fillAfter="false"
- android:duration="@android:integer/config_shortAnimTime"/>
-</set> \ No newline at end of file
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@interpolator/accelerate_quad"
+ android:fromAlpha="1.0"
+ android:toAlpha="0.0"
+ android:duration="140"
+/>
diff --git a/core/res/res/anim/lock_screen_behind_enter.xml b/core/res/res/anim/lock_screen_behind_enter.xml
index 232096c..4f58be4 100644
--- a/core/res/res/anim/lock_screen_behind_enter.xml
+++ b/core/res/res/anim/lock_screen_behind_enter.xml
@@ -19,10 +19,18 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:detachWallpaper="true" android:shareInterpolator="false">
+ <scale
+ android:fromXScale="0.95" android:toXScale="1.0"
+ android:fromYScale="0.95" android:toYScale="1.0"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:fillEnabled="true" android:fillBefore="true"
+ android:interpolator="@interpolator/decelerate_cubic"
+ android:startOffset="@android:integer/config_shortAnimTime"
+ android:duration="@android:integer/config_shortAnimTime" />
<alpha
- android:fromAlpha="0" android:toAlpha="1.0"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true"
android:interpolator="@interpolator/decelerate_quad"
android:startOffset="@android:integer/config_shortAnimTime"
- android:duration="300"/>
+ android:duration="@android:integer/config_shortAnimTime"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/lock_screen_exit.xml b/core/res/res/anim/lock_screen_exit.xml
index c4b6fcb..a186126 100644
--- a/core/res/res/anim/lock_screen_exit.xml
+++ b/core/res/res/anim/lock_screen_exit.xml
@@ -19,16 +19,18 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
- <scale android:fromXScale="1.0" android:toXScale="1.15"
- android:fromYScale="1.0" android:toYScale="1.15"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="@android:integer/config_shortAnimTime"/>
+ android:zAdjustment="top"
+ android:shareInterpolator="false">
+ <scale
+ android:fromXScale="1.0" android:toXScale="1.15"
+ android:fromYScale="1.0" android:toYScale="1.15"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:fillEnabled="true" android:fillAfter="true"
+ android:interpolator="@interpolator/accelerate_quint"
+ android:duration="@android:integer/config_shortAnimTime" />
+ <alpha
+ android:fromAlpha="1.0" android:toAlpha="0"
+ android:fillEnabled="true" android:fillAfter="true"
+ android:interpolator="@interpolator/accelerate_quad"
+ android:duration="@android:integer/config_shortAnimTime"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/wallpaper_close_enter.xml b/core/res/res/anim/wallpaper_close_enter.xml
index 1cbe3ec..1ca5c0c 100644
--- a/core/res/res/anim/wallpaper_close_enter.xml
+++ b/core/res/res/anim/wallpaper_close_enter.xml
@@ -18,35 +18,17 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="true" android:shareInterpolator="false"
- android:zAdjustment="top">
-
- <alpha android:fromAlpha="0.0" android:toAlpha="0.5"
- android:interpolator="@interpolator/accelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="140"/>
- <alpha android:fromAlpha="0.5" android:toAlpha="1.0"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:startOffset="140"
- android:duration="140"/>
-
- <scale android:fromXScale="2.0" android:toXScale="1.5"
- android:fromYScale="0.01" android:toYScale="0.495"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/accelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="140"/>
- <scale android:fromXScale="1.5" android:toXScale="1.0"
- android:fromYScale="0.495" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:startOffset="140"
- android:duration="140"/>
-
+ android:shareInterpolator="false" android:zAdjustment="top">
+ <scale android:fromXScale="1.2" android:toXScale="1.0"
+ android:fromYScale=".8" android:toYScale="1.0"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/decelerate_quint"
+ android:startOffset="300"
+ android:duration="240" />
+ <alpha android:fromAlpha="0" android:toAlpha="1.0"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/decelerate_quad"
+ android:startOffset="300"
+ android:duration="300"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/wallpaper_close_exit.xml b/core/res/res/anim/wallpaper_close_exit.xml
index ebeae6e..7e0e05f 100644
--- a/core/res/res/anim/wallpaper_close_exit.xml
+++ b/core/res/res/anim/wallpaper_close_exit.xml
@@ -18,11 +18,15 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="false" android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
+ android:detachWallpaper="true" android:shareInterpolator="false" android:zAdjustment="normal">
+ <alpha android:fromAlpha="1.0" android:toAlpha="0"
+ android:fillEnabled="true" android:fillAfter="true"
android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:duration="280"/>
-</set>
+ android:duration="200"/>
+ <scale android:fromXScale="1.0" android:toXScale="0.95"
+ android:fromYScale="1.0" android:toYScale="0.95"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:fillEnabled="true" android:fillAfter="true"
+ android:interpolator="@interpolator/decelerate_quint"
+ android:duration="300" />
+</set> \ No newline at end of file
diff --git a/core/res/res/anim/wallpaper_open_enter.xml b/core/res/res/anim/wallpaper_open_enter.xml
index 411ecd6..6fdbd40 100644
--- a/core/res/res/anim/wallpaper_open_enter.xml
+++ b/core/res/res/anim/wallpaper_open_enter.xml
@@ -18,11 +18,17 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="false" android:shareInterpolator="false"
- android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/accelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="true"
- android:duration="280"/>
-</set>
+ android:detachWallpaper="true" android:shareInterpolator="false" android:zAdjustment="normal">
+ <scale android:fromXScale="0.95" android:toXScale="1.0"
+ android:fromYScale="0.95" android:toYScale="1.0"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/decelerate_quint"
+ android:startOffset="200"
+ android:duration="300" />
+ <alpha android:fromAlpha="0" android:toAlpha="1.0"
+ android:interpolator="@interpolator/decelerate_cubic"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:startOffset="200"
+ android:duration="300"/>
+</set> \ No newline at end of file
diff --git a/core/res/res/anim/wallpaper_open_exit.xml b/core/res/res/anim/wallpaper_open_exit.xml
index f9e0996..075831b 100644
--- a/core/res/res/anim/wallpaper_open_exit.xml
+++ b/core/res/res/anim/wallpaper_open_exit.xml
@@ -18,35 +18,16 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:detachWallpaper="true" android:shareInterpolator="false"
- android:zAdjustment="top">
-
-
- <alpha android:fromAlpha="1.0" android:toAlpha="0.5"
+ android:shareInterpolator="false" android:zAdjustment="top">
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:interpolator="@interpolator/accelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="140"/>
- <alpha android:fromAlpha="0.5" android:toAlpha="0.0"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:startOffset="140" android:duration="140"/>
-
-
- <scale android:fromXScale="1.0" android:toXScale="1.5"
- android:fromYScale="1.0" android:toYScale="0.495"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:duration="200" />
+ <scale android:fromXScale="1.0" android:toXScale="1.2"
+ android:fromYScale="1.0" android:toYScale="0.8"
android:pivotX="50%p" android:pivotY="50%p"
android:interpolator="@interpolator/accelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="true" android:fillAfter="false"
- android:duration="140" />
- <scale android:fromXScale="1.5" android:toXScale="2.0"
- android:fromYScale="0.495" android:toYScale="0.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_quint"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:startOffset="140" android:duration="140" />
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:duration="200" />
</set> \ No newline at end of file
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
index 1b65492..c5adc38 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
index 70c1e262..efcfa26 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
index 9fa19ef..490b6f5 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
index 8384797..57f2026 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/combobox_disabled.png b/core/res/res/drawable-hdpi/combobox_disabled.png
index 50eb45e..85fbc3c 100644
--- a/core/res/res/drawable-hdpi/combobox_disabled.png
+++ b/core/res/res/drawable-hdpi/combobox_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/combobox_nohighlight.png b/core/res/res/drawable-hdpi/combobox_nohighlight.png
index 9d60301..2de2abb 100644
--- a/core/res/res/drawable-hdpi/combobox_nohighlight.png
+++ b/core/res/res/drawable-hdpi/combobox_nohighlight.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
index 5579443..b161361 100644
--- a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
index 6674914..0a7b364 100644
--- a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_dark.9.png b/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_dark.9.png
new file mode 100644
index 0000000..53871a0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_light.9.png b/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_light.9.png
new file mode 100644
index 0000000..e3a0313
--- /dev/null
+++ b/core/res/res/drawable-hdpi/menu_hardkey_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_dark.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_dark.9.png
index da28a17..db23635 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_dark.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
index 015d30a..269a456 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.png
index df7f236..d997b36 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
index 8950f81..8ed5eb7 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
index 2af7e81..b59b492 100644
--- a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
index 20fc20a..57b8b31 100644
--- a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
index 74ce1ee..14d26a5 100644
--- a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
index 82b5671..e457a66 100644
--- a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
index 7220c2f..86c036d 100644
--- a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
index 5648af0..ddd3e74 100644
--- a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
index 633df1b..74e7e2e 100644
--- a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
index 1efa5eb..989a18c 100644
--- a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_adb.png b/core/res/res/drawable-hdpi/stat_sys_adb.png
index ddb8a71..8e15aba2 100644
--- a/core/res/res/drawable-hdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_left.png b/core/res/res/drawable-hdpi/text_select_handle_left.png
index 82cb640..e980857 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_left.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_left.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_middle.png b/core/res/res/drawable-hdpi/text_select_handle_middle.png
index a2a909a..603f497 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_middle.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_middle.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_right.png b/core/res/res/drawable-hdpi/text_select_handle_right.png
index 31f1c03..a5efe30 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_right.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_default_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_search_default_holo_dark.9.png
index 288b809..3cbafb9 100644
--- a/core/res/res/drawable-hdpi/textfield_search_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_default_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_search_default_holo_light.9.png
index 7866e06..7b01984 100644
--- a/core/res/res/drawable-hdpi/textfield_search_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_right_default_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_search_right_default_holo_dark.9.png
index 699552d..2b6340ac 100644
--- a/core/res/res/drawable-hdpi/textfield_search_right_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_right_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_right_default_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_search_right_default_holo_light.9.png
index 543afa2..49c8c05 100644
--- a/core/res/res/drawable-hdpi/textfield_search_right_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_right_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_dark.9.png
index e1a5e70..df1db0e 100644
--- a/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.png
index b778741..fbc46d0 100644
--- a/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_selected_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_search_selected_holo_dark.9.png
index 8a5d810..87e31e1 100644
--- a/core/res/res/drawable-hdpi/textfield_search_selected_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.png
index c423a74..080fc78 100644
--- a/core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/stat_sys_adb.png b/core/res/res/drawable-ldpi/stat_sys_adb.png
index 86b945b..aec8d90 100644
--- a/core/res/res/drawable-ldpi/stat_sys_adb.png
+++ b/core/res/res/drawable-ldpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
index 86debc4..abf6493 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
index b403e67..71b052b 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
index d06361a..87c62ff 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
index a4dae66..51821fa 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/combobox_disabled.png b/core/res/res/drawable-mdpi/combobox_disabled.png
index 94ad006..ac8a235 100644
--- a/core/res/res/drawable-mdpi/combobox_disabled.png
+++ b/core/res/res/drawable-mdpi/combobox_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/combobox_nohighlight.png b/core/res/res/drawable-mdpi/combobox_nohighlight.png
index 75d642c..9d60e26 100644
--- a/core/res/res/drawable-mdpi/combobox_nohighlight.png
+++ b/core/res/res/drawable-mdpi/combobox_nohighlight.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_dark.9.png b/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_dark.9.png
new file mode 100644
index 0000000..9d80b77
--- /dev/null
+++ b/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_light.9.png b/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_light.9.png
new file mode 100644
index 0000000..efa4325
--- /dev/null
+++ b/core/res/res/drawable-mdpi/menu_hardkey_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.png
index 0fc20e0..84d4c11 100644
--- a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.png
+++ b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
index 2b7a262..d922ef1 100644
--- a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
+++ b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_dark.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_dark.9.png
index 1410805..8c37c8d 100644
--- a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_dark.9.png
+++ b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
index 34d79f6..e442c28 100644
--- a/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ b/core/res/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
index 4f6f981..c0f1b20 100644
--- a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
index 07df4cb..0492a62 100644
--- a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
index fab8766..5e141d8 100644
--- a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
index f345311..07ba3f3 100644
--- a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
index 91a29fd..8c27069 100644
--- a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
index 024f0f2..d5f0490 100644
--- a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
index a388434..3e263e8 100644
--- a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
index e81bb06..6eb6d10 100644
--- a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_adb.png b/core/res/res/drawable-mdpi/stat_sys_adb.png
index 730d96f..ebedfa3 100644
--- a/core/res/res/drawable-mdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_left.png b/core/res/res/drawable-mdpi/text_select_handle_left.png
index d2cb710..0c3a0cc 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_left.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_left.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_middle.png b/core/res/res/drawable-mdpi/text_select_handle_middle.png
index db70e5a..f488bdd 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_middle.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_middle.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_right.png b/core/res/res/drawable-mdpi/text_select_handle_right.png
index be3d6ea..d3880c6 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_right.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.png
index 99840b1..039af2f 100644
--- a/core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.png
index 6bd9509..eb70db6 100644
--- a/core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.png
index 22493de..9b45bb7 100644
--- a/core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.png
index 02b491c..67b96e2 100644
--- a/core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.png
index 16c4c1a..b09f9dc 100644
--- a/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.png
index e474bc5..821ad91 100644
--- a/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.png
index c56ab9c..c3a7a2e 100644
--- a/core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.png
index a2e5944..e769cb5 100644
--- a/core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo.png b/core/res/res/drawable-nodpi/platlogo.png
index e619ed5..faabda1 100644
--- a/core/res/res/drawable-nodpi/platlogo.png
+++ b/core/res/res/drawable-nodpi/platlogo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
index a364792..aca0a23 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
index 5a52ad6..7dc088a 100644
--- a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
index e34ed85..a97c1d3 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
index f76d56b..25d139a 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/combobox_disabled.png b/core/res/res/drawable-xhdpi/combobox_disabled.png
index 9edf16e..e8ca0b0 100644
--- a/core/res/res/drawable-xhdpi/combobox_disabled.png
+++ b/core/res/res/drawable-xhdpi/combobox_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/combobox_nohighlight.png b/core/res/res/drawable-xhdpi/combobox_nohighlight.png
index 0b58042..d75bb06 100644
--- a/core/res/res/drawable-xhdpi/combobox_nohighlight.png
+++ b/core/res/res/drawable-xhdpi/combobox_nohighlight.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_dark.9.png b/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_dark.9.png
new file mode 100644
index 0000000..521e2d9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_light.9.png b/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_light.9.png
new file mode 100644
index 0000000..92e117d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_hardkey_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_dark.9.png b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_dark.9.png
index 3c8979f..9cf9173 100644
--- a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_dark.9.png
+++ b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
index 45b7adb..c8d8a17 100644
--- a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
+++ b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.png b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.png
index e258284..e3793f7 100644
--- a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.png
+++ b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
index 5c4bbf5..c0be34f 100644
--- a/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ b/core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
index 8f2b8ae..7294519 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
index 583e4a2..d43da4e 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
index b202d4e..eecac27 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
index 34fbbf0..eb91b2c 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
index c2df6b4..b1b8232 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
index fd202f4..0c15e12 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
index 9f2044d..6215e95 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
index a416478..0a67fff 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_adb.png b/core/res/res/drawable-xhdpi/stat_sys_adb.png
index 01eb61d..92f8dd4 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_left.png b/core/res/res/drawable-xhdpi/text_select_handle_left.png
index 6a10560..5fcbc52 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_left.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_left.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_middle.png b/core/res/res/drawable-xhdpi/text_select_handle_middle.png
index 71aaa85..05c2ca7 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_middle.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_middle.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_right.png b/core/res/res/drawable-xhdpi/text_select_handle_right.png
index 5339adc..ebf97c4 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_right.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_search_default_holo_dark.9.png
index 1a1a9c4..59a9a1b 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_default_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_default_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_search_default_holo_light.9.png
index 462cea6..5d472c8 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_default_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_dark.9.png
index 3e178b2..3dbef60 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_light.9.png
index 4c34b93..197c2bc 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_right_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_dark.9.png
index cf1b3ca..a765e5b 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_light.9.png
index 0ee383b..30a3237 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_right_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_selected_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_search_selected_holo_dark.9.png
index 42c019e..3c8ed1e 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_selected_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_selected_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_search_selected_holo_light.9.png
index 63efe71..f69ebc5 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_selected_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/layout-sw600dp/preference_list_content.xml b/core/res/res/layout-sw600dp/preference_list_content.xml
deleted file mode 100644
index 08f6453..0000000
--- a/core/res/res/layout-sw600dp/preference_list_content.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/layout/list_content.xml
-**
-** Copyright 2006, 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.
-*/
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_marginTop="@dimen/preference_screen_top_margin"
- android:layout_marginBottom="@dimen/preference_screen_bottom_margin"
- android:layout_weight="1">
-
- <LinearLayout
- android:id="@+id/headers"
- android:orientation="vertical"
- android:layout_width="0px"
- android:layout_height="match_parent"
- android:layout_marginRight="@dimen/preference_screen_side_margin_negative"
- android:layout_marginLeft="@dimen/preference_screen_side_margin"
- android:layout_weight="@integer/preferences_left_pane_weight">
-
- <ListView android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:paddingLeft="@dimen/preference_screen_header_padding_side"
- android:paddingRight="@dimen/preference_screen_header_padding_side"
- android:paddingTop="@dimen/preference_screen_header_vertical_padding"
- android:paddingBottom="@dimen/preference_screen_header_vertical_padding"
- android:scrollbarStyle="@integer/preference_screen_header_scrollbarStyle"
- android:drawSelectorOnTop="false"
- android:cacheColorHint="@android:color/transparent"
- android:listPreferredItemHeight="48dp"
- android:scrollbarAlwaysDrawVerticalTrack="true" />
-
- <FrameLayout android:id="@+id/list_footer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0" />
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/prefs_frame"
- android:layout_width="0px"
- android:layout_height="match_parent"
- android:layout_weight="@integer/preferences_right_pane_weight"
- android:layout_marginLeft="@dimen/preference_screen_side_margin"
- android:layout_marginRight="@dimen/preference_screen_side_margin"
- android:background="?attr/detailsElementBackground"
- android:orientation="vertical"
- android:visibility="gone" >
-
- <!-- Breadcrumb inserted here, in certain screen sizes. In others, it will be an
- empty layout or just padding, and PreferenceActivity will put the breadcrumbs in
- the action bar. -->
- <include layout="@layout/breadcrumbs_in_fragment" />
-
- <android.preference.PreferenceFrameLayout android:id="@+id/prefs"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- />
- </LinearLayout>
- </LinearLayout>
-
- <RelativeLayout android:id="@+id/button_bar"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_weight="0"
- android:visibility="gone">
-
- <Button android:id="@+id/back_button"
- android:layout_width="150dip"
- android:layout_height="wrap_content"
- android:layout_margin="5dip"
- android:layout_alignParentLeft="true"
- android:text="@string/back_button_label"
- />
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true">
-
- <Button android:id="@+id/skip_button"
- android:layout_width="150dip"
- android:layout_height="wrap_content"
- android:layout_margin="5dip"
- android:text="@string/skip_button_label"
- android:visibility="gone"
- />
-
- <Button android:id="@+id/next_button"
- android:layout_width="150dip"
- android:layout_height="wrap_content"
- android:layout_margin="5dip"
- android:text="@string/next_button_label"
- />
- </LinearLayout>
- </RelativeLayout>
-</LinearLayout>
diff --git a/core/res/res/layout/grant_credentials_permission.xml b/core/res/res/layout/grant_credentials_permission.xml
index 8b18454..3313590 100644
--- a/core/res/res/layout/grant_credentials_permission.xml
+++ b/core/res/res/layout/grant_credentials_permission.xml
@@ -24,7 +24,7 @@
android:layout_height="match_parent"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle"
- android:dividerPadding="16dip" >
+ android:dividerPadding="0dip" >
<!-- The list of packages that correspond to the requesting UID
and the account/authtokenType that is being requested -->
@@ -123,20 +123,20 @@
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
- android:layout_height="54dip"
+ android:layout_height="wrap_content"
style="?android:attr/buttonBarStyle">
<Button
- android:id="@+id/allow_button"
- android:text="@string/allow"
+ android:id="@+id/deny_button"
+ android:text="@string/deny"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
style="?android:attr/buttonBarButtonStyle" />
<Button
- android:id="@+id/deny_button"
- android:text="@string/deny"
+ android:id="@+id/allow_button"
+ android:text="@string/allow"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
index bc86ab7..12df99e 100644
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_password_landscape.xml
@@ -151,7 +151,6 @@
android:background="@drawable/lockscreen_password_field_dark"
android:textColor="?android:attr/textColorPrimary"
android:imeOptions="flagNoFullscreen|actionDone"
- android:suggestionsEnabled="false"
/>
<ImageView android:id="@+id/switch_ime_button"
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index 994c439..6145e47 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -114,7 +114,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff"
android:imeOptions="actionDone"
- android:suggestionsEnabled="false"/>
+ />
<ImageView android:id="@+id/switch_ime_button"
android:layout_width="wrap_content"
diff --git a/core/res/res/layout/preference_list_content.xml b/core/res/res/layout/preference_list_content.xml
index 62181b5..70bc59a 100644
--- a/core/res/res/layout/preference_list_content.xml
+++ b/core/res/res/layout/preference_list_content.xml
@@ -27,8 +27,6 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0px"
- android:layout_marginTop="@dimen/preference_screen_top_margin"
- android:layout_marginBottom="@dimen/preference_screen_bottom_margin"
android:layout_weight="1">
<LinearLayout
@@ -48,6 +46,7 @@
android:paddingRight="@dimen/preference_screen_header_padding_side"
android:paddingTop="@dimen/preference_screen_header_vertical_padding"
android:paddingBottom="@dimen/preference_screen_header_vertical_padding"
+ android:clipToPadding="false"
android:scrollbarStyle="@integer/preference_screen_header_scrollbarStyle"
android:drawSelectorOnTop="false"
android:cacheColorHint="@android:color/transparent"
@@ -63,11 +62,10 @@
<LinearLayout
android:id="@+id/prefs_frame"
+ style="?attr/preferencePanelStyle"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="@integer/preferences_right_pane_weight"
- android:layout_marginLeft="@dimen/preference_screen_side_margin"
- android:layout_marginRight="@dimen/preference_screen_side_margin"
android:orientation="vertical"
android:visibility="gone" >
diff --git a/core/res/res/layout/preference_list_content_single.xml b/core/res/res/layout/preference_list_content_single.xml
index 6902ffd..259869d 100644
--- a/core/res/res/layout/preference_list_content_single.xml
+++ b/core/res/res/layout/preference_list_content_single.xml
@@ -39,6 +39,9 @@
android:layout_height="0px"
android:layout_weight="1"
android:drawSelectorOnTop="false"
+ android:paddingLeft="@dimen/preference_fragment_padding_side"
+ android:paddingRight="@dimen/preference_fragment_padding_side"
+ android:scrollbarStyle="@integer/preference_fragment_scrollbarStyle"
android:cacheColorHint="@android:color/transparent"
android:listPreferredItemHeight="48dp"
android:scrollbarAlwaysDrawVerticalTrack="true" />
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index d881149..1186488 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -166,8 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (4270874999047767599) -->
- <skip />
+ <string name="httpErrorIO" msgid="4270874999047767599">"Die bediener kon nie kommunikeer nie. Probeer later weer."</string>
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
<!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
@@ -291,10 +290,8 @@
<!-- no translation found for permlab_sendSms (5600830612147671529) -->
<skip />
<string name="permdesc_sendSms" msgid="1946540351763502120">"Laat program toe om SMS-boodskappe te stuur. Kwaadwillige programme kan jou geld kos deur boodskappe sonder jou bevestiging te stuur."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"stuur sms-boodskappe met geen bestiging"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Laat program toe om SMS-boodskappe te stuur. Kwaadwillige programme kan jou geld kos deur boodskappe sonder jou bevestiging te stuur."</string>
<!-- no translation found for permlab_readSms (4085333708122372256) -->
<skip />
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Laat program toe om SMS-boodskappe te lees wat op jou tablet of SIM-kaart gestoor is. Kwaadwillige programme kan dalk jou vertroulike boodskappe lees."</string>
@@ -472,14 +469,10 @@
<skip />
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Laat \'n program toe om die kontak- (adres) data te wysig wat op jou tablet gestoor is. Kwaadwillige programme kan dit gebruik om jou kontakdata uit te vee of te wysig."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Laat \'n program toe om die kontakdata (adresse) te wysig wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kontakdata uit te vee of dit te wysig."</string>
- <!-- no translation found for permlab_readProfile (6824681438529842282) -->
- <skip />
- <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
- <skip />
- <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
- <skip />
- <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
- <skip />
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lees jou profieldata"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Laat die program toe om persoonlike profielinligting gestoor op jou selfoon, soos jou naam en kontakbesonderhede, te lees. Dit beteken dat die program jou kan identifiseer en jou profielinligting aan ander kan stuur."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"skryf na jou profieldata"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Laat die program toe om te verander of by te voeg tot die persoonlike profielinligting gestoor op jou selfoon, soos jou naam en kontakbesonderhede. Dit beteken dat ander programme jou kan identifiseer en jou profielinligting aan ander kan stuur."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lees kalenderafsprake plus vertroulike inligting"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Laat \'n program toe om alle kalenderafsprake te lees wat op jou tablet gestoor is, insluitend dié van vriende of kollegas. \'n Kwaadwillige program met dié toestemming kan persoonlike inligting uit hierdie kalenders uithaal sonder die eienaars se medewete."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Laat \'n program toe om alle kalendergebeure wat op jou foon gestoor is, insluitend dié van vriende of kollega\'s, te lees. \'n Kwaadwillige program met dié toestemming kan persoonlike inligting uit hierdie kalenders uithaal, sonder die eienaars se medewete."</string>
@@ -621,9 +614,8 @@
<!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
<skip />
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Laat \'n program toe om netwerksokke te skep."</string>
- <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
- <skip />
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Laat \'n program toe om die APN-instellings te wysig, soos die instaanbediener en poort van enige APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"verander/onderskep netwerkinstellings en die verkeer"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Laat \'n program toe om netwerkinstellings te verander en om die hele netwerkverkeer te onderskep en te inspekteer, bv. om die instaanbediener en poort van enige APN te verander. Skadelike programme kan netwerkpakkies monitor, herlei of verander sonder jou medewete."</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Laat \'n program toe om die status van netwerk-konnektiwiteit te verander."</string>
@@ -891,6 +883,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingevoer. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings sal jy gevra word om jou tablet met jou Google-aanmeldnaam te ontsluit."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd geteken. Na <xliff:g id="NUMBER_1">%d</xliff:g>meer onsuksesvolle pogings sal jy gevra word om jou foon met jou Google-aanmeldnaam te ontsluit."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer probeer om die tablet verkeerde te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle poging, sal die tablet terug gestel word nia die fabrieksverstek en alle gebruikerdata sal verlore wees."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer probeer om die foon verkeerde te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle poging sal die foon terug gestel word na die fabrieksverstek en alle gebruikerdata sal verlore wees."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Jy het die tablet <xliff:g id="NUMBER">%d</xliff:g> keer verkeerd probeer ontsluit. Die tablet sal nou terug gestel word na die fabrieksverstek."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Jy <xliff:g id="NUMBER">%d</xliff:g> keer probeer om die foon verkeerd te ontsluit. Die foon sal nou terug gestel word na die fabrieksvertek."</string>
<!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
<skip />
<!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
@@ -971,14 +967,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Laat die program toe om boodskappe by jou stemboodskappe se inkassie te voeg."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Wysig blaaier se geoligging-toestemmings"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Laat \'n program toe om die blaaier se geoligging-toestemmings te wysig. Kwaadwillige programme kan dit gebruik om liggingsinligting na arbitrêre webwerwe te stuur."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verifieer pakkies"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Laat die program toe om te verifieer of \'n pakkie installeerbaar is."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bind aan \'n pakkieverifieerder"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Laat die houer toe om versoeke te rig aan pakkieverifieerders. Behoort nooit nodig te wees vir normale programme nie."</string>
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -1003,16 +995,11 @@
<skip />
<!-- no translation found for search_go (8298016669822141719) -->
<skip />
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Soek"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Soeknavraag"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Maak navraag skoon"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Dien navraag in"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Stemsoektog"</string>
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string>
@@ -1134,7 +1121,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="replace" msgid="8333608224471746584">"Vervang"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Vervang"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Kies teks..."</string>
@@ -1172,10 +1159,8 @@
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Ongelukkig het <xliff:g id="APPLICATION">%1$s</xliff:g> gestop."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Ongelukkig het die proses <xliff:g id="PROCESS">%1$s</xliff:g> gestop."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> reageer nie."\n\n" Wil jy dit toemaak?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktiwiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> reageer nie."\n\n"Wil jy dit toemaak?"</string>
@@ -1196,6 +1181,10 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"Die program <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) het die selfopgelegde StrictMode-beleid geskend."</string>
<string name="smv_process" msgid="5120397012047462446">"Die proses <xliff:g id="PROCESS">%1$s</xliff:g> het die selfopgelegde StrictMode-beleid geskend."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android gradeer tans op..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimaliseer program <xliff:g id="NUMBER_0">%1$d</xliff:g> van <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Begin programme."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Voltooi herlaai."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> loop"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Kies wanneer om na program te wissel"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Wissel programme?"</string>
@@ -1219,11 +1208,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Kennisgewing-volume"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume. Tik om stilmodus te wissel."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Luitoon-volume. Tik om stilmodus te wissel."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Oproepvolume. Tik om stilmodus te wissel."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolume. Tik om stilmodus te wissel."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Kennisgewingvolume. Tik om stilmodus te wissel."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Luitoon se volume"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Oproepvolume"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolume"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Kennisgewing-volume"</string>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1247,8 +1236,7 @@
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
- <skip />
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kon nie Wi-Fi Direct begin nie"</string>
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
<!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
@@ -1267,8 +1255,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
+ <string name="sim_removed_message" msgid="2333164559970958645">"Die mobielnetwerk sal nie beskikbaar wees nie totdat jy weer begin met \'n geldige SIM-kaart."</string>
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
@@ -1308,7 +1295,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Kon nie USB-berging afskakel nie. Kontroleer of jy die USB-gasheer ontheg het, en probeer dan weer."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Skakel USB-berging aan"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"As jy USB-berging aanskakel, sal sekere programme wat jy gebruik, stop en dalk nie beskikbaar wees nie tot jy USB-berging afskakel."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-bewerking het misluk"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-handeling was onsuksesvol"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1418,8 +1405,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Ontheg tans SD-kaart..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Vee tans USB-berging uit..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Vee tans SD-kaart uit..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kon nie USB-berging uitvee nie."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Kon nie USB-berging uitvee nie."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kon nie USB-berging uitvee nie."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Kon nie SD-kaart uitvee nie."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kaart is verwyder voordat dit ontheg is."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-berging word tans gekontroleer."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-kaart word tans gekontroleer."</string>
@@ -1454,6 +1441,14 @@
<string name="switch_off" msgid="7249798614327155088">"af"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"gedruk"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nie gedruk nie"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Kanselleer"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Vee uit"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Klaar"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus verander"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invoersleutel"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Sleutel. Kopstuk nodig om sleutels te hoor, tydens tik van \'n wagwoord."</string>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1478,16 +1473,17 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Raak om te aktiveer"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G-datalimiet oorskry"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G-datalimiet oorskry"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiele datalimiet oorskry"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> meer as gespesifiseerde limiet"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> meer as gespesifiseerde limiet"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Agtergronddata is beperk"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Raak om beperking te verwyder"</string>
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
@@ -1524,6 +1520,5 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 651f7c6..871217a 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -166,8 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (4270874999047767599) -->
- <skip />
+ <string name="httpErrorIO" msgid="4270874999047767599">"አገልጋዩ መገናኘት አልቻለም፡፡ ኋላ ላይ እንደገና ሞክር፡፡"</string>
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
<!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
@@ -291,10 +290,8 @@
<!-- no translation found for permlab_sendSms (5600830612147671529) -->
<skip />
<string name="permdesc_sendSms" msgid="1946540351763502120">"ተንኮል አዘል ትግበራዎች ያለእርስዎ ማረጋገጫ ገንዘብ የሚያስወጣዎትንመልዕክቶች እየላኩ ነው።SMS መልዕክቶች ለመላክ ትግበራ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"ያለ ምንም ማረጋገጫ የSMS መልዕክቶች ላክ"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"SMS መልዕክቶች ለመላክ ትግበራ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ያለእርስዎ ማረጋገጫ ገንዘብ የሚያስወጣዎትን መልዕክቶች እየላኩ ነው።"</string>
<!-- no translation found for permlab_readSms (4085333708122372256) -->
<skip />
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"ትግበራ በጡባዊዎ ወይም SIM ካርድዎ ላይ SMS መልዕክቶችን ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ሚስጥራዊ መልዕክቶችዎን ሊያነቡ ይችላሉ።"</string>
@@ -472,14 +469,10 @@
<skip />
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"ትግበራ በጡባዊዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ውሂብ ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎን ለማጥፋት ወይም ለመቀየር ይህንመጠቀም ይችላሉ።"</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"ትግበራ በስልክዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ሁሉ ውሂብ ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎን ለማጥፋት ወይም ለመቀየር ይህንመጠቀም ይችላሉ።"</string>
- <!-- no translation found for permlab_readProfile (6824681438529842282) -->
- <skip />
- <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
- <skip />
- <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
- <skip />
- <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
- <skip />
+ <string name="permlab_readProfile" msgid="6824681438529842282">"የመገለጫ ውሂብዎን ያንብቡ"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"ትግበራ በመሣሪያዎ ላይ የተከማቸውን የግል የመገለጫ መረጃ፣ እንደ ስምዎ እና የዕውቂያ መረጃ ለማንበብ ይፈቅዳል። ይህ ማለት ትግበራው እርስዎን ለይቶ የመገለጫ መረጃዎን ለሌሎች መላክ ይችላል።"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"የአርስዎ መገለጫ ውሂብ ላይ ይፃፉ"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"ትግበራ በመሣሪያዎ ላይ የተከማቸውን የግል የመገለጫ መረጃ፣ እንደ ስምዎ እና የዕውቂያ መረጃ ለመለወጥ እና ለማከል ይፈቅዳል። ይህ ማለት ትግበራው እርስዎን ለይቶ የመገለጫ መረጃዎን ለሌሎች መላክ ይችላል።"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"የቀን መቁጠሪያ ክስተቶች ተጨማሪ ሚስጥራዊ መረጃ አንብብ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"ትግበራ በጡባዊዎ ላይ የተከማቸውን የቀን መቁጠሪያ ክስተቶች በሙሉ አብረው የሚሰሩትንም ሆነ የጓደኞችዎን ጨምሮ ለማንበብ ይፈቅዳል። ይህን ፈቃድ የያዘ ተንኮል አዘል ትግበራ ከባለቤቱ ዕውቅና ውጪ ከቀን አቆጣጠር ላይ የግል መረጃ ማውጣት ይችላል።\'"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"ትግበራ በስልክዎ ላይ የተከማቸውን የቀን መቁጠሪያ ክስተቶች በሙሉ አብረው የሚሰሩትንም ሆነ የጓደኞችዎን ጨምሮ ለማንበብ ይፈቅዳል። ይህን ፈቃድ የያዘ ተንኮል አዘል ትግበራ ከባለቤቱ ዕውቅና ውጪ ከቀን አቆጣጠር ላይ የግል መረጃ ማውጣት ይችላል።\'"</string>
@@ -621,9 +614,8 @@
<!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
<skip />
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"የአውታረመረብ ሶኬቶችን ለመፍጠር ትግበራይፈቅዳል።"</string>
- <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
- <skip />
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"ትግበራ እንደAPN ማንኛውም ወደቦች እና የእጅ አዙርለቀይር የAPN ቅንብሮችን ይፈቅዳል።"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"የአውታረ መረብ ቅንብሮች እና ትራፊክ ለውጥ/ አቋርጥ"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"ትግበራ የአውታረ መረብ ቅንብሮችን ለመለወጥ እና ሁሉንም የአውታረ መረብ ትራፊክ ለማቋረጥ እና ለመመርመር፣ ለምሳሌ የእጅ አዙሩን እና ማንኛውም የAPN ወደብ ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ያለእርስዎ እውቅና የአውታረ መረብ ፓኬቶችን ለመቆጣጠር፣ ለማዟዟር ወይም ለመቀየር ይችላሉ።"</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"ትግበራ የአውታረ መረብ ተያያዥነት ሁኔታ ለመለወጥ ይፈቅዳል።"</string>
@@ -891,6 +883,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"የእርስዎን PIN <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ አሳስተው አስገብተዋል። "\n\n"እባክዎ በ <xliff:g id="NUMBER_1">%d</xliff:g> ሰከንድ እንደገና ይሞክሩ።"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"የስርዓተጥለት መክፈቻዎን ተሳስተው <xliff:g id="NUMBER_0">%d</xliff:g>ጊዜዎች ስለዋል።ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪያልተሳካ ሙከራዎች በኋላ፣የGoogle ግባንበመጠቀም ጡባዊዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ ከ <xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"የመክፈቻ ስርዓተ ጥለቱን<xliff:g id="NUMBER_0">%d</xliff:g>ጊዜ በስህተት ስለውታል።ከ<xliff:g id="NUMBER_1">%d</xliff:g> የበለጠ ያልተሳካ ሙከራ በኋላ፣ የGoogle መግቢያዎን ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ እንደገና ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ ይሞክሩ።"</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"ይህን tablet <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ከ <xliff:g id="NUMBER_1">%d</xliff:g> በላይ ያልተሳኩ ሙከራዎች በኋላ፣ ይህ tablet አሁን በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበርና ሁሉም የተጠቃሚው ውሂብ ይጠፋል፡፡"</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"ይህን ስልክ <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ከ <xliff:g id="NUMBER_1">%d</xliff:g> በላይ ያልተሳኩ ሙከራዎች በኋላ፣ ይህ ስልክ በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበርና ሁሉም የተጠቃሚው ውሂብ ይጠፋል፡፡"</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"ይህን tablet <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ይህ tablet አሁን በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበራል፡፡"</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ስልኩ አሁን በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበራል፡፡"</string>
<!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
<skip />
<!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
@@ -971,14 +967,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"ትግበራ ወደ ድምፅ መልዕክት የገቢ መልዕክትዎ መልዕክቶች ለማከል ይፈቅዳል።"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"የአሳሽ ገፀ ሥፍራ ፍቃዶችን ቀይር"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"ትግበራ የአሳሹን ገፀ ሥፍራ ፈቃዶች ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ይህን በመጠቀም የሥፍራ መረጃን ወደ ድረ ገፆች ለመላክ ይችላሉ።"</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ፓኬጆችን አረጋግጥ"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"ትግበራ ፓኬጅ መጫን የሚችል መሆኑን ለማረጋገጥ ይፈቅዳል።"</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"በፓኬጅ አረጋጋጭ የተወሰነ"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"የፓኬጅ አረጋጋጮችን ጥየቃ ለማድረግ ያዡ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -1003,16 +995,11 @@
<skip />
<!-- no translation found for search_go (8298016669822141719) -->
<skip />
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"ፈልግ"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"ጥያቄ ፍለጋ"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"ጥያቄ አጥራ"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"ጥያቄ አስረክብ"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"የድምፅ ፍለጋ"</string>
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string>
@@ -1134,7 +1121,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="replace" msgid="8333608224471746584">"ተካ"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"ተካ"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
@@ -1172,10 +1159,8 @@
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"መጥፎ ዕድል ሆኖ፣ <xliff:g id="APPLICATION">%1$s</xliff:g> አቁሞዋል፡፡"</string>
+ <string name="aerr_process" msgid="4507058997035697579">"መጥፎ ዕድል ሆኖ፣ ይሄ ሂደት <xliff:g id="PROCESS">%1$s</xliff:g> ቆሞዋል፡፡"</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> ምላሽ እየሰጠ አይደለም። "\n\n"መዝጋት ይፈልጋሉ?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"<xliff:g id="ACTIVITY">%1$s</xliff:g> እንቅስቃሴ ምላሽ እየሰጠ አይደለም።"\n\n" መዝጋት ይፈልጋሉ?"</string>
@@ -1196,6 +1181,10 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"ትግበራው <xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g> ሂደት) በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።"</string>
<string name="smv_process" msgid="5120397012047462446">"ሂደቱ <xliff:g id="PROCESS">%1$s</xliff:g> በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።"</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android እያሻሻለ ነው..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"የ <xliff:g id="NUMBER_0">%1$d</xliff:g> ከ <xliff:g id="NUMBER_1">%2$d</xliff:g> መተግበሪያዎች በአግባቡ በመጠቀም ላይ፡፡"</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"መተግበሪያዎችን በማስጀመር ላይ፡፡"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"አጨራረስ ማስነሻ፡፡"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> አሂድ"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"ወደ ትግበራ ለመለወጥ ምረጥ"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"ትግበራዎች ይለዋወጡ?"</string>
@@ -1219,11 +1208,11 @@
<string name="volume_notification" msgid="2422265656744276715">"ማሳወቂያ ክፍልፍል"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"የብሉቱዝ ድምፅ። ወደ ፀጥታ ሁነታ ለመቀየር ሁለቴ ንካ።"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"የስልክ ጥሪ ድምፅ፡ ወደ ፀጥታ ሁነታ ለመቀየር ሁለቴ ንካ።"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"የጥሪ ድምፅ. ወደ ፀጥታ ሁነታ ለመቀየር ሁለቴ ንካ።"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"የማህደረ መረጃ ድምፅ። ወደ ፀጥታ ሁነታ ለመቀየር ሁለቴ ንካ።"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"የማሳወቂያ ድምፅ። ወደ ፀጥታ ሁነታ ለመቀየር ሁለቴ ንካ።"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"የብሉቱዝ ድምፅ መጠን"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"የስልክ ጥሪ ድምፅ መጠን"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"የስልክ ጥሪ ድምፅ መጠን"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"የማህደረ መረጃ ክፍልፍል"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"የማሳወቂያ ክፍልፍል"</string>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1247,8 +1236,7 @@
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
- <skip />
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"በቀጥታ Wi-Fi ማስጀመር አልተቻለም"</string>
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
<!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
@@ -1267,8 +1255,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
+ <string name="sim_removed_message" msgid="2333164559970958645">"በትክክል የገባ SIM ካርድ ድጋሚ እስኪያስጀምሩ የተንቀሳቃሽ ስልክ አውታረመረብ አይገኝም።"</string>
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
@@ -1308,7 +1295,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"የ USB ማከማቻ ለማጥፋት ችግር ነበር። የ USB ጥገኛውን መንቀልዎን ለማረጋገጥ ይመልከቱ፣ ከዛም እንደገና ይሞክሩ።"</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"የUSB ማከማቻ አብራ"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"የUSB ማከማቻዎን ካበሩ፣ እየተጠቀሙባቸው ያሉ አንዳንድ ትግበራዎች ይቆማሉ እና የUSB ማከማቻ እስኪያጠፉ ድረስ ላይገኝ ይችላል።"</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB ክንውን አልተሳካም"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB ክወና ስኬታማ አልነበረም"</string>
<string name="dlg_ok" msgid="7376953167039865701">"እሺ"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1418,8 +1405,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"የSD ካርድ በመ ንቀልላይ...."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB ማከማቻ በማጥፋት ላይ..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"SD ካርድ በማጥፋት ላይ..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB ማከማቻ ለማጥፋት ተስኗል።"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"USB ማከማቻ ለማጥፋት ተስኗል።"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB ማከማቻ መሰረዝ አልተቻለም፡፡"</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"SD ካርድ መሰረዝ አልተቻለም፡፡"</string>
<string name="media_bad_removal" msgid="7960864061016603281">"ከመነቀሉ በፊት SD ካርድ ተወግዶ ነበር።"</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB ማከማቻ በአሁኑ ጊዜ ታይቷል።"</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD ካርድ በአሁኑ ጊዜ ታይቷል።"</string>
@@ -1454,6 +1441,14 @@
<string name="switch_off" msgid="7249798614327155088">"ውጪ"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"ተጭኗል"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"አልተጫነም።"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ተወው"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ሰርዝ"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"ተከናውኗል"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ሞድ ለውጥ"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ቀይር"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"አስገባ"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"አዝራር፡፡ ይለፍቃል እየተየብክ አዝራሮችን ለመስማት ማዳመጫ መሳሪያ ያስፈልጋል፡፡"</string>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1478,16 +1473,17 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"ለማንቃት ንካ"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G የውሂብ ወሰን አልፏል"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G ውሂብ ወሰን አልፏል"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"የተንቀሳቃሽ ውሂብ ወሰን አልፏል"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ከተወሰነለት በላይ"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ከተወሰነለት በላይ"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"በስተጀርባ ውሂብ የተገደበ ነው"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"ገደብ ለማስወገድ ንካ"</string>
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
@@ -1524,6 +1520,5 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">"፣ "</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 52f51af..735d3ae 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"للسماح للتطبيق بتلقي رسائل بث الطوارئ ومعالجتها. يتاح هذا الإذن لتطبيقات النظام فقط."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"إرسال رسائل قصيرة SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"للسماح للتطبيق بإرسال رسائل قصيرة SMS. قد تكلفك التطبيقات الضارة المال من خلال إرسال رسائل بدون تأكيدك."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"إرسال رسائل قصيرة SMS بدون تأكيد"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"للسماح للتطبيق بإرسال رسائل قصيرة SMS. قد تكلفك التطبيقات الضارة المال من خلال إرسال رسائل بدون تأكيدك."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"قراءة الرسائل القصيرة SMS أو رسائل الوسائط المتعددة"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على الجهاز اللوحي أو بطاقة SIM. يمكن للتطبيقات الضارة قراءة رسائلك السرية."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على الهاتف أو بطاقة SIM. قد تقرأ التطبيقات الضارة رسائلك السرية."</string>
@@ -268,7 +266,7 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لطريقة الإرسال. لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"الالتزام بخدمة إدخال النصوص"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إدخال النصوص (على سبيل المثال، SpellCheckerService). لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
- <string name="permlab_bindVpnService" msgid="4708596021161473255">"الالتزام بخدمة الشبكة الظاهرية الخاصة (VPN)"</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"الالتزام بخدمة VPN"</string>
<string name="permdesc_bindVpnService" msgid="6011554199384584151">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الشبكة الظاهرية الخاصة (Vpn). لن يلزم تقديمه على الإطلاق مع التطبيقات العادية."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"الالتزام بخلفية ما"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للخلفية. لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"كتابة بيانات جهة الاتصال"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"للسماح للتطبيق بتعديل بيانات جهة الاتصال (العنوان) المخزنة على الجهاز اللوحي. يمكن أن تستخدم التطبيقات الضارة ذلك لمحو بيانات جهة الاتصال أو تعديلها."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"للسماح لتطبيق ما بتعديل بيانات (عنوان) جهة الاتصال المخزّنة في هاتفك. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح بيانات جهة الاتصال أو تعديلها."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"قراءة بيانات الملف الشخصي"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"للسماح لتطبيق بقراءة جميع معلوماتك الشخصية في الملف الشخصي. ويمكن أن تستخدم التطبيقات الضارة هذه الإمكانية للتعرف على هويتك وإرسال معلوماتك الشخصية إلى أشخاص آخرين."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"كتابة بيانات الملف الشخصي"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"للسماح لتطبيق بتعديل معلوماتك الشخصية في الملف الشخصي. يمكن للتطبيقات الضارة استخدام هذه الإمكانية لمسح أو تعديل بيانات ملفك الشخصي."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"قراءة بيانات ملفك الشخصي"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"للسماح للتطبيق بقراءة معلومات الملف الشخصي الشخصية المخزنة على الجهاز، مثل الاسم ومعلومات الاتصال. يعني ذلك أن التطبيق يمكنه التعرف عليك وإرسال معلومات ملفك الشخصي إلى الآخرين."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"الكتابة إلى بيانات ملفك الشخصي"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"للسماح للتطبيق بتغيير أو إضافة معلومات الملف الشخصي الشخصية المخزنة على الجهاز، مثل الاسم ومعلومات الاتصال. يعني ذلك أن التطبيقات الأخرى يمكنها التعرف عليك وإرسال معلومات ملفك الشخصي إلى الآخرين."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"قراءة أحداث التقويم بالإضافة إلى المعلومات السرية"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"للسماح لأحد التطبيقات بقراءة جميع أحداث التقويم المخزّنة في الجهاز اللوحي، بما في ذلك أحداث التقويم الخاصة بالأصدقاء وزملاء العمل. يمكن لأحد التطبيقات الضارة باستخدام هذا الإذن استخراج المعلومات الشخصية من هذه التقاويم بدون معرفة المالكين."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"للسماح لأحد التطبيقات بقراءة جميع أحداث التقويم المخزّنة في هاتفك، بما في ذلك أحداث التقويم الخاصة بالأصدقاء وزملاء العمل. يمكن لأحد التطبيقات الضارة باستخدام هذا الإذن استخراج المعلومات الشخصية من هذه التقاويم بدون معرفة المالكين."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"للسماح لتطبيق ما بعرض حالة جميع الشبكات."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"دخول كامل إلى الإنترنت"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"للسماح لتطبيق ما بإنشاء مقابس للشبكة."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"كتابة إعدادات اسم نقطة الدخول"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"للسماح لتطبيق ما بتعديل إعدادات APN، مثل الخادم الوكيل ومنفذ أي APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"تغيير/اعتراض إعدادات الشبكة وحركة المرور"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"للسماح لأحد التطبيقات بتغيير إعدادات الشبكة واعتراض وفحص جميع حركة المرور على الشبكة، على سبيل المثال تغيير الخادم الوكيل ومنفذ أي APN. يمكن أن تراقب التطبيقات الضارة حزم الشبكة أو تعيد توجيهها أو تعديلها بدون معرفتك."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"تغيير اتصال الشبكة"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"للسماح لتطبيق ما بتغيير حالة اتصال الشبكة."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"تغيير الاتصال المقيد"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"لقد أدخلت رقم التعريف الشخصي (PIN) بشكل غير صحيح عدد <xliff:g id="NUMBER_0">%d</xliff:g> من المرات. "\n\n"الرجاء إعادة المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"لقد رسمت نقش إلغاء التأمين بصورة خاطئة عدد <xliff:g id="NUMBER_0">%d</xliff:g> من المرات. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات الأخرى غير الناجحة، ستتم مطالبتك بإلغاء تأمين الجهاز اللوحي باستخدام معلومات تسجيل الدخول إلى Google."\n\n" الرجاء إعادة المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام معلومات تسجيل الدخول إلى Google."\n\n" الرجاء المحاولة مرة أخرى خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%d</xliff:g> ثانية."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"هل نسيت النمط؟"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"إلغاء تأمين الحساب"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"يتيح للتطبيق إضافة رسائل إلى صندوق البريد الصوتي."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"تعديل أذونات الموقع الجغرافي للمتصفح"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"للسماح لتطبيق ما بتعديل أذونات الموقع الجغرافي للمتصفح. يمكن أن تستخدم التطبيقات الضارة هذا للسماح بإرسال معلومات الموقع إلى مواقع ويب عشوائية."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"التحقق من الحزم"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"السماح للتطبيق بالتحقق من إمكانية تثبيت حزمة."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"الالتزام بمحقق حزمة"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"السماح للمالك بإجراء طلبات محققي الحزمة. لن تكون هناك حاجة إليه مع التطبيقات العادية."</string>
<string name="save_password_message" msgid="767344687139195790">"هل تريد من المتصفح تذكر كلمة المرور هذه؟"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"ليس الآن"</string>
<string name="save_password_remember" msgid="6491879678996749466">"تذكّر"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"حذف"</string>
<string name="search_go" msgid="8298016669822141719">"بحث"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"بحث"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"طلب البحث"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"محو طلب البحث"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"إرسال طلب البحث"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"البحث الصوتي"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"قبل شهر واحد"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل شهر واحد"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"قص"</string>
<string name="copy" msgid="2681946229533511987">"نسخ"</string>
<string name="paste" msgid="5629880836805036433">"لصق"</string>
- <string name="replace" msgid="8333608224471746584">"استبدال"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"استبدال"</string>
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
@@ -876,7 +873,7 @@
<string name="no" msgid="5141531044935541497">"إلغاء"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"تنبيه"</string>
<string name="loading" msgid="1760724998928255250">"جارٍ التحميل..."</string>
- <string name="capital_on" msgid="1544682755514494298">"في"</string>
+ <string name="capital_on" msgid="1544682755514494298">"تشغيل"</string>
<string name="capital_off" msgid="6815870386972805832">"إيقاف"</string>
<string name="whichApplication" msgid="4533185947064773386">"إكمال الإجراء باستخدام"</string>
<string name="alwaysUse" msgid="4583018368000610438">"الاستخدام بشكل افتراضي لهذا الإجراء."</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"يمكنك إعادة تمكين هذا من خلال الإعدادات &gt; التطبيقات &gt; إدارة التطبيقات."</string>
<string name="smv_application" msgid="295583804361236288">"انتهك التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (العملية <xliff:g id="PROCESS">%2$s</xliff:g>) سياسة.StrictMode المفروضة ذاتيًا."</string>
<string name="smv_process" msgid="5120397012047462446">"انتهكت العملية <xliff:g id="PROCESS">%1$s</xliff:g> سياسة StrictMode المفروضة ذاتيًا."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> يعمل"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"تحديد للتبديل إلى التطبيق"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"هل تريد التبديل بين التطبيقات؟"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"مستوى صوت المنبّه"</string>
<string name="volume_notification" msgid="2422265656744276715">"مستوى صوت التنبيه"</string>
<string name="volume_unknown" msgid="1400219669770445902">"مستوى الصوت"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"مستوى صوت Bluetooth. انقر للتبديل إلى الوضع الصامت."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"مستوى صوت نغمة الرنين. انقر للتبديل إلى الوضع الصامت."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"مستوى صوت الاتصال. انقر للتبديل إلى الوضع الصامت."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"مستوى صوت الوسائط. انقر للتبديل إلى الوضع الصامت."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"صوت التنبيه. انقر للتبديل إلى الوضع الصامت."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"مستوى صوت البلوتوث"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"مستوى صوت نغمة الرنين"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"مستوى صوت المكالمة"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"مستوى صوت الوسائط"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"مستوى صوت الإشعار"</string>
<string name="ringtone_default" msgid="3789758980357696936">"نغمة الرنين الافتراضية"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"نغمة الرنين الافتراضية (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"صامت"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"موافق"</string>
<string name="sms_control_no" msgid="1715320703137199869">"إلغاء"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"تمت إزالة بطاقة SIM"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"لن تكون شبكة الجوال متاحة حتى يتم تركيب بطاقة SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"لن تكون شبكة الجوال متاحة حتى تتم إعادة التشغيل وإدخال بطاقة SIM صالحة."</string>
<string name="sim_done_button" msgid="827949989369963775">"تم"</string>
<string name="sim_added_title" msgid="3719670512889674693">"تمت إضافة بطاقة SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"يجب إعادة تشغيل الجهاز للدخول إلى شبكة الجوال."</string>
@@ -1056,8 +1061,8 @@
<string name="accessibility_binding_label" msgid="4148120742096474641">"إمكانية الدخول"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"الخلفية"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"تغيير الخلفية"</string>
- <string name="vpn_title" msgid="8219003246858087489">"تم تنشيط الشبكة الظاهرية الخاصة (VPN)."</string>
- <string name="vpn_title_long" msgid="6400714798049252294">"تم تنشيط الشبكة الظاهرية الخاصة (VPN) بواسطة <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="vpn_title" msgid="8219003246858087489">"تم تنشيط VPN."</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"تم تنشيط VPN بواسطة <xliff:g id="APP">%s</xliff:g>"</string>
<string name="vpn_text" msgid="1610714069627824309">"انقر لإدارة الشبكة."</string>
<string name="vpn_text_long" msgid="4907843483284977618">"تم الاتصال بـ <xliff:g id="SESSION">%s</xliff:g>. انقر لإدارة الشبكة."</string>
<string name="upload_file" msgid="2897957172366730416">"اختيار ملف"</string>
@@ -1111,14 +1116,30 @@
<string name="choose_account_label" msgid="4191313562041125787">"حدد حسابًا."</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"زيادة"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"تناقص"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"محدد"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"تم التحديد"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"لم يتم التحديد"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"محدد"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"غير محدد"</string>
<string name="switch_on" msgid="551417728476977311">"تشغيل"</string>
<string name="switch_off" msgid="7249798614327155088">"إيقاف"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"مضغوط."</string>
- <string name="togglebutton_not_pressed" msgid="4495147725636134425">"غير مضغوط."</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"مضغوط"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"غير مضغوط"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"التنقل إلى أعلى"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string>
@@ -1131,11 +1152,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"تم تعطيل بيانات الجوال"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"انقر للتمكين."</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"تم تجاوز حد بيانات شبكتي 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"تم تجاوز حد بيانات الجيل الرابع"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"تم تجاوز حد بيانات شبكات 2G-3G"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"تم تجاوز حد بيانات 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"تم تجاوز حد بيانات الجوال"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> فوق الحد المحدد"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> أكثر من الحد المعين"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
<!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 90b84a8..88ae749 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Разрешава на приложението да получава и обработва спешни съобщения за излъчване. Това разрешение е налице само за системни приложения."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"изпращане на SMS съобщения"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Разрешава на приложението да изпраща SMS съобщения. Злонамерените приложения могат да ви въвлекат в разходи, като изпращат съобщения без потвърждение от ваша страна."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"изпращане на SMS съобщения без потвърждаване"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Разрешава на приложението да изпраща SMS съобщения. Злонамерените приложения могат да ви въвлекат в разходи, като изпращат съобщения без потвърждение от ваша страна."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"четене на SMS или MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Разрешава на приложението да чете SMS съобщенията, съхранени в таблета или в SIM картата ви. Злонамерените приложения могат да прочетат поверителните ви съобщения."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Разрешава на приложението да чете SMS съобщенията, съхранени в телефона или в SIM картата ви. Злонамерените приложения могат да прочетат поверителните ви съобщения."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"запис на данни за контактите"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Разрешава на приложението да променя данните за контактите (за адрес), съхранени в таблета ви. Злонамерените приложения може да използват това, за да изтрият или променят тези данни."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Разрешава на приложението да променя данните за контактите (за адрес), съхранени в телефона ви. Злонамерените приложения могат да използват това, за да изтрият или променят тези данни."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"четене на данните"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Разрешава на приложението да чете цялата информацията от личния ви потребителски профил. Злонамерените приложения могат да използват това, за да ви идентифицират и да изпращат тази информация на други хора."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"запис на данните"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Разрешава на приложението да променя информацията от личния ви потребителски профил. Злонамерените приложения могат да използват това, за да изтрият или да променят данните ви."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"четене на данните в профила ви"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Разрешава на приложението да чете информацията от личния потребителски профил, съхранена на устройството ви, например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"запис в данните на профила ви"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Разрешава на приложението да променя или добавя към личния потребителски профил информация, съхранена на устройството ви, като например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"четене на събития от календари плюс поверителна информация"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Разрешава на приложението да чете всички събития от календари, съхранявани на таблета ви, включително тези на приятели или колеги. Злонамерено приложение с това разрешение може да извлича лична информация от тези календари без знанието на собствениците."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Разрешава на приложението да чете всички събития от календари, съхранявани на телефона ви, включително тези на приятели или колеги. Злонамерено приложение с това разрешение може да извлича лична информация от тези календари без знанието на собствениците."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Разрешава на приложението да вижда състоянието на всички мрежи."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"пълен достъп до интернет"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Разрешава на приложението да създава мрежови сокети."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"запис на настройки на име на точка за достъп"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Разрешава на приложението да променя настройките на всяко име на точка за достъп, като например прокси сървър и порт."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"промяна/прехващане на мрежовите настройки и трафика от мрежата"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Разрешава на приложението да променя мрежовите настройки и да прехваща и проверява целия трафик от мрежата, например да променя прокси сървъра и порта на името на точката за достъп (APN). Злонамерените приложения могат да наблюдават, пренасочват или променят пакети от мрежата без ваше знание."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"промяна на връзката с мрежата"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Разрешава на приложението да променя състоянието на връзката с мрежата."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Промяна на споделената връзка"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Въведохте неправилно своя PIN <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Моля, опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите таблета посредством данните си за вход в Google."\n\n" Моля, опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Нарисувахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще ви бъде поискано да отключите телефона, използвайки данните си за вход в Google."\n\n" Моля, опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Опитайте отново след <xliff:g id="NUMBER">%d</xliff:g> секунди."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забравили сте фигурата?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Отключване на профила"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Разрешава на приложението да добавя съобщения към входящата ви гласова поща."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Промяна на разрешенията за местоположение в браузъра"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Разрешава на приложението да променя разрешенията на браузъра за местоположение. Злонамерените приложения могат да използват това, за да изпращат информация за местоположението до произволни уебсайтове."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"проверка на пакетите"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Разрешава на приложението да провери дали пакетът може да се инсталира."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"обвързване с верификатор на пакета"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Разрешава на притежателя да прави заявки за верификатори на пакета. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
<string name="save_password_message" msgid="767344687139195790">"Искате ли браузърът да запомни тази парола?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сега"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запомняне"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"изтриване"</string>
<string name="search_go" msgid="8298016669822141719">"Търсене"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Търсене"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Заявка за търсене"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Изчистване на заявката"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Изпращане на заявката"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Гласово търсене"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Преди 1 месец"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Преди повече от месец"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"Изрязване"</string>
<string name="copy" msgid="2681946229533511987">"Копиране"</string>
<string name="paste" msgid="5629880836805036433">"Поставяне"</string>
- <string name="replace" msgid="8333608224471746584">"Замяна"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Замяна"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копиране на URL адреса"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Избиране на текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избиране на текст"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Активирайте отново това в „Настройки“ &gt; „Приложения“ &gt; „Управление на приложенията“."</string>
<string name="smv_application" msgid="295583804361236288">"Приложението <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) наруши правилото за стриктен режим, наложено от самото него."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесът <xliff:g id="PROCESS">%1$s</xliff:g> наруши правилото за стриктен режим, наложено от самия него."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> се изпълнява"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Изберете за превключване към приложение"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Да се превключат ли приложенията?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Сила на звука на будилника"</string>
<string name="volume_notification" msgid="2422265656744276715">"Сила на звука при известие"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Сила на звука"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Сила на звука за Bluetooth. Докоснете, за да превключите към тих режим."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Сила на звука при звънене. Докоснете, за да превключите към тих режим."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Сила на звука при обаждания. Докоснете, за да превключите към тих режим."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Сила на звука за мултимедия. Докоснете, за да превключите към тих режим."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Сила на звука при известия. Докоснете, за да превключите към тих режим."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Сила на звука за Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Сила на звука за мелодия"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Сила на звука за обаждания"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Сила на звука"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Сила на звука при известие"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Стандартна мелодия"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Стандартна мелодия (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Тишина"</string>
@@ -944,7 +949,7 @@
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не можа да се свърже с Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"има лоша връзка с интернет."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Стартиране на операция за Wi-Fi Direct. Това ще изключи операцията за клиентска програма/гореща точка за Wi-Fi."</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Стартиране на операция за Wi-Fi Direct. Това ще изключи операцията за клиентска програма/точка за достъп до Wi-Fi."</string>
<!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Стартирането на Wi-Fi Direct не бе успешно"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Заявка за настройка на връзка с Wi-Fi Direct от <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Кликнете върху „OK“, за да приемете."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Заявка за настройка на връзка с Wi-Fi Direct от <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Въведете ПИН, за да продължите."</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Отказ"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM картата е премахната"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Тази мобилна мрежа няма да е налице, докато не замените SIM картата."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Мобилната мрежа няма да бъде достъпна, докато не рестартирате с поставена валидна SIM карта."</string>
<string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM картата е добавена"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Трябва да рестартирате устройството си, за да осъществите достъп до мобилната мрежа."</string>
@@ -1119,6 +1124,22 @@
<string name="switch_off" msgid="7249798614327155088">"изключено"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"натиснато"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"не е натиснато"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Придвижване нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Още опции"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G данните са деактивирани"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G данните са деактивирани"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобилните данни са деактивирани"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"докоснете за активиране"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Превишен лимит на 2G–3G данните"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Лимит за 4G данните – превишен"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Лимит за моб. данни – превишен"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> над определения лимит"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index ca9aeda..e198be1 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autenticació incorrecta."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"L\'autenticació mitjançant el servidor intermediari no ha estat correcta."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"No s\'ha pogut establir la connexió al servidor."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no s\'ha pogut comunicar. Torneu-ho a provar més tard."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no s\'ha pogut comunicar. Torna-ho a provar més tard."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"La connexió al servidor ha esgotat el temps d\'espera."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Aquesta pàgina conté massa redireccions del servidor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"El protocol no és compatible."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permet que l\'aplicació rebi i processi missatges de difusió d\'emergència. Aquest permís només està disponible per a les aplicacions del sistema."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"enviar missatges SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permet a l\'aplicació enviar missatges SMS. Les aplicacions malicioses poden costar-vos diners en enviar missatges sense la vostra confirmació."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"enviament de missatges SMS sense confirmació"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permet que l\'aplicació enviï missatges SMS. Les aplicacions malicioses poden enviar missatges sense la teva confirmació, cosa que et pot fer gastar diners."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"llegir SMS o MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permet que una aplicació llegeixi missatges SMS emmagatzemats a la tauleta o a la targeta SIM. Les aplicacions malicioses poden llegir els teus missatges confidencials."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permet a l\'aplicació llegir missatges SMS emmagatzemats al telèfon o a la targeta SIM. Les aplicacions malicioses podrien llegir els missatges confidencials."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"escriure dades de contacte"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permet que una aplicació modifiqui les dades de contactes (adreces) emmagatzemades a la tauleta. Les aplicacions malicioses poden utilitzar aquesta funció per esborrar o per modificar les teves dades de contactes."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permet a una aplicació modificar les dades de contacte (adreça) emmagatzemades al telèfon. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar les dades de contacte."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"lectura de dades del perfil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet que una aplicació llegeixi tota la informació del teu perfil personal. Les aplicacions malicioses poden utilitzar-ho per identificar-te i enviar la teva informació personal a altres persones."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"escriptura de dades del perfil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet a una aplicació modificar la informació del teu perfil personal. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar les dades del teu perfil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lectura de dades del teu perfil"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet que l\'aplicació pugui llegir la informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que l\'aplicació et pot identificar i enviar la informació del teu perfil a altres persones."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"escriptura a les teves dades del perfil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet que l\'aplicació pugui canviar o afegir a la informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que altres aplicacions et poden identificar i enviar la informació del teu perfil a altres persones."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"llegeix els esdeveniments del calendari més informació confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permet que una aplicació llegeixi tots els esdeveniments de calendari emmagatzemats a la tauleta, inclosos els dels seus amics o els seus companys de feina. Una aplicació maliciosa amb aquest permís pot extreure informació personal d\'aquests calendaris sense el coneixement dels propietaris."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permet que una aplicació llegeixi tots els esdeveniments de calendari emmagatzemats al telèfon, inclosos els dels seus amics o els teus companys de feina. Una aplicació maliciosa amb aquest permís pot extreure informació personal d\'aquests calendaris sense que ho sàpiguen els propietaris."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permet a una aplicació visualitzar l\'estat de totes les xarxes."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"accés total a Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permet a una aplicació crear sòcols de xarxa."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"escriure la configuració del nom del punt d\'accés (APN)"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permet a una aplicació modificar la configuració d\'APN, com ara el servidor intermediari i el port de qualsevol APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"canvi/intercepció de la configuració de xarxa i el trànsit"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permet que una aplicació pugui canviar la configuració de xarxa i interceptar i inspeccionar tot el trànsit de la xarxa, per exemple, canviar el servidor intermediari i el port de qualsevol APN. Les aplicacions malicioses poden controlar, redireccionar o modificar paquets de la xarxa sense el teu coneixement."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"canviar la connectivitat de xarxa"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permet a una aplicació canviar l\'estat de la connectivitat de xarxa."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Canvia la connectivitat ancorada a la xarxa"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Has introduït un PIN incorrecte <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Has dibuixat incorrectament el teu patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, el sistema et demanarà que desbloquegis la tauleta utilitzant l\'inici de sessió de Google."\n\n" Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Heu dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se us demanarà que desbloquegeu el telèfon amb l\'inici de sessió de Google."\n\n" Torneu-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER_0">%d</xliff:g> vegades incorrectament. D\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, la tauleta es restablirà a la configuració predeterminada de fàbrica i es perdran totes les dades dels usuaris."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER_0">%d</xliff:g> vegades incorrectament. D\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, la tauleta es restablirà a la configuració predeterminada de fàbrica i es perdran totes les dades dels usuaris."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Has provat de desbloquejar la tauleta <xliff:g id="NUMBER">%d</xliff:g> vegades incorrectament. Ara la tauleta es restablirà a la configuració predeterminada de fàbrica."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER">%d</xliff:g> vegades incorrectament. Ara el telèfon es restablirà a la configuració predeterminada de fàbrica."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Torneu-ho a provar d\'aquí a <xliff:g id="NUMBER">%d</xliff:g> segons."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Heu oblidat el patró?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloqueig del compte"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permet que l\'aplicació afegeixi missatges a la safata d\'entrada de la bústia de veu."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifica els permisos d\'ubicació geogràfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permet a una aplicació modificar els permisos d\'ubicació geogràfica del navegador. Les aplicacions malicioses poden utilitzar-ho per permetre l\'enviament d\'informació d\'ubicació a llocs web arbitraris."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verifica paquets"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permet que l\'aplicació verifiqui si un paquet es pot instal·lar."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"vincula a un verificador de paquets"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permet que el titular sol·liciti verificadors de paquets. Les aplicacions normals no haurien de necessitar aquest permís."</string>
<string name="save_password_message" msgid="767344687139195790">"Voleu que el navegador recordi aquesta contrasenya?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ara no"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Recorda-ho"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"retorn"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"elimina"</string>
<string name="search_go" msgid="8298016669822141719">"Cerca"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Cerca"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Consulta de cerca"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Neteja la consulta"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Envia la consulta"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Cerca per veu"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Fa 1 mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa menys d\'1 mes"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Retalla"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Enganxa"</string>
- <string name="replace" msgid="8333608224471746584">"Substitueix"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Substitueix"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copia l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecciona el text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecció de text"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selecciona una aplicació per al dispositiu USB"</string>
<string name="noApplications" msgid="1691104391758345586">"No hi ha cap aplicació que pugui dur a terme aquesta acció."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g> s\'ha aturat."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> s\'ha aturat."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> no respon."\n\n"Vols tancar-la?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"L\'activitat <xliff:g id="ACTIVITY">%1$s</xliff:g> no respon."\n" "\n" Vols tancar-la?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Torna a activar-ho amb Configuració &gt; Aplicacions &gt; Gestiona les aplicacions."</string>
<string name="smv_application" msgid="295583804361236288">"L\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> (procés <xliff:g id="PROCESS">%2$s</xliff:g>) ha incomplert la seva política autoimposada de mode estricte."</string>
<string name="smv_process" msgid="5120397012047462446">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> ha incomplert la seva política de mode estricte."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android s\'està actualitzant..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"S\'està optimitzant l\'aplicació <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"S\'estan iniciant les aplicacions."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"S\'està finalitzant l\'actualització."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> s\'està executant"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Selecciona per canviar a l\'aplicació"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Canvi d\'aplicacions?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volum de l\'alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volum de notificació"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volum"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volum de Bluetooth. Prem per canviar al mode silenciós."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volum del to. Prem per canviar al mode silenciós."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volum de la trucada. Prem per canviar al mode silenciós."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volum del mitjà. Prem per canviar al mode silenciós."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volum de les notificacions. Prem per canviar al mode silenciós."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volum de Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volum del to"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volum de trucada"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volum de multimèdia"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volum de notificació"</string>
<string name="ringtone_default" msgid="3789758980357696936">"To predeterminat"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"To predeterminat (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silenci"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"té una mala connexió a Internet."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Inicia l\'operació Wi-Fi Direct. Això desactivarà l\'operació client/zona Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"No s\'ha pogut iniciar el Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"No s\'ha pogut iniciar Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Sol·licitud de configuració de connexió de Wi-Fi Direct des de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Si la vols acceptar, fes clic a D\'acord."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Sol·licitud de configuració de connexió de Wi-Fi Direct des de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Introdueix el PIN per continuar."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"S\'ha d\'introduir el PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> al dispositiu de l\'altre extrem <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> per poder continuar amb la configuració de la connexió"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"D\'acord"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancel·la"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Extracció de la targeta SIM"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"La xarxa de telefonia mòbil no estarà disponible fins que no canviïs la targeta SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"La xarxa de telefonia mòbil no estarà disponible fins que no reiniciïs amb una targeta SIM vàlida inserida."</string>
<string name="sim_done_button" msgid="827949989369963775">"Fet"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Addició de la targeta SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Cal que reiniciïs el dispositiu per accedir a la xarxa de telefonia mòbil."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"S\'ha produït un problema en desactivar l\'emmagatzematge USB. Comproveu que heu desmuntat l\'amfitrió d\'USB i torneu-ho a provar."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activa l\'emmagatzematge USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activeu l\'emmagatzematge USB, algunes de les aplicacions que utilitzeu s\'aturaran i pot ser que no estiguin disponibles fins que desactiveu l\'emmagatzematge USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Error de l\'operació d\'USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"S\'ha produït un error amb l\'operació de l\'USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"D\'acord"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connectat com a dispositiu multimèdia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connectat com a càmera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"S\'està desinstal·lant la targeta SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"S\'està esborrant l\'emmagatzematge USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"S\'està esborrant la targeta SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"S\'ha produït un error en esborrar l\'emmagatzematge USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"S\'ha produït un error en esborrar l\'emmagatzematge USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"No s\'ha pogut esborrar l\'emmagatzematge USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"No s\'ha pogut esborrar la targeta SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"La targeta SD s\'ha retirat abans de desinstal·lar-la."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Actualment s\'està comprovant l\'emmagatzematge USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"S\'està comprovant la targeta SD."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"desactivat"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"premut"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"no premut"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel·la"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Suprimeix"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fet"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Canvi de mode"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retorn"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecles. Es necessiten auriculars per escoltar les tecles en escriure una contrasenya."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Mou cap a dalt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Més opcions"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dades 2G-3G desactivades"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dades 4G desactivades"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dades mòbils desactivades"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"pica per activar-lo"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Toca per activar"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"S\'ha superat el límit de dades 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"S\'ha superat el límit de dades 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"S\'ha superat el límit de dades mòbils"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> per sobre del límit especificat"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> per sobre del límit especificat"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"S\'han restringit dades de fons"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Toca per eliminar la restricció"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de seguretat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Aquest certificat és vàlid."</string>
<string name="issued_to" msgid="454239480274921032">"Emès per a:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecció d’activitat"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Ús compartit amb..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositiu bloquejat."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index f3c45be..86b5be5 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Ověření nebylo úspěšné."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Ověření pomocí serveru proxy bylo neúspěšné."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Připojení k serveru bylo neúspěšné."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Komunikace se serverem se nezdařila. Opakujte akci později."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Komunikace se serverem se nezdařila. Opakujte akci později."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Spojení se serverem vypršelo."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Stránka obsahuje příliš mnoho přesměrování serveru."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol není podporován."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Umožňuje aplikaci přijímat a zpracovávat zprávy nouzového vysílání. Toto oprávnění je dostupné jen pro systémové aplikace."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"odesílaní zpráv SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Umožňuje aplikaci odesílat zprávy SMS. Škodlivé aplikace mohou bez vašeho potvrzení odesílat zpoplatněné zprávy."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"posílat zprávy SMS bez potvrzení"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Umožňuje aplikaci odesílat zprávy SMS. Škodlivé aplikace mohou bez vašeho potvrzení odesílat zpoplatněné zprávy."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"čtení zpráv SMS a MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Umožňuje aplikaci číst zprávy SMS uložené v tabletu nebo na kartě SIM. Škodlivé aplikace mohou číst vaše důvěrné zprávy."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Umožňuje aplikaci číst zprávy SMS uložené ve vašem telefonu nebo na kartě SIM. Škodlivé aplikace mohou načíst vaše soukromé zprávy."</string>
@@ -267,7 +265,7 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vazba k metodě zadávání dat"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Umožňuje držiteli vázat se na nejvyšší úroveň rozhraní pro zadávání dat. Běžné aplikace by toto nastavení nikdy neměly využívat."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"navázat se na textovou službu"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Umožňuje držiteli připojit se k nejvyšší úroveň rozhraní textové služby (např. SpellCheckerService). Běžné aplikace by toto nastavení nikdy neměly potřebovat."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Umožňuje držiteli připojit se k nejvyšší úrovni rozhraní textové služby (např. SpellCheckerService). Běžné aplikace by toto nastavení nikdy neměly potřebovat."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"navázat se na službu VPN"</string>
<string name="permdesc_bindVpnService" msgid="6011554199384584151">"Umožňuje držiteli navázat se na nejvyšší úroveň služby VPN. Běžné aplikace by toto oprávnění nikdy neměly potřebovat."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"vazba na tapetu"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"zápis dat kontaktů"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Umožňuje aplikaci změnit kontaktní údaje (adresu) uložené v tabletu. Škodlivé aplikace toto oprávnění mohou zneužít a vymazat či pozměnit kontaktní údaje."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Umožňuje aplikaci změnit kontaktní údaje (adresu) uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit kontaktní údaje."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"číst údaje o profilu"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikaci číst veškeré soukromé údaje profilu. Škodlivé aplikace vás mohou pomocí tohoto nastavení identifikovat a posílat osobní informace dalším lidem."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovat údaje o profilu"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikaci upravovat osobní údaje v profilu. Škodlivé aplikace mohou pomocí tohoto nastavení mazat nebo upravovat údaje v profilu."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"číst údaje o vašem profilu"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikaci číst osobní informace o profilu uložené ve vašem zařízení, jako je jméno a kontaktní informace. To znamená, že vás aplikace může identifikovat a odesílat informace o profilu ostatním."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovat do údajů o profilu"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikaci měnit a přidávat osobní informace o profilu uložené ve vašem zařízení, jako je jméno a kontaktní informace. To znamená, že vás aplikace může identifikovat a odesílat informace o profilu ostatním."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"číst události kalendáře a důvěrné informace"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Povolí aplikaci číst všechny události kalendáře uložené ve vašem tabletu, včetně událostí vašich přátel a spolupracovníků. Škodlivá aplikace s tímto oprávněním může z těchto kalendářů extrahovat osobní údaje, aniž by o tom vlastník věděl."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Povolí aplikaci číst všechny události kalendáře uložené ve vašem telefonu, včetně událostí vašich přátel a spolupracovníků. Škodlivá aplikace s tímto oprávněním může z těchto kalendářů extrahovat osobní údaje, aniž by o tom vlastník věděl."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Umožňuje aplikaci zobrazit stav všech sítí."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"plný přístup k internetu"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Umožňuje aplikaci vytvořit síťové sokety."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"zápis nastavení názvu přístupového bodu (APN)"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Umožňuje aplikaci změnit nastavení APN, jako je například proxy či port APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"měnit/zachytávat nastavení sítě a síťové přenosy"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Umožňuje aplikaci měnit nastavení sítě a zachytit a kontrolovat síťové přenosy, například změnit adresu proxy a port jakéhokoliv přístupového bodu APN. Škodlivé aplikace mohou sledovat, přesměrovat nebo upravit síťové pakety bez vašeho vědomí."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"změna připojení k síti"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Umožňuje aplikaci změnit stav připojení k síti."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Změna sdíleného datového připojení"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Vícekrát (<xliff:g id="NUMBER_0">%d</xliff:g>) jste nesprávně zadali kód PIN. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste bezpečnostní gesto nakreslili nesprávně. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech vás požádáme o odemčení tabletu pomocí přihlašovacích údajů účtu Google."\n\n"Zkuste to prosím znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své bezpečnostní gesto. Po dalších neúspěšných pokusech (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požádáni o odemčení telefonu pomocí přihlášení do účtu Google."\n\n" Akci prosím opakujte za několik sekund (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Tablet jste se pokusili nesprávným způsobem odemknout <xliff:g id="NUMBER_0">%d</xliff:g>krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech se v tabletu obnoví tovární nastavení a veškerá uživatelská data budou ztracena."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Telefon jste se pokusili nesprávným způsobem odemknout <xliff:g id="NUMBER_0">%d</xliff:g>krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech se v telefonu obnoví tovární nastavení a veškerá uživatelská data budou ztracena."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Tablet jste se pokusili nesprávným způsobem odemknout <xliff:g id="NUMBER">%d</xliff:g>krát. V tabletu se nyní obnoví výchozí tovární nastavení."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Telefon jste se pokusili nesprávným způsobem odemknout <xliff:g id="NUMBER">%d</xliff:g>krát. V telefonu se nyní obnoví výchozí tovární nastavení."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Sekundy zbývající do dalšího pokusu: <xliff:g id="NUMBER">%d</xliff:g>."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Zapomněli jste gesto?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Odemčení účtu"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Umožňuje aplikaci přidávat zprávy do hlasové schránky."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Změnit oprávnění prohlížeče poskytovat informace o zeměpisné poloze"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Umožňuje aplikaci změnit oprávnění prohlížeče poskytovat informace o zeměpisné poloze. Škodlivé aplikace mohou toto nastavení použít k odesílání informací o umístění na libovolné webové stránky."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ověřit balíčky"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Umožňuje aplikaci ověřit, zda se dá balíček nainstalovat."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"navázat na ověřovatele balíčků"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Umožňuje držiteli podávat žádosti o ověření balíčků. Běžné aplikace by toto nastavení neměly nikdy potřebovat."</string>
<string name="save_password_message" msgid="767344687139195790">"Chcete, aby si prohlížeč zapamatoval toto heslo?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Nyní ne"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Zapamatovat"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"smazat"</string>
<string name="search_go" msgid="8298016669822141719">"Hledat"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Vyhledávat"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Vyhledávací dotaz"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Smazat dotaz"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Odeslat dotaz"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Hlasové vyhledávání"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"před 1 měsícem"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Déle než před 1 měsícem"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Vyjmout"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovat"</string>
<string name="paste" msgid="5629880836805036433">"Vložit"</string>
- <string name="replace" msgid="8333608224471746584">"Nahradit"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Nahradit"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopírovat adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrat text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výběr textu"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Zvolte aplikaci pro zařízení USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Tuto činnost nemohou provádět žádné aplikace."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> bohužel přestala pracovat."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> byl bohužel ukončen."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Aplikace <xliff:g id="APPLICATION">%2$s</xliff:g> nereaguje."\n\n"Chcete ji ukončit?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktivita <xliff:g id="ACTIVITY">%1$s</xliff:g> nereaguje."\n\n"Chcete ji ukončit?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Tuto možnost můžete opět aktivovat v části Nastavení &gt; Aplikace &gt; Správa aplikací."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android se aktualizuje..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimalizace aplikace <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Spouštění aplikací."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Probíhá dokončování spouštění."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Běží aplikace <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Tuto možnost vyberte, chcete-li přepnout na aplikaci."</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Přepnout mezi aplikacemi?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Hlasitost budíku"</string>
<string name="volume_notification" msgid="2422265656744276715">"Hlasitost oznámení"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Hlasitost"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Hlasitost zařízení Bluetooth. Klepnutím zapnete tichý režim."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Hlasitost vyzvánění. Klepnutím zapnete tichý režim."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hlasitost volání. Klepnutím zapnete tichý režim."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Hlasitost médií. Klepnutím zapnete tichý režim."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Hlasitost upozornění. Klepnutím zapnete tichý režim."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Hlasitost Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Hlasitost vyzvánění"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hlasitost hovoru"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Hlasitost médií"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Hlasitost oznámení"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Výchozí vyzváněcí tón"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Výchozí vyzváněcí tón (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Ticho"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"má pomalé připojení k internetu."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Přímé připojení sítě Wi-Fi"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Spustit provoz přímého připojení sítě Wi-Fi. Tato možnost vypne provoz sítě Wi-Fi v režimu klient/hotspot."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Přímé připojení sítě Wi-Fi se nepodařilo spustit"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Přímé připojení sítě Wi-Fi se nepodařilo spustit."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Žádost o nastavení přímého připojení sítě Wi-Fi z adresy <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Chcete-li žádost přijmout, klikněte na tlačítko OK."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Žádost o nastavení přímého připojení sítě Wi-Fi z adresy <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Pokračujte zadáním kódu PIN."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Chcete-li pokračovat v nastavení připojení, je potřeba zadat kód PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> ve sdíleném zařízení <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Zrušit"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM odebrána"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilní síť bude nedostupná, dokud nevyměníte kartu SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilní síť bude dostupná až poté, co vložíte platnou kartu SIM a restartujete zařízení."</string>
<string name="sim_done_button" msgid="827949989369963775">"Hotovo"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Karta SIM přidána."</string>
<string name="sim_added_message" msgid="1209265974048554242">"Mobilní síť bude přístupná po restartu zařízení."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Při vypínání úložiště USB došlo k problémům. Zkontrolujte, zda byl hostitel USB odpojen, a zkuste to znovu."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Zapnout úložiště USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Pokud zapnete úložiště USB, dojde k zastavení některých používaných aplikací. Tyto aplikace pravděpodobně nebudou k dispozici až do vypnutí úložiště USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Chyba operace na rozhraní USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operace rozhraní USB se nezdařila."</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Připojeno jako mediální zařízení"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Připojeno jako fotoaparát"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Odpojování karty SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Mazání úložiště USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Mazání karty SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Smazání úložiště USB se nezdařilo."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Smazání úložiště USB se nezdařilo."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Úložiště USB nelze smazat."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Kartu SD nelze smazat."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Karta SD nebyla před odebráním odpojena."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Probíhá kontrola úložiště USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Probíhá kontrola karty SD."</string>
@@ -1113,12 +1108,20 @@
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"zaškrtnuto"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"nezaškrtnuto"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"vybráno"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"nevybráno"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"Vybráno"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"Nevybráno"</string>
<string name="switch_on" msgid="551417728476977311">"zapnuto"</string>
<string name="switch_off" msgid="7249798614327155088">"vypnuto"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"stisknuto"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nestisknuto"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Zrušit"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Smazat"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hotovo"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Změna režimu"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klávesa. Při zadávání hesla je potřeba použít náhlavní soupravu."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Přejít nahoru"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Další možnosti"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datové přenosy 2G a 3G zakázány"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datové přenosy 4G jsou zakázány"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilní data jsou zakázána"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"klepnutím povolíte"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Překročili jste limit dat 2G–3G."</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Překročili jste limit dat 4G."</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Překročili jste limit mob. dat."</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad stanoveným limitem"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Dotykem povolte"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Překročili jste limit dat 2G–3G"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Překročili jste limit dat 4G."</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Překročili jste limit mobilních dat."</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad stanoveným limitem"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Přenos dat na pozadí je omezen"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Dotykem odstraníte omezení"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certifikát zabezpečení"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Tento certifikát je platný."</string>
<string name="issued_to" msgid="454239480274921032">"Vydáno pro:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vybrat činnost"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Sdílet s..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Zařízení je uzamčeno."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 4b1966d..4c5b25a 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Godkendelse mislykkedes."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Godkendelse via proxyserveren mislykkedes."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Der kunne ikke oprettes forbindelse til serveren."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serveren kunne ikke kommunikere. Prøv igen senere."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Serveren kunne ikke kommunikere. Prøv igen senere."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Der opstod timeout for forbindelsen til serveren."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Siden indeholder for mange serveromdirigeringer."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokollen understøttes ikke."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Tillader, at en applikation kan modtage og behandle nødudsendelser. Denne tilladelse er kun tilgængelig for systemapplikationer."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"send sms-beskeder"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Tillader, at en applikation at sender sms-beskeder. Ondsindede applikationer kan eventuelt koste dig penge ved at sende beskeder uden din bekræftelse."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"sende sms-meddelelser uden bekræftelse"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Tillader, at en applikation sender sms-meddelelser. Ondsindede applikationer kan eventuelt koste dig penge ved at sende meddelelser uden din bekræftelse."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"læs sms eller mms"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Tillader, at en applikation læser sms-beskeder, der er gemt på din tabletcomputer eller dit SIM-kort. Ondsindede applikationer kan eventuelt læse dine fortrolige beskeder."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Tillader, at en applikation læser sms-beskeder, der er gemt på din telefon eller dit SIM-kort. Ondsindede applikationer kan eventuelt læse dine fortrolige beskeder."</string>
@@ -267,7 +265,7 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"forpligt til en inputmetode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Tillader, at brugeren forpligter sig til en inputmetodes grænseflade på øverste niveau. Bør aldrig være nødvendig til normale applikationer."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"forpligte sig til en sms-tjeneste"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Tillader brugeren at forpligte sig på en teksttjenestes grænseflade (f. eks. SpellCheckerService) på øverste niveau. Bør aldrig være nødvendig til almindelige programmer."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Tillader brugeren at forpligte sig på en teksttjenestes grænseflade (f. eks. SpellCheckerService) på øverste niveau. Bør aldrig være nødvendig til almindelige applikationer."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"bind til en VPN-tjeneste"</string>
<string name="permdesc_bindVpnService" msgid="6011554199384584151">"Tillader brugeren at forpligte sig på en Vpn-tjenestes grænseflade på øverste niveau. Bør aldrig være nødvendig til normale applikationer."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"forpligt til et tapet"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"skriv kontaktdata"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Tillader, at en applikation ændrer kontaktdata (adresser), der er gemt på din tabletcomputer. Ondsindede applikationer kan bruge dette til at slette eller ændre kontaktdata."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Tillader, at en applikation ændrer kontaktdata (adresser), der er gemt på din telefon. Ondsindede applikationer kan bruge dette til at slette eller ændre kontaktdata."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"læs profildata"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillader, at en applikation kan læse alle dine personlige profiloplysninger. Ondsindede programmer kan bruge dette til at identificere dig og sende dine personlige oplysninger til andre personer."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"skrive profildata"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillader, at en applikation kan ændre dine personlige profiloplysninger. Ondsindede programmer kan bruge dette til at slette eller ændre dine profildata."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"læse dine profildata"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillader programmet at læse personlige profiloplysninger, som er gemt på din enhed. Disse kan f.eks. være dit navn og dine kontaktoplysninger. Dette betyder, at applikationen kan identificere dig og sende dine profiloplysninger til andre."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"skrive til dine profildata"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillader programmet at ændre eller føje til personlige profiloplysninger, som er gemt på din enhed. Disse kan f.eks. være dit navn og dine kontaktoplysninger. Dette betyder, at andre applikationer kan identificere dig og sende dine profiloplysninger til andre."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"læs kalenderbegivenheder plus fortrolige oplysninger"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Tillader, at en applikation kan læse alle kalenderbegivenheder, der er gemt på din tablet, herunder dem venners eller kollegers. En ondsindet applikation med denne tilladelse kan udtrække personlige oplysninger fra disse kalendere uden ejernes viden."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Tillader, at en applikation kan læse alle kalenderbegivenheder gemt på din telefon, herunder dem af venner eller kolleger. En ondsindet applikation med denne tilladelse kan udtrække personlige oplysninger fra disse kalendere uden ejernes viden."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Tillader, at en applikation viser tilstanden for alle netværk."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"fuld internetadgang"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Tillader, at en applikation opretter netværks-sockets."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"skriv indstillinger for adgangspunktnavn"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Tillader, at en applikation ændrer APN-indstillingerne, f.eks. enhver APNs Proxy og Port."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"ændre/opfange netværksindstillinger og trafik"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Tillader, at en applikation opfanger og kontrollerer al netværkstrafik for f.eks. at ændre proxy og port for en APN. Ondsindede applikationer kan overvåge, omdirigere eller ændre netværkspakker uden din viden."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"skift netværksforbindelse"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Tillader, at en applikation ændrer netværksforbindelsens tilstand."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Skift tethering-forbindelse"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Du har indtastet din pinkode forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Du har tegnet dit mønster til at låse op forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> forsøg mere vil du blive bedt om at låse din tabletcomputer op ved hjælp af dit Google-login"\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> forsøg mere vil du blive bedt om at låse din telefon op ved hjælp af dit Google-login"\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Du har forsøgt at låse tabletten op forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter yderligere <xliff:g id="NUMBER_1">%d</xliff:g> mislykkede forsøg nulstilles tabletten til fabriksindstillingerne, og alle brugerdata mistes."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Du har forsøgt at låse telefonen op forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter yderligere <xliff:g id="NUMBER_1">%d</xliff:g> mislykkede forsøg, nulstilles telefonen til fabriksindstillingerne, og alle brugerdata mistes."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Du har forsøgt at låse tabletten op forkert <xliff:g id="NUMBER">%d</xliff:g> gange. Tabletten nulstilles til fabriksindstillingerne."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Du har forsøgt at låse telefonen op forkert <xliff:g id="NUMBER">%d</xliff:g> gange. Telefonen nulstilles til fabriksindstillingerne."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Prøv igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Har du glemt mønstret?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Oplåsning af konto"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Tillader, at applikationen kan føje meddelelser til din telefonsvarers indbakke."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Skift browsertilladelser for geografisk placering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Giver en applikation tilladelse til at ændre browserens tilladelser for geografisk placering. Skadelige applikationer kan bruge dette til at tillade, at placeringsoplysninger sendes til vilkårlige websteder."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"bekræft pakker"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Tillader, at applikationen bekræfter, at en pakke kan installeres."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bind til en bekræftelse af pakker"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Giver indehaveren ret til at sende anmodninger om bekræftelse af pakker. Dette bør aldrig være nødvendigt for almindelige applikationer."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du, at browseren skal huske denne adgangskode?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ikke nu"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Husk"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"indtast"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"slet"</string>
<string name="search_go" msgid="8298016669822141719">"Søg"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Søg"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Søgeforespørgsel"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Ryd forespørgslen"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Indsend forespørgslen"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Stemmesøgning"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"For 1 måned siden"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Før for 1 måned siden"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Klip"</string>
<string name="copy" msgid="2681946229533511987">"Kopier"</string>
<string name="paste" msgid="5629880836805036433">"Indsæt"</string>
- <string name="replace" msgid="8333608224471746584">"Erstat"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Erstat"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopier webadresse"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstmarkering"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Vælg en applikation for USB-enheden"</string>
<string name="noApplications" msgid="1691104391758345586">"Der er ingen applikationer, der kan foretage denne handling."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Applikationen <xliff:g id="APPLICATION">%1$s</xliff:g> er desværre stoppet."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> er desværre stoppet."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> svarer ikke."\n\n"Vil du lukke den?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> svarer ikke."\n\n" Vil du lukke den?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Genaktivere det med Indstillinger &gt; Applikationer &gt; Administrer applikationer."</string>
<string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) har overtrådt sin egen StrictMode-politik."</string>
<string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har overtrådt sin egen StrictMode-politik."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android opgraderes..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimerer applikation <xliff:g id="NUMBER_0">%1$d</xliff:g> ud af <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Starter applikationer."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Gennemfører start."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> er i gang"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Vælg for at skifte applikation"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Skift applikation?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Lydstyrke for alarm"</string>
<string name="volume_notification" msgid="2422265656744276715">"Lydstyrke for meddelelser"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Lydstyrke"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-lydstyrke. Tryk for at skifte til lydløs."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Lydstyrke for ringetone. Tryk for at skifte til lydløs."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Lydstyrke for opkald. Tryk for at skifte til lydløs."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Lydstyrke for medier. Tryk for at skifte til lydløs."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Lydstyrke for meddelelser. Tryk for at skifte til lydløs."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Lydstyrke for bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Lydstyrke for ringetone"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Lydstyrke for opkald"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Lydstyrke for medier"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Lydstyrke for meddelelser"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Standardringetone"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standardringetone (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Lydløs"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"har en dårlig internetforbindelse."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct-drift. Dette vil slukke for Wi-Fi-klient / hotspot-drift."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kunne ikke starte Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kunne ikke starte Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Anmodning om konfiguration af Wi-Fi Direct-forbindelse fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik på OK for at acceptere."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Anmodning om konfiguration af Wi-Fi Direct-forbindelse fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Indtast pinkode for at fortsætte."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-pinkoden <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> skal angives på peer-enheden <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for at fortsætte konfiguration af forbindelsen"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annuller"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kort blev fjernet"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Det mobile netværk vil være utilgængeligt, indtil du udskifter SIM-kortet."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Det mobile netværk er utilgængeligt, indtil du genstarter med et gyldigt SIM-kort."</string>
<string name="sim_done_button" msgid="827949989369963775">"Udfør"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kort blev tilføjet"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Du skal genstarte enheden for at få adgang til det mobile netværk."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Der opstod et problem med at slå USB-lagringen fra. Sørg for, at du har demonteret USB-værten, og prøv så igen."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Slå USB-lagring til"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Hvis du slår USB-lagring til, vil nogle af de applikationer, som du bruger, stoppe, og de kan være utilgængelige, indtil du slår USB-lagring til igen."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-handlingen mislykkedes"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-handlingen mislykkedes"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tilsluttet som en medieenhed"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Tilsluttet som et kamera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Demonterer SD-kort..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Sletter USB-lager..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Sletter SD-kort..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB-lager kunne ikke slettes."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"USB-lager kunne ikke slettes."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kunne ikke slette USB-lagring."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Kunne ikke slette SD-kort."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kortet blev fjernet, før det blev demonteret."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-lager bliver kontrolleret."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-kortet bliver kontrolleret."</string>
@@ -1113,12 +1108,20 @@
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"markeret"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"ikke markeret"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"markeret"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"ikke markeret"</string>
- <string name="switch_on" msgid="551417728476977311">"til"</string>
- <string name="switch_off" msgid="7249798614327155088">"fra"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"trykket ned"</string>
- <string name="togglebutton_not_pressed" msgid="4495147725636134425">"ikke trykket ned"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"udvalgt"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"ikke valgt"</string>
+ <string name="switch_on" msgid="551417728476977311">"tændt"</string>
+ <string name="switch_off" msgid="7249798614327155088">"slukket"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"trykket på"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"ikke trykket på"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuller"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Slet"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Udført"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ændring af tilstand"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Angiv"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tast. Du skal bruge et headset for at høre tastelyd, når du indtaster en adgangskode."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naviger op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-data er deaktiveret"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktiveret"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktiveret"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tryk for at aktivere"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G/3G-datagrænse er overskredet"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G-datagrænsen er overskredet"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobildatagrænsen er overskredet"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> over den angivne grænse"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Tryk for at aktivere"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G-data overskredet"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Grænsen for 4G-data er overskredet"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobildatagrænsen er overskredet"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> over den fastsatte grænse"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Baggrundsdata er begrænsede"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Tryk for at fjerne begrænsningen"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhedscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dette certifikat er gyldigt."</string>
<string name="issued_to" msgid="454239480274921032">"Udstedt til:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vælg aktivitet"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Del med:"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Enhed låst."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 214e1f4..7358d90 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Authentifizierung ist fehlgeschlagen."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Authentifizierung via Proxy-Server ist fehlgeschlagen."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Es konnte keine Verbindung zum Server hergestellt werden."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Die Server-Kommunikation ist fehlgeschlagen. Versuchen Sie es später erneut."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Die Server-Kommunikation ist fehlgeschlagen. Versuchen Sie es später erneut."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Zeitüberschreitung bei Serververbindung."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Die Seite enthält zu viele Server-Redirects."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Das Protokoll wird nicht unterstützt."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Ermöglicht einer App, Notfall-Broadcasts zu empfangen und zu verarbeiten. Diese Berechtigung steht nur Systemanwendungen zur Verfügung."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"Kurznachrichten senden"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Ermöglicht der App das Senden von SMS. Bei schädlichen Anwendungen können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"SMS-Nachrichten ohne Bestätigung senden"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Ermöglicht der App das Senden von SMS. Bei schädlichen Apps können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS oder MMS lesen"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ermöglicht einer App, auf Ihrem Tablet oder Ihrer SIM-Karte gespeicherte SMS zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre vertraulichen Nachrichten."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Ermöglicht einer App, auf Ihrem Telefon oder Ihrer SIM-Karte gespeicherte Kurznachrichten zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre vertraulichen Nachrichten."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"Kontaktdaten schreiben"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Ermöglicht einer App, die auf Ihrem Tablet gespeicherten Kontaktdaten (Adressen) zu ändern. Schädliche Anwendungen können so Ihre Kontaktdaten löschen oder verändern."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Ermöglicht einer App, die auf Ihrem Telefon gespeicherten Kontaktdaten (Adressen) zu ändern. Schädliche Anwendungen können so Ihre Kontaktdaten löschen oder verändern."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"Profildaten lesen"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ermöglicht einer App, alle Ihre persönlichen Profilinformationen zu lesen. Schädliche Apps können Sie damit identifizieren und Ihre persönlichen Daten an andere Personen weitergeben."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"Profildaten schreiben"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ermöglicht einer App, Ihre persönlichen Profilinformationen zu ändern. Schädliche Apps können so Ihre Profildaten löschen oder ändern."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"Ihre Profildaten lesen"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ermöglicht der App, auf Ihrem Gerät gespeicherte persönliche Profilinformationen einzusehen, darunter Ihren Namen und Ihre Kontaktinformationen. Die App kann Sie somit identifizieren und Ihre Profilinformationen an andere senden."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"In Ihre Profildaten schreiben"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ermöglicht der App, auf Ihrem Gerät gespeicherte persönliche Profilinformationen zu ändern, darunter Ihren Namen und Ihre Kontaktinformationen, sowie Informationen hinzuzufügen. Andere Apps können Sie somit identifizieren und Ihre Profilinformationen an andere senden."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"Kalendertermine sowie vertrauliche Informationen lesen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ermöglicht einer App das Lesen aller Kalendertermine, die auf Ihrem Tablet gespeichert sind, einschließlich der Termine von Freunden oder Kollegen. Schädliche Apps mit dieser Berechtigung können aus diesen Kalendern ohne das Wissen der Eigentümer persönliche Informationen extrahieren."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ermöglicht einer App das Lesen aller Kalendertermine, die auf Ihrem Telefon gespeichert sind, einschließlich der Termine von Freunden oder Kollegen. Schädliche Apps mit dieser Berechtigung können aus diesen Kalendern ohne das Wissen der Eigentümer persönliche Informationen extrahieren."</string>
@@ -443,10 +441,10 @@
<string name="permdesc_useCredentials" msgid="7416570544619546974">"Ermöglicht einer App, Authentifizierungs-Token anzufordern"</string>
<string name="permlab_accessNetworkState" msgid="6865575199464405769">"Netzwerkstatus anzeigen"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Ermöglicht einer App, den Status aller Netzwerke anzuzeigen"</string>
- <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"uneingeschränkter Internetzugriff"</string>
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Uneingeschränkter Internetzugriff"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ermöglicht einer App, Netzwerk-Sockets einzurichten"</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"Einstellungen für Zugriffspunktname schreiben"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ermöglicht einer App, die APN-Einstellungen wie Proxy und Port eines Zugriffspunkts zu ändern"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"Netzwerkeinstellungen und -verkehr ändern/abfangen"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ermöglicht einer App, Netzwerkeinstellungen zu ändern und Netzwerkverkehr abzufangen und zu überprüfen, um beispielsweise den Proxy und den Port eines beliebigen Zugriffspunkts zu ändern. Schädliche Apps können so Netzwerkpakete ohne Ihr Wissen überwachen, weiterleiten oder ändern."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"Netzwerkkonnektivität ändern"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ermöglicht einer App, den Status der Netzwerkkonnektivität zu ändern"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Tethering-Konnektivität ändern"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Sie haben Ihre PIN <xliff:g id="NUMBER_0">%d</xliff:g> Mal falsch eingegeben. "\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g> Mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Tablet mithilfe Ihrer Google-Anmeldeinformationen zu entsperren. "\n\n"Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Telefon mithilfe Ihrer Google-Anmeldeinformationen zu entsperren. "\n\n"Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Sie haben <xliff:g id="NUMBER_0">%d</xliff:g>-mal erfolglos versucht, das Tablet zu entsperren. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen wird das Tablet auf die Werkseinstellungen zurückgesetzt und alle Nutzerdaten gehen verloren."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Sie haben <xliff:g id="NUMBER_0">%d</xliff:g> Mal erfolglos versucht, das Telefon zu entsperren. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen wird das Telefon auf die Werkseinstellungen zurückgesetzt und alle Nutzerdaten gehen verloren."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Sie haben <xliff:g id="NUMBER">%d</xliff:g>-mal erfolglos versucht, das Tablet zu entsperren. Das Tablet wird nun auf die Werkseinstellungen zurückgesetzt."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Sie haben <xliff:g id="NUMBER">%d</xliff:g>-mal erfolglos versucht, das Telefon zu entsperren. Das Telefon wird nun auf die Werkseinstellungen zurückgesetzt."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Versuchen Sie es in <xliff:g id="NUMBER">%d</xliff:g> Sekunden erneut."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Muster vergessen?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Kontoentsperrung"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Ermöglicht der App das Hinzufügen von Nachrichten zu Ihrem Mailbox-Posteingang"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Geolokalisierungsberechtigungen des Browsers ändern"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ermöglicht einer App, die Geolokalisierungsberechtigungen des Browsers zu ändern. Schädliche Anwendungen können dies nutzen, um das Senden von Standortinformationen an willkürliche Websites zuzulassen."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"Pakete überprüfen"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Ermöglicht der App, zu überprüfen, ob ein Paket installiert werden kann."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"An Paketprüfung binden"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Ermöglicht es dem Inhaber, Anfragen für die Paketprüfung zu senden. Sollte für normale Apps nicht benötigt werden."</string>
<string name="save_password_message" msgid="767344687139195790">"Möchten Sie, dass der Browser dieses Passwort speichert?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Nicht jetzt"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Speichern"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"löschen"</string>
<string name="search_go" msgid="8298016669822141719">"Suchen"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Suche"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Suchanfrage"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Anfrage löschen"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Anfrage senden"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Sprachsuche"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Vor 1 Monat"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vor mehr als 1 Monat"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Ausschneiden"</string>
<string name="copy" msgid="2681946229533511987">"Kopieren"</string>
<string name="paste" msgid="5629880836805036433">"Einfügen"</string>
- <string name="replace" msgid="8333608224471746584">"Ersetzen"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Ersetzen"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL kopieren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Text auswählen..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textauswahl"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Anwendung für das USB-Gerät auswählen"</string>
<string name="noApplications" msgid="1691104391758345586">"Diese Aktion kann von keiner Anwendung ausgeführt werden."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Leider wurde <xliff:g id="APPLICATION">%1$s</xliff:g> beendet."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Leider wurde der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> beendet."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> reagiert nicht."\n\n"Möchten Sie sie schließen?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktivität <xliff:g id="ACTIVITY">%1$s</xliff:g> reagiert nicht."\n\n"Möchten Sie sie beenden?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Erneute Aktivierung unter \"Einstellungen\" &gt; \"Apps\" &gt; \"Apps verwalten\""</string>
<string name="smv_application" msgid="295583804361236288">"Die Anwendung <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) hat gegen ihre selbsterzwungene StrictMode-Richtlinie verstoßen."</string>
<string name="smv_process" msgid="5120397012047462446">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> hat gegen seine selbsterzwungene StrictMode-Richtlinie verstoßen."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android wird aktualisiert..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> von <xliff:g id="NUMBER_1">%2$d</xliff:g> wird optimiert."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Apps werden gestartet."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Start wird abgeschlossen."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> läuft"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Zum Wechseln in die Anwendung auswählen"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Anwendung wechseln?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Lautstärke für Wecker"</string>
<string name="volume_notification" msgid="2422265656744276715">"Benachrichtigungslautstärke"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Lautstärke"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-Lautstärke: zum Stummschalten tippen"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Klingeltonlautstärke: zum Stummschalten tippen"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Anruflautstärke: zum Stummschalten tippen"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Lautstärke für Medien: zum Stummschalten tippen"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Lautstärke für Benachrichtigungen: zum Stummschalten tippen"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-Lautstärke"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Klingeltonlautstärke"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Anruflautstärke"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Medienlautstärke"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Benachrichtigungslautstärke"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Standard-Klingelton"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standard-Klingelton (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Lautlos"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"hat eine schlechte Internetverbindung."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Direct-Betrieb starten. Hierdurch wird der WLAN-Client-/-Hotspot-Betrieb deaktiviert."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct konnte nicht gestartet werden."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Starten von Wi-Fi Direct nicht möglich"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Anfrage für Wi-Fi Direct-Verbindungseinrichtung von <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klicken Sie auf \"OK\", um sie zu akzeptieren."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Anfrage für Wi-Fi Direct-Verbindungseinrichtung von <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Geben Sie zum Fortfahren die PIN ein."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Die WPS-PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> muss auf dem Peer-Gerät <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> eingegeben werden, damit die Verbindungseinrichtung fortgesetzt werden kann."</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Abbrechen"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-Karte entfernt"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Das Mobilfunknetz ist erst wieder verfügbar, nachdem Sie die SIM-Karte ersetzt haben."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Das Mobilfunknetz ist erst wieder verfügbar, wenn Sie einen Neustart mit einer gültigen SIM-Karte durchführen."</string>
<string name="sim_done_button" msgid="827949989369963775">"Fertig"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-Karte hinzugefügt"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Sie müssen Ihr Gerät neu starten, um auf das Mobilfunknetz zuzugreifen."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Beim Deaktivieren des USB-Speichers ist ein Problem aufgetreten. Überprüfen Sie, ob Sie den USB-Host getrennt haben, und versuchen Sie es erneut."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB-Speicher aktivieren"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Wenn Sie den USB-Speicher aktivieren, werden einige von Ihnen verwendete Anwendungen angehalten und sind möglicherweise nicht verfügbar, bis Sie den USB-Speicher wieder deaktivieren."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-Vorgang fehlgeschlagen"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-Vorgang fehlgeschlagen"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Als Mediengerät angeschlossen"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Als Kamera angeschlossen"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD-Karte wird getrennt..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB-Speicher wird gelöscht..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"SD-Karteninhalt wird gelöscht..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB-Speicher konnte nicht gelöscht werden."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"USB-Speicher konnte nicht gelöscht werden."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Löschen des USB-Speichers nicht möglich"</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Löschen der SD-Karte nicht möglich"</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-Karte wurde vor dem Trennvorgang entfernt."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Der USB-Speicher wird zurzeit überprüft."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Die SD-Karte wird zurzeit überprüft."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"Aus"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"Gedrückt"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"Nicht gedrückt"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Abbrechen"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Löschen"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fertig"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Zum Hören der Tasten bei der Eingabe eines Passworts ist ein Headset erforderlich."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Nach oben navigieren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Weitere Optionen"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-/3G-Daten deaktiviert"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-Daten deaktiviert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobile Daten deaktiviert"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Zum Aktivieren klicken"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Zum Aktivieren tippen"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-/3G-Datenlimit überschritten"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G-Datenlimit überschritten"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobildatenlimit überschritten"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> über dem vorgegebenen Limit"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> über dem vorgegebenen Limit"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Hintergrunddaten beschränkt"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Beschränkung durch Tippen entf."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Sicherheitszertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dies ist ein gültiges Zertifikat."</string>
<string name="issued_to" msgid="454239480274921032">"Ausgestellt für:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Aktion auswählen"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Weitergeben an ..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Gerät gesperrt"</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 3581d88..4edfa7c 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Ο έλεγχος ταυτότητας δεν ήταν επιτυχής."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Ο έλεγχος ταυτότητας μέσω του διακομιστή μεσολάβησης δεν ήταν επιτυχής."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Η σύνδεση στον διακομιστή δεν ήταν επιτυχής."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Η επικοινωνία με τον διακομιστή απέτυχε. Προσπαθήστε ξανά αργότερα."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Δεν ήταν δυνατή η επικοινωνία με το διακομιστή. Προσπαθήστε ξανά αργότερα."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Το όριο χρόνου της σύνδεσης στον διακομιστή έληξε."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Αυτή η σελίδα περιέχει πάρα πολλές ανακατευθύνσεις διακομιστή."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Το πρωτόκολλο δεν υποστηρίζεται."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Επιτρέπει σε μια εφαρμογή να κάνει λήψη και επεξεργασία μηνυμάτων από μεταδόσεις σε περιπτώσεις έκτακτης ανάγκης. Αυτή η άδεια είναι διαθέσιμη μόνο σε εφαρμογές συστήματος."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"αποστολή μηνυμάτων SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Επιτρέπει σε μια εφαρμογή την αποστολή μηνυμάτων SMS. Κακόβουλες εφαρμογές ενδέχεται να σας χρεώσουν αποστέλλοντας μηνύματα χωρίς την έγκρισή σας."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"αποστολή μηνυμάτων SMS χωρίς επιβεβαίωση"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Επιτρέπει σε μια εφαρμογή την αποστολή μηνυμάτων SMS. Τυχόν κακόβουλες εφαρμογές ενδέχεται να σας χρεώσουν αποστέλλοντας μηνύματα χωρίς την έγκρισή σας."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"ανάγνωση μηνυμάτων SMS ή MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Επιτρέπει σε μια εφαρμογή την ανάγνωση μηνυμάτων SMS που είναι αποθηκευμένα στο tablet σας ή στην κάρτα SIM. Κακόβουλες εφαρμογές ενδέχεται να αναγνώσουν τα εμπιστευτικά σας μηνύματα."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Επιτρέπει σε μια εφαρμογή την ανάγνωση μηνυμάτων SMS που είναι αποθηκευμένα στο τηλέφωνό σας ή στην κάρτα SIM. Κακόβουλες εφαρμογές ενδέχεται να αναγνώσουν τα εμπιστευτικά σας μηνύματα."</string>
@@ -266,7 +264,7 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Επιτρέπει σε εφαρμογές να παρακολουθούν τα πλήκτρα που πατάτε, ακόμη και σε μια άλλη εφαρμογή (όπως π.χ. η καταχώρηση ενός κωδικού πρόσβασης). Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"δέσμευση σε μέθοδο εισόδου"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας μεθόδου εισόδου. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
- <string name="permlab_bindTextService" msgid="7358378401915287938">"σύνδεση σε υπηρεσία ανταλλαγής μηνυμάτων"</string>
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"δέσμευση σε υπηρεσία ανταλλαγής μηνυμάτων"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Επιτρέπει στον κάτοχο τη σύνδεση με τη διεπαφή ανωτέρου επιπέδου μιας υπηρεσίας ανταλλαγής μηνυμάτων (π.χ. SpellCheckerService). Δεν είναι απαραίτητο για κανονικές εφαρμογές."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"δέσμευση σε υπηρεσία VPN"</string>
<string name="permdesc_bindVpnService" msgid="6011554199384584151">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας Vpn. Δεν απαιτείται ποτέ για κανονικές εφαρμογές."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"εγγραφή δεδομένων επαφής"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Επιτρέπει σε μια εφαρμογή να τροποποιεί τα δεδομένα επαφής (διεύθυνσης) που είναι αποθηκευμένα στο tablet σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα επαφών σας."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Επιτρέπει σε μια εφαρμογή να τροποποιεί τα δεδομένα επαφής (διεύθυνσης) που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα επαφών σας."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"ανάγνωση δεδομένων προφίλ"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Επιτρέπει σε μια εφαρμογή την ανάγνωση όλων των προσωπικών στοιχείων προφίλ. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να εξακριβώσουν την ταυτότητά σας και για να στείλουν τα προσωπικά σας στοιχεία σε άλλους χρήστες."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"εγγραφή δεδομένων προφίλ"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Επιτρέπει σε μια εφαρμογή την τροποποίηση των προσωπικών στοιχείων προφίλ. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα προσωπικά σας δεδομένα."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"ανάγν. δεδ. προφ."</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Επιτρέπει στην εφαρμογή να διαβάζει τις πληροφορίες του προσωπικού προφίλ που έχουν αποθηκευτεί στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι η εφαρμογή μπορεί να σας αναγνωρίσει και να στείλει πληροφορίες του προφίλ σας σε άλλους."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"εγγρ. σε δεδ. προφίλ"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Επιτρέπει στην εφαρμογή την αλλαγή ή την προσθήκη στο προσωπικό προφίλ πληροφοριών οι οποίες έχουν αποθηκευτεί στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι άλλες εφαρμογές μπορούν να σας αναγνωρίσουν και να στείλουν πληροφορίες του προφίλ σας σε άλλους."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ανάγνωση συμβάντων ημερολογίου και εμπιστευτικών πληροφοριών"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Επιτρέπει σε μια εφαρμογή να διαβάζει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο tablet σας, συμπεριλαμβανομένων των συμβάντων φίλων ή συναδέλφων. Μια κακόβουλη εφαρμογή με αυτήν την άδεια μπορεί να εξαγάγει προσωπικά στοιχεία από αυτά τα ημερολόγια χωρίς να το γνωρίζουν οι κάτοχοί τους."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Επιτρέπει σε μια εφαρμογή να διαβάζει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο τηλέφωνό σας, συμπεριλαμβανομένων των συμβάντων φίλων ή συναδέλφων. Μια κακόβουλη εφαρμογή με αυτήν την άδεια μπορεί να εξαγάγει προσωπικά στοιχεία από αυτά τα ημερολόγια χωρίς να το γνωρίζουν οι κάτοχοί τους."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Επιτρέπει σε μια εφαρμογή την προβολή της κατάστασης όλων των δικτύων."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"πλήρης πρόσβαση στο Διαδίκτυο"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Επιτρέπει σε μια εφαρμογή τη δημιουργία υποδοχών δικτύου (sockets)."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"εγγραφή ρυθμίσεων Ονόματος σημείου πρόσβασης (APN)"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει τις ρυθμίσεις APN, όπως Διακομιστής μεσολάβησης και Θύρα για ένα APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"αλλαγή/παρεμπόδιση ρυθμίσεων δικτύου και κυκλοφορίας"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Επιτρέπει σε μια εφαρμογή την αλλαγή των ρυθμίσεων δικτύου και την παρεμπόδιση και επιθεώρηση της κυκλοφορίας στο δίκτυο, για παράδειγμα την αλλαγή του διακομιστή μεσολάβησης και της θύρας οποιουδήποτε APN. Θα μπορούσε να γίνεται παρακολούθηση, ανακατεύθυνση ή τροποποίηση πακέτων δικτύου από κακόβουλες εφαρμογές εν αγνοία σας."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"αλλαγή συνδεσιμότητας δικτύου"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Επιτρέπει σε μια εφαρμογή την αλλαγή της κατάστασης συνδεσιμότητας δικτύου."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"αλλαγή συνδεσιμότητας της σύνδεσης μέσω κινητής συσκευής"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Καταχωρίσατε εσφαλμένα το PIN σας<xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Προσπαθήστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση της σύνδεσής σας Google."\n\n" Προσπαθήστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση της σύνδεσής σας Google."\n\n" Προσπαθήστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το tablet <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες, το tablet θα επαναφερθεί στις εργοστασιακές ρυθμίσεις και όλα τα δεδομένα χρήστη θα χαθούν."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το τηλέφωνο <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες, το τηλέφωνο θα επαναφερθεί στις εργοστασιακές ρυθμίσεις και όλα τα δεδομένα χρήστη θα χαθούν."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το tablet <xliff:g id="NUMBER">%d</xliff:g> φορές. Το tablet θα επαναφερθεί στην εργοστασιακή προεπιλογή."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Προσπαθήσατε να ξεκλειδώσετε εσφαλμένα το τηλέφωνο <xliff:g id="NUMBER">%d</xliff:g> φορές. Το τηλέφωνο θα επαναφερθεί στην εργοστασιακή προεπιλογή."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Προσπαθήστε ξανά σε <xliff:g id="NUMBER">%d</xliff:g> δευτερόλεπτα."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Ξεχάσατε το μοτίβο;"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ξεκλείδωμα λογαριασμού"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Επιτρέπει στην εφαρμογή να προσθέτει μηνύματα στα εισερχόμενα του αυτόματου τηλεφωνητή σας."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Τροποποίηση δικαιωμάτων γεωγραφικής θέσης προγράμματος περιήγησης"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Επιτρέπει σε μια εφαρμογή την τροποποίηση των δικαιωμάτων γεωγραφικής θέσης του προγράμματος περιήγησης. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να επιτρέψουν την αποστολή στοιχείων τοποθεσίας σε αυθαίρετους ιστότοπους."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"επαλήθευση πακέτων"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Επιτρέπει στην εφαρμογή να επαληθεύσει τη δυνατότητα εγκατάστασης ενός πακέτου."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"δέσμευση με επαλήθευση πακέτου"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Επιτρέπει στον κάτοχο να υποβάλλει ερωτήματα σε προγράμματα επαλήθευσης πακέτου. Δεν απαιτείται για κανονικές εφαρμογές."</string>
<string name="save_password_message" msgid="767344687139195790">"Θέλετε το πρόγραμμα περιήγησης να διατηρήσει αυτόν τον κωδικό πρόσβασης;"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Να μην γίνει τώρα"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Διατήρηση"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"εισαγωγή"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"διαγραφή"</string>
<string name="search_go" msgid="8298016669822141719">"Αναζήτηση"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Αναζήτηση"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Ερώτημα αναζήτησης"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Απαλοιφή ερωτήματος"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Υποβολή ερωτήματος"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Φωνητική αναζήτηση"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"πριν από 1 μήνα"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Παλαιότερα από 1 μήνα"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Αποκοπή"</string>
<string name="copy" msgid="2681946229533511987">"Αντιγραφή"</string>
<string name="paste" msgid="5629880836805036433">"Επικόλληση"</string>
- <string name="replace" msgid="8333608224471746584">"Αντικατάσταση"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Αντικατάσταση"</string>
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Επιλογή κειμένου"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Επιλέξτε μια εφαρμογή για τη συσκευή USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Δεν υπάρχουν εφαρμογές, οι οποίες μπορούν να εκτελέσουν αυτήν την ενέργεια."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Δυστυχώς, η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> έχει σταματήσει."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Δυστυχώς, η διαδικασία <xliff:g id="PROCESS">%1$s</xliff:g> έχει σταματήσει."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Η εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g> δεν ανταποκρίνεται."\n\n"Θέλετε να την κλείσετε;"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Η δραστηριότητα <xliff:g id="ACTIVITY">%1$s</xliff:g> δεν ανταποκρίνεται."\n\n"Θέλετε να την κλείσετε;"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ενεργοποίηση αυτής της εφαρμογής από τις Ρυθμίσεις &gt; Εφαρμογές &gt; Διαχείριση εφαρμογών."</string>
<string name="smv_application" msgid="295583804361236288">"Η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> (διεργασία <xliff:g id="PROCESS">%2$s</xliff:g>) παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Η διεργασία <xliff:g id="PROCESS">%1$s</xliff:g> παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Το Android αναβαθμίζεται"</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Βελτιστοποίηση της εφαρμογής <xliff:g id="NUMBER_0">%1$d</xliff:g> του <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Εκκίνηση εφαρμογών."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Ολοκλήρωση εκκίνησης."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> εκτελείται"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Επιλέξτε για αλλαγή σε εφαρμογή"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Αλλαγή εφαρμογών;"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Ένταση ήχου ξυπνητηριού"</string>
<string name="volume_notification" msgid="2422265656744276715">"Ένταση ήχου ειδοποίησης"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Ένταση ήχου"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Ένταση ήχου Bluetooth. Πατήστε για να ενεργοποιήσετε την αθόρυβη λειτουργία."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ένταση ήχου κλήσης. Πατήστε για να ενεργοποιήσετε την αθόρυβη λειτουργία."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Ένταση ήχου κλήσης. Πατήστε για να ενεργοποιήσετε την αθόρυβη λειτουργία."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Ένταση ήχου πολυμέσων. Πατήστε για να ενεργοποιήσετε την αθόρυβη λειτουργία."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ένταση ήχου ειδοποίησης. Πατήστε για να ενεργοποιήσετε την αθόρυβη λειτουργία."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Ένταση ήχου Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ένταση ήχου κλήσης"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Ένταση ήχου κλήσεων"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Ένταση ήχου πολυμέσων"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ένταση ήχου ειδοποιήσεων"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Προεπιλεγμένος ήχος κλήσης"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Προεπιλεγμένος ήχος κλήσης (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Σίγαση"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"έχει κακή σύνδεση διαδικτύου."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Ξεκινήστε τη λειτουργία Wi-Fi Direct. Θα απενεργοποιηθεί η λειτουργία πελάτη/φορητού σημείου πρόσβασης Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Αποτυχία έναρξης Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Δεν ήταν δυνατή η εκκίνηση του Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Αίτημα για ρύθμιση σύνδεσης Wi-Fi Direct από το <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Κάντε κλικ στο κουμπί OK για αποδοχή."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Αίτημα ρύθμισης σύνδεσης Wi-Fi Direct από τη διεύθυνση <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Καταχωρίστε το pin για να συνεχίσετε."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Το pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> πρέπει να καταχωριστεί στην ομότιμη συσκευή <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> για να συνεχιστεί η ρύθμιση της σύνδεσης"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Ακύρωση"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Η κάρτα SIM αφαιρέθηκε"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Το δίκτυο κινητής τηλεφωνίας δεν θα είναι διαθέσιμο έως ότου αντικαταστήσετε την κάρτα SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Το δίκτυο κινητής τηλεφωνίας δεν θα είναι διαθέσιμο μέχρι να κάνετε επανεκκίνηση αφού τοποθετήσετε μια έγκυρη κάρτα SIM."</string>
<string name="sim_done_button" msgid="827949989369963775">"Τέλος"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Προστέθηκε κάρτα SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Πρέπει να επανεκκινήσετε τη συσκευή σας για να αποκτήσετε πρόσβαση στο δίκτυο κινητής τηλεφωνίας"</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Παρουσιάστηκε πρόβλημα κατά την απενεργοποίηση του αποθηκευτικού χώρου USB. Βεβαιωθείτε ότι έχετε αφαιρέσει την υποδοχή USB και προσπαθήστε ξανά."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Ενεργοποίηση αποθηκευτικού χώρου USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Εάν ενεργοποιήσετε τον αποθηκευτικό χώρο USB, ορισμένες από τις εφαρμογές που χρησιμοποιείτε θα σταματήσουν και ενδέχεται να μην είναι διαθέσιμες μέχρι να απενεργοποιήσετε τον αποθηκευτικό χώρο USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Απέτυχε η λειτουργία USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Λειτουργία USB ανεπιτυχής"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ΟΚ"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Συνδεδεμένο ως συσκευή πολυμέσων"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Συνδεδεμένο ως φωτογραφική μηχανή"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Αποπροσάρτηση κάρτας SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Διαγραφή αποθηκευτικού χώρου USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Διαγραφή κάρτας SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Αποτυχία διαγραφής αποθηκευτικού χώρου USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Αποτυχία διαγραφής αποθηκευτικού χώρου USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Δεν ήταν δυνατή η διαγραφή του χώρου αποθήκευσης USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Δεν ήταν δυνατή η διαγραφή της κάρτας SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Η κάρτα SD καταργήθηκε πριν την αποπροσάρτησή της."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Αυτή τη στιγμή γίνεται έλεγχος του αποθηκευτικού χώρου USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Γίνεται έλεγχος της κάρτας SD."</string>
@@ -1111,14 +1106,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Επιλογή λογαριασμού"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Αύξηση"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Μείωση"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"έχει επιλεγχθεί"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"ελέγχθηκε"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"δεν επιλέχθηκε"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"επιλεγμένο"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"δεν έχει επιλεγεί"</string>
<string name="switch_on" msgid="551417728476977311">"ενεργοποίηση"</string>
- <string name="switch_off" msgid="7249798614327155088">"απενεργοποιημένο"</string>
+ <string name="switch_off" msgid="7249798614327155088">"απενεργοποιημένη"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"πατήθηκε"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"δεν πατήθηκε"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ακύρωση"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Διαγραφή"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Τέλος"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Αλλαγή τρόπου"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Πλήκτρο. Για να ακούσετε τον ήχο του πατήματος των πλήκτρων απαιτούνται ακουστικά."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Πλοήγηση προς τα επάνω"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Περισσότερες επιλογές"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Τα δεδ. 2G-3G απενεργοποιήθηκαν"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Τα δεδομ. κιν. τηλεφ. απενεργοπ."</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"πατήστε για ενεργοποίηση"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Υπέρβαση του ορίου δεδομ. 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Ξεπεράστηκε το όριο δεδομένων 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Υπέρβαση ορίου δεδομ. κιν. τηλεφ."</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> πάνω από το καθορισμένο όριο"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Άγγιγμ.για ενεργ."</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Ξεπεράστηκε το όριο δεδομ. 2G-3G"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Ξεπεράστηκε το όριο δεδομένων 4G"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Ξεπεράστηκε το όριο δεδομένων κινητής τηλεφωνίας"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> πάνω από το καθορισμένο όριο"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Περ.δεδομ.παρασκ."</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Άγγιγ.για κατ.περ."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Πιστοποιητικό ασφαλείας"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Αυτό το πιστοποιητικό είναι έγκυρο."</string>
<string name="issued_to" msgid="454239480274921032">"Εκδόθηκε σε:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Επιλογή δραστηριότητας"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Κοινή χρήση με..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Η συσκευή κλειδώθηκε."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index f7577ad..9ba3121 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Authentication was unsuccessful."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Authentication via the proxy server was unsuccessful."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"The connection to the server was unsuccessful."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"The server failed to communicate. Try again later."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"The server couldn\'t communicate. Try again later."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"The connection to the server timed out."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"The page contains too many server redirects."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"The protocol is not supported."</string>
@@ -671,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"You have entered your PIN incorrectly <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Please try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"You have drawn your unlock pattern incorrectly <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using your Google sign-in."\n\n" Please try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"You have drawn your unlock pattern incorrectly <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using your Google sign-in."\n\n" Please try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The tablet will now be reset to factory default."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The phone will now be reset to factory default."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Forgotten pattern?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Account unlock"</string>
@@ -850,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Cut"</string>
<string name="copy" msgid="2681946229533511987">"Copy"</string>
<string name="paste" msgid="5629880836805036433">"Paste"</string>
- <string name="replace" msgid="8333608224471746584">"Replace"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Replace"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copy URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Select text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Text selection"</string>
@@ -874,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Select an application for the USB device"</string>
<string name="noApplications" msgid="1691104391758345586">"No applications can perform this action."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Unfortunately, <xliff:g id="APPLICATION">%1$s</xliff:g> has stopped."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Unfortunately, the process <xliff:g id="PROCESS">%1$s</xliff:g> has stopped."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> is not responding."\n\n"Would you like to close it?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Activity <xliff:g id="ACTIVITY">%1$s</xliff:g> is not responding."\n\n"Would you like to close it?"</string>
@@ -894,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reenable this with Settings &gt; Applications &gt; Manage applications."</string>
<string name="smv_application" msgid="295583804361236288">"The application <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced StrictMode policy."</string>
<string name="smv_process" msgid="5120397012047462446">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has violated its self-enforced StrictMode policy."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android is upgrading..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimising application <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Start applications."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Finishing boot."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> running"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Select to switch to application"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Switch applications?"</string>
@@ -934,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"has a poor Internet connection."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct operation. This will turn off Wi-Fi client/hot-spot operation."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Failed to start Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Couldn\'t start Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct connection setup request from <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Click OK to accept."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct connection setup request from <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Enter PIN to proceed."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> needs to be entered on the peer device <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for connection setup to proceed"</string>
@@ -975,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"We\'ve encountered a problem turning off USB storage. Check to ensure that you have unmounted the USB host, then try again."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Turn off USB storage"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"If you turn on USB storage, some applications that you are using will stop and may be unavailable until you turn off USB storage."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB operation failed"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB operation unsuccessful"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connected as a media device"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connected as a camera"</string>
@@ -1075,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Unmounting SD card..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Erasing USB storage..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Erasing SD card..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Failed to erase USB storage."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Failed to erase USB storage."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Couldn\'t erase USB storage."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Couldn\'t erase SD card."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD card was removed before being unmounted."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB storage is currently being checked."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD card is currently being checked."</string>
@@ -1108,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"off"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"pressed"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"not pressed"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Done"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Key. Headset required to hear keys while typing a password."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigate up"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"More options"</string>
@@ -1120,15 +1134,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G data disabled"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G data disabled"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobile data disabled"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Tap to enable"</string>
+ <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi data disabled"</string>
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Touch to enable"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G data limit exceeded"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G data limit exceeded"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobile data limit exceeded"</string>
+ <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi data limit exceeded"</string>
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> over specified limit"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
- <skip />
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Background data restricted"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Touch to remove restriction"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Security certificate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"This certificate is valid."</string>
<string name="issued_to" msgid="454239480274921032">"Issued to:"</string>
@@ -1147,6 +1161,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Select activity"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Share with..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Device locked."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 0e9f605..17ca956 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"La autenticación no se ha realizado correctamente."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"La autenticación a través del servidor proxy no se ha realizado correctamente."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"La conexión al servidor no se ha realizado correctamente."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no envía comunicaciones. Vuelve a intentarlo más tarde."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no pudo establecer la comunicación. Vuelve a intentarlo más adelante."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Se ha agotado el tiempo de espera para la conexión al servidor."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"La página contiene demasiados redireccionamientos de servidor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"No se admite el protocolo."</string>
@@ -326,9 +326,9 @@
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permite que una aplicación modifique los datos de (dirección) guardados en tu tablet. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar los datos de contacto."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Admite una aplicación que modifica los datos de (dirección de) contacto guardados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar los datos de contacto."</string>
<string name="permlab_readProfile" msgid="6824681438529842282">"Leer tus datos de perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que la aplicación lea información del perfil personal almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que la aplicación puede identificarte y enviar tu información de perfil a otras personas."</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que la aplicación lea información personal del perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que la aplicación puede identificarte y enviar tu información de perfil a otras personas."</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"Escrib. en datos de tu perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que la aplicación cambie o agregue información del perfil personal almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que otras aplicaciones pueden identificarte y enviar tu información de perfil a otras personas."</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que la aplicación cambie o agregue información personal del perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que otras aplicaciones pueden identificarte y enviar tu información de perfil a otras personas."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"Leer eventos de calendario e información confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que una aplicación lea todos los eventos de calendario almacenados en la tableta, incluidos los de tus amigos o compañeros de trabajo. Una aplicación maliciosa con este permiso puede extraer información personal de estos calendarios sin que los propietarios lo sepan."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que una aplicación lea todos los eventos del calendario almacenados en tu teléfono, incluidos los de tus amigos o compañeros de trabajo. Una aplicación maliciosa con este permiso puede extraer información personal de estos calendarios sin que los propietarios lo sepan."</string>
@@ -671,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Has ingresado tu PIN de manera incorrecta <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Has extraído incorrectamente tu gráfico de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu tablet al inciar sesión en Google."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Has extraído incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu teléfono al iniciar sesión en Google. "\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Intentaste desbloquear la tableta <xliff:g id="NUMBER_0">%d</xliff:g> veces pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica de la tableta y se pierdan todos los datos de usuario."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Intentaste desbloquear el teléfono <xliff:g id="NUMBER_0">%d</xliff:g> veces pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del teléfono y se pierdan todos los datos de usuario."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Intentaste desbloquear la tableta <xliff:g id="NUMBER">%d</xliff:g> veces pero no lo lograste. Se restablecerán los valores predeterminados de fábrica de la tableta."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Intentaste desbloquear el teléfono <xliff:g id="NUMBER">%d</xliff:g> veces pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del teléfono."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Vuelve a intentarlo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"¿Olvidaste el patrón?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloquear cuenta"</string>
@@ -728,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permite que la aplicación agregue mensajes a la bandeja de entrada de tu buzón de voz."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar los permisos de ubicación geográfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que una aplicación modifique los permisos de ubicación geográfica del navegador. Las aplicaciones maliciosas pueden utilizarlos para permitir el envío de información sobre la ubicación a sitos web de forma arbitraria."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"Verificar paquetes"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite a la aplicación verificar si se puede instalar un paquete."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"Vincular a un verificador de paquetes"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite que el titular solicite verificadores de paquetes. Este permiso no debería ser necesario en el caso de las aplicaciones normales."</string>
<string name="save_password_message" msgid="767344687139195790">"¿Quieres recordar esta contraseña en el navegador?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ahora no."</string>
<string name="save_password_remember" msgid="6491879678996749466">"Recuerda"</string>
@@ -748,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ingresar"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"borrar"</string>
<string name="search_go" msgid="8298016669822141719">"Buscar"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Buscar"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Consulta de búsqueda"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Borrar la consulta"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Búsqueda por voz"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"hace 1 mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Anterior a 1 mes atrás"</string>
<plurals name="num_seconds_ago">
@@ -859,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="replace" msgid="8333608224471746584">"Reemplazar"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Reemplazar"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
@@ -883,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selecciona una aplicación para el dispositivo USB."</string>
<string name="noApplications" msgid="1691104391758345586">"Ninguna aplicación puede realizar esta acción."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Lamentablemente <xliff:g id="APPLICATION">%1$s</xliff:g> se detuvo."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Lamentablemente el proceso <xliff:g id="PROCESS">%1$s</xliff:g> se detuvo."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"La aplicación <xliff:g id="APPLICATION">%2$s</xliff:g> no responde."\n\n"¿Quieres cerrarla?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> no responde."\n\n"¿Quieres cerrarla?"</string>
@@ -903,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Volver a habilitar esto con Configuración &gt; Aplicaciones &gt; Administrar aplicaciones."</string>
<string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha violado su política StrictMode autoimpuesta."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha violado su política StrictMode autoimpuesta."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android se está actualizando..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimizando la aplicación <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Iniciando las aplicaciones"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Finalizando el inicio"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en ejecución"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Selecciona cambiar la aplicación"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"¿Deseas cambiar aplicaciones?"</string>
@@ -943,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"tiene una mala conexión a Internet."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar operación de Wi-Fi Direct. Esto desactivará la operación de cliente/zona Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Error al iniciar Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"No se pudo iniciar Wi-Fi Direct."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Haz clic en Aceptar."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ingresa el PIN para continuar."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Debes introducir el PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> en el otro dispositivo <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para continuar con la configuración de conexión."</string>
@@ -984,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de haber desmontado el host USB, luego vuelve a intentarlo."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar el almacenamiento USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activas el almacenamiento USB, algunas aplicaciones que estás usando se detendrán y es posible que no estén disponibles hasta que desactives el almacenamiento USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Error en el funcionamiento del USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Se produjo un error durante la operación del USB."</string>
<string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como un dispositivo de medios"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectado como una cámara"</string>
@@ -1084,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Desmontando la tarjeta SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Borrando almacenamiento USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Borrando tarjeta SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"No pudo borrar el almacenamiento USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"No pudo borrar el almacenamiento USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"No se pudo borrar el almacenamiento USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"No se pudo borrar la tarjeta SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Se ha extraído la tarjeta SD antes de ser desmontada."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Se está verificando el almacenamiento USB en este momento."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Se está verificando la tarjeta SD en este momento."</string>
@@ -1117,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"Desactivado"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"presionado"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"sin presionar"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Eliminar"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Listo"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayúscula"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingresar"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. Se requieren auriculares para escuchar el sonido de las teclas al tipear una contraseña."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1129,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datos de 2 GB - 3 GB desactivados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos de 4 GB desactivados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles desactivados"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"pulsa para habilitarla"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Tocar para habilitar"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Supera límite de datos de 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Límite de datos de 4G superado"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Límite de datos móviles superado"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> sobre el límite especificado"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> sobre el límite especificado"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Datos de referencia restringidos"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Tocar para eliminar restricción"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido a:"</string>
@@ -1156,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Seleccionar actividad"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Compartir con..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado"</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 2375f01..a49b5e4 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"La autenticación no se ha realizado correctamente."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"La autenticación mediante el servidor proxy no se ha realizado correctamente."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"La conexión con el servidor no se ha realizado correctamente."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no ha podido establecer la comunicación. Vuelve a intentarlo más tarde."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no ha podido establecer la comunicación. Inténtalo de nuevo más tarde."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Se ha agotado el tiempo de espera de conexión al servidor."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"La página contiene demasiados redireccionamientos de servidor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protocolo no admitido"</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permite que una aplicación reciba y procese mensajes de emergencia. Este permiso solo está disponible para las aplicaciones del sistema."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"enviar mensajes SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permite que la aplicación envíe mensajes SMS. Es posible que tengas que pagar si las aplicaciones malintencionadas envían mensajes sin tu confirmación."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"enviar mensajes SMS sin confirmación"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permite que la aplicación envíe mensajes SMS. Es posible que tengas que pagar por lo mensajes que las aplicaciones malintencionadas envíen sin tu confirmación."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"leer SMS o MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permite que la aplicación lea mensajes SMS almacenados en el tablet o en la tarjeta SIM. Las aplicaciones malintencionadas pueden leer los mensajes confidenciales."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permite que la aplicación lea mensajes SMS almacenados en el teléfono o en la tarjeta SIM. Las aplicaciones malintencionadas pueden leer los mensajes confidenciales."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"escribir datos de contacto"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permite que una aplicación modifique los datos de contacto (direcciones) almacenados en el tablet. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar los datos de contacto."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permite que una aplicación modifique los datos de contacto (direcciones) almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar tus datos de contacto."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"leer datos de perfil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que una aplicación lea toda la información de tu perfil personal. Las aplicaciones malintencionadas pueden utilizar este permiso para identificarte y para enviar tu información personal a otros usuarios."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"escribir datos de perfil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que una aplicación modifique la información de tu perfil personal. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o para modificar los datos de tu perfil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"acceder a datos de tu perfil"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que la aplicación acceda a información del perfil personal almacenada en el dispositivo, como tu nombre o la información de contacto, lo que significa que la aplicación puede identificarte y enviar la información de tu perfil a otros usuarios."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"escribir en datos de tu perfil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que la aplicación modifique la información del perfil personal almacenada en el dispositivo, como tu nombre o la información de contacto, o que añada contenido a la misma, lo que significa que otras aplicaciones pueden identificarte y enviar la información de tu perfil a otros usuarios."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"leer eventos de calendario e información confidencial"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que una aplicación lea todos los eventos de calendario almacenados en el tablet, incluidos los de tus amigos o tus compañeros de trabajo. Las aplicaciones malintencionadas con este permiso pueden extraer información personal de estos calendarios sin el consentimiento de los propietarios."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que una aplicación lea todos los eventos de calendario almacenados en el teléfono, incluidos los de tus amigos o tus compañeros de trabajo. Las aplicaciones malintencionadas con este permiso pueden extraer información personal de estos calendarios sin el consentimiento de los propietarios."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permite que una aplicación vea el estado de todas las redes."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"acceso íntegro a Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permite que una aplicación cree sockets de red."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"escribir la configuración de nombre de punto de acceso"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite que una aplicación modifique los valores de configuración de un APN como, por ejemplo, el proxy y el puerto de cualquier APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"cambiar/interceptar el tráfico y la configuración de red"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite que una aplicación modifique la configuración de red y que intercepte e inspeccione todo el tráfico de red, por ejemplo, para cambiar el proxy y el puerto de cualquier APN. Las aplicaciones malintencionadas pueden controlar, redirigir o modificar los paquetes de red sin el consentimiento del usuario."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"cambiar la conectividad de red"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permite que una aplicación cambie el estado de la conectividad de red."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"cambiar conectividad de anclaje a red"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Has introducido un PIN incorrecto <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Inténtalo de nuevo dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Has realizado <xliff:g id="NUMBER_0">%d</xliff:g> intentos fallidos de creación del patrón de desbloqueo. Si realizas <xliff:g id="NUMBER_1">%d</xliff:g> intentos fallidos más, se te pedirá que desbloquees el tablet con tus credenciales de acceso de Google."\n\n" Espera <xliff:g id="NUMBER_2">%d</xliff:g> segundos e inténtalo de nuevo."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Has realizado <xliff:g id="NUMBER_0">%d</xliff:g> intentos fallidos de creación del patrón de desbloqueo. Si realizas <xliff:g id="NUMBER_1">%d</xliff:g> intentos fallidos más, se te pedirá que desbloquees el teléfono con tus credenciales de acceso de Google."\n\n" Espera <xliff:g id="NUMBER_2">%d</xliff:g> segundos e inténtalo de nuevo."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Has intentado desbloquear el tablet <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo has conseguido. Faltan <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos para que se restablezcan los datos de fábrica y se perderán todos los datos del usuario."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Has intentado desbloquear el teléfono <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo has conseguido. Faltan <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más para que se restablezcan los datos de fábrica y se perderán todos los datos de usuario."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Has intentado desbloquear el tablet <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo has conseguido. Ahora, se restablecerán los datos de fábrica en el dispositivo."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Has intentado desbloquear el teléfono <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo has conseguido. Ahora, se restablecerán los datos de fábrica en el dispositivo."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Espera <xliff:g id="NUMBER">%d</xliff:g> segundos y vuelve a intentarlo."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"¿Has olvidado el patrón?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloqueo de cuenta"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permite que la aplicación añada mensajes a la bandeja de entrada del buzón de voz."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar los permisos de ubicación geográfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que una aplicación modifique los permisos de ubicación geográfica del navegador. Las aplicaciones malintencionadas pueden utilizar este permiso para permitir el envío de información sobre la ubicación a sitios web arbitrarios."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verificar paquetes"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite que la aplicación verifique si se puede instalar un paquete."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"enlazar con un detector de paquetes"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite hacer solicitudes de detectores de paquetes. Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="save_password_message" msgid="767344687139195790">"¿Deseas que el navegador recuerde esta contraseña?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ahora no"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Recordar"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"intro"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"suprimir"</string>
<string name="search_go" msgid="8298016669822141719">"Buscar"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Buscar"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Consulta"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Borrar consulta"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Búsqueda por voz"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Hace un mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Hace más de un mes"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="replace" msgid="8333608224471746584">"Sustituir"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Sustituir"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Seleccionar una aplicación para el dispositivo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Ninguna aplicación puede realizar esta acción."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Se ha detenido la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Se ha detenido el proceso <xliff:g id="PROCESS">%1$s</xliff:g>."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"La aplicación <xliff:g id="APPLICATION">%2$s</xliff:g> no responde."\n\n"¿Quieres cerrarla?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> no responde."\n\n"¿Quieres cerrarla?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Vuelve a habilitar esta opción en Ajustes &gt; Aplicaciones &gt; Administrar aplicaciones."</string>
<string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode autoaplicable."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha infringido su política StrictMode autoaplicable."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Actualizando Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimizando aplicación <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Iniciando aplicaciones"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Finalizando inicio"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en ejecución"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Seleccionar para cambiar a la aplicación"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"¿Cambiar de aplicación?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volumen de alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volumen de notificaciones"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volumen"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volumen de Bluetooth. Toca para activar el modo silencio."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volumen de tono. Toca para activar el modo silencio."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volumen de llamada. Toca para activar el modo silencio."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volumen multimedia. Toca para activar el modo silencio."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volumen de notificaciones. Toca para activar el modo silencio."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volumen de Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volumen del tono"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volumen de llamada"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volumen multimedia"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volumen de notificaciones"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Tono predeterminado"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Tono predeterminado (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silencio"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"tiene una mala conexión a Internet."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar funcionamiento de Wi-Fi Direct. Se desactivará el funcionamiento de la zona o del cliente Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Error al iniciar Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"No se ha podido iniciar Wi-Fi Direct."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitud de configuración de conexión de Wi-Fi Direct procedente de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Haz clic en Aceptar para continuar."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitud de configuración de conexión de Wi-Fi Direct procedente de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Introduce el PIN para continuar."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Debes introducir el PIN WPS (<xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>) en el otro dispositivo (<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>) para continuar con la configuración de conexión."</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"Aceptar"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Tarjeta SIM eliminada"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"La red móvil volverá a estar disponible cuando sustituyas la tarjeta SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"La red móvil no estará disponible hasta que reinicies el dispositivo con una tarjeta SIM válida."</string>
<string name="sim_done_button" msgid="827949989369963775">"Listo"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Tarjeta SIM añadida"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Para acceder a la red móvil, debes reiniciar el dispositivo."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de haber desactivado el host USB y, a continuación, vuelve a intentarlo."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar almacenamiento USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activas el almacenamiento USB, se detendrán algunas aplicaciones que estás utilizando y estas no estarán disponibles hasta que lo desactives."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"No se ha podido realizar la operación USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Error de funcionamiento de USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como un dispositivo de medios"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectado como una cámara"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Desactivando tarjeta SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Borrando almacenamiento USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Borrando tarjeta SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Error al borrar almacenamiento USB"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Error al borrar almacenamiento USB"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"No se ha podido borrar el almacenamiento USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"No se ha podido borrar la tarjeta SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"La tarjeta SD se ha extraído antes de desactivarla."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Se está comprobando el almacenamiento USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Se está comprobando la tarjeta SD."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"desactivado"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"pulsado"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"sin pulsar"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Eliminar"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Listo"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio de modo"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayús"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Intro"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Se necesitan auriculares para escuchar las teclas mientras se escribe una contraseña."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datos 2G-3G inhabilitados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos 4G inhabilitados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles inhabilitados"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tocar para habilitar"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Tocar para habilitar"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Límite de datos 2G-3G superado"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Límite de datos 4G superado"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Límite de datos móviles superado"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"Límite superado en <xliff:g id="SIZE">%s</xliff:g>"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"Límite superado en <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Datos de referencia restringidos"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Tocar para eliminar restricción"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Seleccionar actividad"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Compartir con..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado"</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 3eba129..c659cfd 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"به برنامه کاربردی امکان می دهد تا پیام های پخش اضطراری را دریافت کرده و پردازش کند. این مجوز فقط برای برنامه های سیستمی قابل استفاده است."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"ارسال پیامک ها"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"به برنامه کاربردی اجازه می دهد پیامک ارسال کند. برنامه های مضر ممکن است با ارسال پیام هایی بدون تأیید شما، هزینه هایی را برای شما ایجاد کنند."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"ارسال پیامک بدون تأیید"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"به برنامه کاربردی اجازه ارسال پیامک می‌دهد. برنامه‌های مخرب ممکن است با ارسال پیام بدون تأیید شما هزینه‌هایی را برایتان ایجاد نمایند."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"خواندن پیامک یا MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"به برنامه اجازه می دهد پیامک های ذخیره شده در رایانه لوحی شما یا سیم کارت را بخواند. برنامه های مضر می توانند پیام های محرمانه شما را بخوانند."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"به برنامه کاربردی اجازه می دهد پیامک های ذخیره شده در گوشی شما یا سیم کارت را بخواند. برنامه های مضر می توانند پیام های محرمانه شما را بخوانند."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"نوشتن اطلاعات تماس"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"به یک برنامه کاربردی اجازه می دهد اطلاعات تماس (آدرس) ذخیره شده در رایانه لوحی شما را تغییر دهد. برنامه های مضر می توانند از این امکان برای حذف یا تغییر اطلاعات تماس شما استفاده کنند."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"به یک برنامه کاربردی اجازه می دهد اطلاعات تماس (آدرس) ذخیره شده در گوشی شما را تغییر دهد. برنامه های مضر می توانند از این امکان برای حذف یا تغییر اطلاعات تماس شما استفاده کنند."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"خواندن داده های نمایه"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"به برنامه امکان می دهد تا تمام اطلاعات نمایه شخصی شما را بخواند. برنامه های مضر می توانند از این حالت برای شناسایی شما و ارسال اطلاعات شخصی شما به سایر افراد استفاده کنند."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"نوشتن داده های نمایه"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"به یک برنامه امکان می دهد تا اطلاعات نمایه شخصی شما را تغییر دهد. برنامه های مضر می توانند از این حالت برای پاک کردن یا تغییر داده های نمایه شما استفاده کنند."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"خواندن داده‌های نمایه شما"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"به برنامه کاربردی اجازه می‌دهد اطلاعات مربوط به نمایه شخصی ذخیره شده بر روی دستگاه شما مانند نام و اطلاعات تماس شما را بخواند. این بدان معناست که برنامه می‌تواند شما را شناسایی کند و اطلاعات نمایه‌ شما را به دیگران ارسال نماید."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"نوشتن در داده‌های نمایه شما"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"به برنامه کاربردی اجازه می‌دهد به تغییر و یا اضافه کردن اطلاعات نمایه شخصی ذخیره شده بر روی دستگاه شما مانند نام و اطلاعات تماس شما، بپردازد. این بدان معناست که برنامه‌های دیگر می‌توانند شما را شناسایی کنند و اطلاعات نمایه شما را به دیگران ارسال نمایند."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"خواندن رویدادهای تقویم به همراه اطلاعات محرمانه"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"به برنامه اجازه خواندن تمام رویدادهای تقویم موجود در رایانه لوحی شما را می‌دهد که این شامل تقویم دوستان و همکاران نیز می‌شود. یک برنامه مخرب با این اجازه می‌تواند بدون اطلاع مالک، اطلاعات شخصی را از این تقویم‌ها استخراج کند."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"به یک برنامه کاربردی اجازه خواندن تمام رویدادهای تقویم موجود در گوشی شما را می‌دهد که این شامل تقویم دوستان و همکاران نیز می‌شود. یک برنامه مخرب با این اجازه می‌تواند بدون اطلاع مالک، اطلاعات شخصی را از این تقویم‌ها استخراج کند."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"به یک برنامه کاربردی اجازه می دهد وضعیت مربوط به تمام شبکه ها را مشاهده کند."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"دسترسی کامل به اینترنت"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"به یک برنامه کاربردی اجازه می دهد سوکت های شبکه را ایجاد کند."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"نوشتن تنظیمات نام نقطه دستیابی"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"به یک برنامه کاربردی اجازه می دهد تنظیمات APN، از قبیل پروکسی و درگاه APN، را تغییر دهد."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"تغییر/رهگیری تنظیمات شبکه و ترافیک"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"به یک برنامه کاربردی اجازه می‌دهد تنظیمات شبکه و رهگیری و بازرسی تمام ترافیک شبکه را تغییر دهد، به عنوان مثال برای تغییر پروکسی و درگاه از هر APN. برنامه‌های مخرب بدون اطلاع شما می‌توانند به نظارت، تغییر مسیر، یا اصلاح بسته‌های شبکه بپردازند."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"تغییر قابلیت اتصال شبکه"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"به یک برنامه کاربردی اجازه می دهد وضعیت اتصال شبکه را تغییر دهد."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"تغییر قابلیت اتصال داده با سیم"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"شما کد پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه وارد کرده اید. "\n\n"لطفاً پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می شود که برای بازگشایی قفل رایانه لوحی خود به Google وارد شوید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده اید. <xliff:g id="NUMBER_1">%d</xliff:g> تلاش های ناموفق بیشتر سبب می شود از شما خواسته شود که برای بازگشایی قفل گوشی خود به برنامه Google وارد شوید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"در <xliff:g id="NUMBER">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"الگو را فراموش کرده اید؟"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"بازگشایی قفل حساب"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"به برنامه کاربردی اجازه می‌دهد تا پیام‌ها را به صندوق دریافت پست صوتی شما اضافه کند."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"اصلاح کردن مجوزهای مکان جغرافیایی مرورگر"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"به یک برنامه کاربردی اجازه می دهد مجوزهای مکان جغرافیایی مرورگر را تغییر دهد. برنامه های مضر می توانند از این گزینه استفاده کرده و اطلاعات مربوط به مکان را به وب سایت های غیر قانونی ارسال کنند."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"تأیید بسته‌ها"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"به برنامه اجازه می‌دهد قابل نصب بودن بسته را تأیید کند."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"اتصال به یک تأیید کننده بسته"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"به دارنده اجازه ایجاد درخواست تأییدکنندگان بسته را می‌دهد. برای برنامه‌های عادی مورد نیاز نیست."</string>
<string name="save_password_message" msgid="767344687139195790">"می خواهید مرورگر این رمز ورود را به خاطر داشته باشد؟"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"اکنون خیر"</string>
<string name="save_password_remember" msgid="6491879678996749466">"به خاطر سپردن"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ورود"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"حذف"</string>
<string name="search_go" msgid="8298016669822141719">"جستجو"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"جستجو"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"درخواست جستجو"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"پاک کردن عبارت جستجو"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"ارسال عبارت جستجو"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"جستجوی صوتی"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ماه قبل"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل از 1 ماه گذشته"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"برش"</string>
<string name="copy" msgid="2681946229533511987">"کپی"</string>
<string name="paste" msgid="5629880836805036433">"جای گذاری"</string>
- <string name="replace" msgid="8333608224471746584">"جایگزینی"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"جایگزینی"</string>
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"این را با تنظیمات &gt; برنامه‌ها &gt; مدیریت برنامه‌های کاربردی دوباره فعال کنید."</string>
<string name="smv_application" msgid="295583804361236288">"برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> (پردازش <xliff:g id="PROCESS">%2$s</xliff:g>) خط مشی StrictMode اجرای خودکار را نقض کرده است."</string>
<string name="smv_process" msgid="5120397012047462446">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> خط مشی StrictMode اجرای خودکار خود را نقض کرده است."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> در حال اجرا"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"انتخاب برای رفتن به برنامه"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"جابجایی در برنامه ها؟"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"میزان صدای هشدار"</string>
<string name="volume_notification" msgid="2422265656744276715">"میزان صدای اعلان"</string>
<string name="volume_unknown" msgid="1400219669770445902">"میزان صدا"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"میزان صدای بلوتوث. ضربه بزنید تا به حالت بیصدا بروید."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"میزان صدای آهنگ زنگ. ضربه بزنید تا به حالت بیصدا بروید."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"میزان صدای تماس. ضربه بزنید تا به حالت بیصدا بروید."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"میزان صدای رسانه. ضربه بزنید تا به حالت بیصدا بروید."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"میزان صدای اعلان. ضربه بزنید تا به حالت بیصدا بروید."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"میزان صدای بلوتوث"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"میزان صدای آهنگ زنگ"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"میزان صدای تماس"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"میزان صدای رسانه"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"میزان صدای اعلان"</string>
<string name="ringtone_default" msgid="3789758980357696936">"آهنگ زنگ پیش فرض"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"آهنگ زنگ پیش فرض (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"ساکت"</string>
@@ -956,11 +961,11 @@
<string name="sms_control_yes" msgid="2532062172402615953">"تأیید"</string>
<string name="sms_control_no" msgid="1715320703137199869">"لغو"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"سیم کارت برداشته شد"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"تا زمانی که سیم کارت را عوض نکنید شبکه تلفن همراه در دسترس نخواهد بود."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"تا وقتی که با یک سیم‌کارت معتبر راه‌اندازی مجدد نکنید شبکه تلفن همراه غیر قابل‌ دسترس خواهد بود."</string>
<string name="sim_done_button" msgid="827949989369963775">"انجام شد"</string>
<string name="sim_added_title" msgid="3719670512889674693">"سیم کارت اضافه شد"</string>
- <string name="sim_added_message" msgid="1209265974048554242">"برای دسترسی به شبکه تلفن همراه باید دستگاه خود را مجددا راه اندازی کنید."</string>
- <string name="sim_restart_button" msgid="4722407842815232347">"راه اندازی مجدد"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"برای دسترسی به شبکه تلفن همراه باید دستگاه خود را مجددا راه‌اندازی کنید."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"راه‌اندازی مجدد"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"تنظیم زمان"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"تاریخ تنظیم"</string>
<string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
@@ -1111,14 +1116,30 @@
<string name="choose_account_label" msgid="4191313562041125787">"انتخاب یک حساب"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"افزایش"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"کاهش"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"علامت‌دار"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"علامت زده"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"بدون علامت"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"انتخاب شده"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"انتخاب شد"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"انتخاب نشده"</string>
<string name="switch_on" msgid="551417728476977311">"روشن"</string>
<string name="switch_off" msgid="7249798614327155088">"خاموش"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"فشرده شد"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"فشرده نشد"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"حرکت به بالا"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"سایر گزینه ها"</string>
@@ -1131,11 +1152,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"داده های 2G-3G غیرفعال شد"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"داده 4G غیر فعال شده است"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"داده های تلفن همراه غیرفعال شد"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"برای فعال کردن ضربه بزنید"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"داده 2G-3G بیش از حد مجاز"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"داده 4G بیش از حد مجاز است"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"اطلاعات 2G-3G بیش از حد مجاز است"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"بیش از حد مجاز 4G است"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"داده‌های تلفن همراه از مقدار مجاز بیشتر است"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> از حد تعیین شده بیشتر شد"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> از حد مشخص شده بیشتر شد"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
<!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
@@ -1156,8 +1181,8 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"اثر انگشت SHA-1"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"مشاهده همه..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"انتخاب فعالیت"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"اشتراک گذاری با..."</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"دستگاه قفل شده است."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"اشتراک‌گذاری با..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"دستگاه قفل است."</string>
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 144160f..b3957c0 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Todennus epäonnistui."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Todennus välityspalvelimen kautta epäonnistui."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Palvelimeen ei saatu yhteyttä."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Ei vastausta palvelimelta. Yritä myöhemmin uudelleen."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Ei vastausta palvelimelta. Yritä myöhemmin uudelleen."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Palvelinyhteys aikakatkaistiin."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Sivu sisältää liikaa palvelimen uudelleenohjauksia."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokollaa ei tueta."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Antaa sovelluksen vastaanottaa ja käsitellä hätätilalähetysten viestejä. Tämä lupa on vain järjestelmäsovelluksien käytettävissä."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"lähetä tekstiviestejä"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Antaa sovelluksen lähettää tekstiviestejä. Haitalliset sovellukset saattavat lähettää viestejä ilman lupaasi ja näin kasvattaa puhelinlaskuasi."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"lähettää tekstiviestejä ilman vahvistusta"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Antaa sovelluksen lähettää tekstiviestejä. Haitalliset sovellukset voivat aiheuttaa sinulle kustannuksia lähettämällä viestejä ilman vahvistustasi."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"lue multimedia- tai tekstiviestejä"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Antaa sovelluksen lukea tablet-laitteellesi tai SIM-kortillesi tallennettuja tekstiviestejä. Haittasovellukset voivat lukea luottamuksellisia viestejäsi."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Antaa sovelluksen lukea puhelimeesi tai SIM-kortillesi tallennettuja tekstiviestejä. Haitalliset sovellukset saattavat lukea luottamuksellisia viestejäsi."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"kirjoita yhteystietoja"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Antaa sovelluksen muokata tablet-laitteellesi tallennettuja yhteystietoja (osoitteita). Haittasovellukset voivat käyttää tätä yhteystietojesi pyyhkimiseen tai muokkaamiseen."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Antaa sovelluksen muokata puhelimeen tallennettuja yhteystietoja (osoitteita). Haitalliset sovellukset voivat käyttää tätä yhteystietojen pyyhkimiseen tai muokkaamiseen."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"profiilitietojen lukeminen"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Sallii sovelluksen lukea yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä käyttäjien tunnistamiseen ja henkilötietojen levittämiseen muille."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"profiilitietojen kirjoittaminen"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Sallii sovelluksen muokata yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä profiilitietojen poistamiseen tai muokkaamiseen."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lukea profiilisi tiedot"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Sallii sovelluksen lukea yksityisiä profiilitietoja, kuten nimen ja yhteystiedot. Haittaohjelmat voivat käyttää tätä käyttäjien tunnistamiseen ja profiilitietojen levittämiseen muille."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"kirjoittaa profiilin tietoihin"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Sallii sovelluksen muuttaa tai lisätä laitteellesi tallennettuja yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä tunnistamiseesi ja profiilitietojesi lähettämiseen muille."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lue kalenteritapahtumia ja luottamuksellisia tietoja"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Antaa sovelluksen lukea kaikkia tablet-laitteelle tallennettuja kalenteritapahtumia (myös kavereiden ja työkavereiden lisäämiä). Haitalliset sovellukset voivat noutaa henkilötietoja kalentereista ilman omistajien lupaa."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Antaa sovelluksen lukea kaikkia puhelimeen tallennettuja kalenteritapahtumia (myös kavereiden ja työkavereiden lisäämiä). Haitalliset sovellukset voivat noutaa henkilötietoja kalentereista ilman omistajien lupaa."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Antaa sovelluksen tarkastella kaikkien verkkojen tilaa."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"käytä internetiä"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Antaa sovelluksen luoda verkkovastakkeita."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"kirjoita tukiaseman nimiasetuksia"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Antaa sovelluksen muokata APN-asetuksia, kuten APN:n välityspalvelinta tai porttia."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"muuttaa/kaapata verkkoasetuksia ja -liikennettä"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Antaa sovelluksen kaapata ja tarkastaa kaiken verkkoliikenteen esimerkiksi välityspalvelimen tai minkä tahansa APN-portin muuttamiseksi. Haitalliset sovellukset voivat tarkkailla, uudelleenohjata tai muokata verkkopaketteja tietämättäsi."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"muuta verkkoyhteyksiä"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Antaa sovelluksen muuttaa verkkoyhteyksien tilaa."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"muuta internetyhteyden jakamista"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Olet antanut PIN-koodisi väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Piirsit lukituksenpoistokuvin väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan tablet-laitteesi lukitus Google-sisäänkirjautumisen avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan puhelimesi lukitus Google-sisäänkirjautumisen avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Tablet-laitteen lukituksen poisto epäonnistui <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos teet vielä <xliff:g id="NUMBER_1">%d</xliff:g> epäonnistunutta yritystä, tablet-laitteeseen palautetaan tehdasasetukset ja kaikki käyttäjätiedot häviävät."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Puhelimen lukituksen poisto epäonnistui <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos teet vielä <xliff:g id="NUMBER_1">%d</xliff:g> epäonnistunutta yritystä, puhelimeen palautetaan tehdasasetukset ja kaikki käyttäjätiedot häviävät."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Tablet-laitteen lukituksen poisto epäonnistui <xliff:g id="NUMBER">%d</xliff:g> kertaa. Laitteeseen palautetaan nyt tehdasasetukset."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Puhelimen lukituksen poisto epäonnistui <xliff:g id="NUMBER">%d</xliff:g> kertaa. Puhelimeen palautetaan nyt tehdasasetukset."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Yritä uudelleen <xliff:g id="NUMBER">%d</xliff:g> sekunnin kuluttua."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Unohditko mallin?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Tilin lukituksen poisto"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Antaa sovelluksen lisätä viestejä saapuneisiin vastaajaviesteihin."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"muokkaa selaimen maantieteellisen sijainnin lupia"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Antaa sovelluksen muokata selaimen maantieteellisen sijainnin lupia. Haitalliset sovellukset saattavat käyttää tätä sijaintitietojen lähettämiseen satunnaisiin verkkosivustoihin."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"vahvista paketteja"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Antaa sovelluksen vahvistaa pakkauksen olevan asennettavissa."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"sitoudu paketin vahvistajaan"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Sovellus voi tehdä pakettien vahvistuspyyntöjä. Ei tavallisten sovelluksien käyttöön."</string>
<string name="save_password_message" msgid="767344687139195790">"Haluatko selaimen muistavan tämän salasanan?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ei nyt"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Muista"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"poista"</string>
<string name="search_go" msgid="8298016669822141719">"Haku"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Haku"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Hakulauseke"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Tyhjennä kysely"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Lähetä kysely"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Äänihaku"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"kuukausi sitten"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Yli kuukausi sitten"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Leikkaa"</string>
<string name="copy" msgid="2681946229533511987">"Kopioi"</string>
<string name="paste" msgid="5629880836805036433">"Liitä"</string>
- <string name="replace" msgid="8333608224471746584">"Korvaa"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Korvaa"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopioi URL-osoite"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekstin valinta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstin valinta"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Valitse sovellus USB-laitteelle"</string>
<string name="noApplications" msgid="1691104391758345586">"Yksikään sovellus ei voi suorittaa tätä toimintoa."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g> on pysähtynyt."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> on pysähtynyt."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> ei vastaa."\n\n"Haluatko sulkea sen?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Toiminto <xliff:g id="ACTIVITY">%1$s</xliff:g> ei vastaa."\n\n"Haluatko sulkea sen?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ota uudelleen käyttöön kohdasta Asetukset &gt; Sovellukset &gt; Hallinnoi sovelluksia."</string>
<string name="smv_application" msgid="295583804361236288">"Sovellus <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessi <xliff:g id="PROCESS">%2$s</xliff:g>) on rikkonut itse käyttöön ottamaansa StrictMode-käytäntöä."</string>
<string name="smv_process" msgid="5120397012047462446">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> on rikkonut itse käyttöön ottamaansa StrictMode-käytäntöä."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Androidia päivitetään..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimoidaan sovellusta <xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Käynnistetään sovelluksia."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Viimeistellään päivitystä."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> käynnissä"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Vaihda sovellusta"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Vaihdetaanko sovellusta?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Hälytyksien äänenvoimakkuus"</string>
<string name="volume_notification" msgid="2422265656744276715">"Ilmoituksen äänenvoimakkuus"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Äänenvoimakkuus"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-äänenvoimakkuus. Vaihda äänettömän ja tavallisen tilan välillä napauttamalla."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Soittoäänen voimakkuus. Vaihda äänettömän ja tavallisen tilan välillä napauttamalla."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Puhelun äänenvoimakkuus. Vaihda äänettömän ja tavallisen tilan välillä napauttamalla."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Median äänenvoimakkuus. Vaihda äänettömän ja tavallisen tilan välillä napauttamalla."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ilmoituksien äänenvoimakkuus. Vaihda äänettömän ja tavallisen tilan välillä napauttamalla."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-äänenvoimakkuus"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Soittoäänen voimakkuus"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Puhelun äänenvoimakkuus"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Median äänenvoimakkuus"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ilmoituksen äänenvoimakkuus"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Oletussoittoääni"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Oletussoittoääni (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Äänetön"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"on huono internetyhteys."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Suora wifi-yhteys"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Käynnistä suora wifi-toiminto. Wifi-asiakas/-yhteyspistetoiminto poistetaan käytöstä."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Suoran wifi-yhteyden käynnistäminen epäonnistui"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Suoran wifi-yhteyden käynnistäminen epäonnistui"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Hyväksy valitsemalla OK."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jatka antamalla PIN-koodi."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-PIN-koodi <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> tulee merkitä vertaislaitteeseen <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, jotta yhteyden muodostamista voidaan jatkaa"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Peruuta"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kortti poistettu"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Et voi käyttää mobiiliverkkoa, ennen kuin asetat SIM-kortin uudelleen paikalleen."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobiiliverkko ei ole käytettävissä, ennen kuin käynnistät uudelleen kelvollisella laitteeseen kytketyllä SIM-kortilla."</string>
<string name="sim_done_button" msgid="827949989369963775">"Valmis"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kortti lisätty"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Käynnistä laite uudelleen muodostaaksesi yhteyden mobiiliverkkoon."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ongelma USB-tallennustilan käytöstä poistamisessa. Tarkista, että olet poistanut USB-laitteen käytöstä ja yritä uudelleen."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Ota USB-tallennustila käyttöön"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Jos otat USB-tallennustilan käyttöön, osa käyttämistäsi sovelluksista pysähtyy eivätkä ne välttämättä ole käytössä kunnes poistat USB-tallennustilan käytöstä."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-toiminto epäonnistui"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-toiminto epäonnistui."</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Kytketty medialaitteena"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kytketty kamerana"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Poistetaan SD-korttia käytöstä..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Tyhjennetään USB-tallennustilaa..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Tyhjennetään SD-korttia..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">" USB-tallennustilan tyhjentäminen epäonnistui."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">" USB-tallennustilan tyhjentäminen epäonnistui."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB-tallennuslaitteen tyhjentäminen epäonnistui."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"SD-kortin tyhjentäminen epäonnistui."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kortti irrotettiin ennen sen käytöstä poistamista."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-tallennustilaa tarkistetaan."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-korttia tarkistetaan."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"pois käytöstä"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"painettu"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"ei painettu"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Peruuta"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Poista"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Tilan muutos"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Näppäin. Tarvitset kuulokkeet kuullaksesi näppäimenpainallukset kirjoittaessasi salasanaa."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Siirry ylös"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lisää asetuksia"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilitiedonsiirto pois käytöstä"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ota käyttöön napauttamalla"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Ota käyttöön koskettamalla"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G-tiedonsiirtoraja ylitetty"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G-tiedonsiirtoraja ylitetty"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiilitiedonsiirtoraja ylitetty"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> yli asetetun rajan"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> yli asetetun rajan"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Rajoitettu taustatietojen käyttö"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Poista rajoitus koskettamalla"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Suojausvarmenne"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Varmenne on voimassa."</string>
<string name="issued_to" msgid="454239480274921032">"Varmenteen saaja:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Valitse toiminto"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Jaa seuraavien kautta:"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Laite lukittu."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index b72c9b4..16ae103 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Échec de l\'authentification."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Échec de l\'authentification par un serveur proxy."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Échec de la connexion au serveur."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Échec de la communication avec le serveur. Veuillez réessayer ultérieurement."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Impossible de communiquer avec le serveur. Veuillez réessayer ultérieurement."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Délai de connexion au serveur dépassé."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Cette page contient trop de redirections de serveurs."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Ce protocole n\'est pas pris en charge."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permet à l\'application de recevoir et de traiter les messages de diffusion d\'urgence. Cette autorisation est uniquement disponible pour les applications système."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"Envoi de messages SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permet aux applications d\'envoyer des messages SMS. Des applications malveillantes peuvent entraîner des frais en envoyant des messages sans vous en demander la confirmation."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"envoyer des SMS sans confirmation"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permet aux applications d\'envoyer des messages SMS. Des applications malveillantes peuvent entraîner des frais en envoyant des messages sans vous en demander la confirmation."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"Lecture des SMS ou MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permet à l\'application de lire les SMS enregistrés dans la mémoire de votre tablette ou sur votre carte SIM. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permet à l\'application de lire les SMS enregistrés dans la mémoire de votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
@@ -269,7 +267,7 @@
<string name="permlab_bindTextService" msgid="7358378401915287938">"associer à un service de texte"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Permet à l\'application de s\'associer à l\'interface de haut niveau d\'un service de texte (par exemple, SpellCheckerService). Ne devrait jamais être nécessaire pour des applications standards."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"associer à un service VPN"</string>
- <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service VPN. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permet à l\'application autorisée de s\'associer à l\'interface de niveau supérieur d\'un service VPN. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"Se fixer sur un fond d\'écran"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permet au support de se fixer sur l\'interface de plus haut niveau d\'un fond d\'écran. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associer à un service widget"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"Édition des données d\'un contact"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permet à une application de modifier les données (adresses) associées à vos contacts et stockées sur votre tablette. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier les données de vos contacts."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permet à une application de modifier toutes les données de contact (adresses) enregistrées sur le téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier vos données de contact."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"lire les données de profil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet à une application de lire toutes vos informations personnelles de profil. Des applications malveillantes peuvent l\'utiliser pour vous identifier et envoyer vos informations personnelles à d\'autres personnes."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"modifier les données de profil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet à une application de modifier vos informations personnelles de profil. Des applications malveillantes peuvent utiliser cette autorisation pour effacer ou modifier les données de votre profil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lire vos données de profil"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permet à l\'application de lire les informations de profil personnelles stockées sur votre appareil, telles que votre nom et vos coordonnées. Cela signifie que l\'application peut vous identifier et envoyer vos informations de profil à d\'autres."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"modifier vos données de profil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permet à l\'application de modifier ou d\'ajouter des informations personnelles stockées sur le profil de votre appareil, telles que votre nom et vos coordonnées. Cela signifie que d\'autres applications peuvent vous identifier et envoyer vos informations de profil à d\'autres."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"consulter les événements d\'agenda ainsi que les informations confidentielles"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permet à une application de lire tous les événements d\'agendas stockés sur votre tablette, y compris ceux de vos amis ou de vos collègues. Une application malveillante disposant de cette autorisation peut extraire des informations personnelles de ces agendas à l\'insu de leur propriétaire."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permet à une application de consulter tous les événements d\'agendas stockés sur votre téléphone, y compris ceux de vos amis ou de vos collègues. Une application malveillante disposant de cette autorisation peut extraire des informations personnelles de ces agendas à l\'insu de leur propriétaire."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permet à une application d\'afficher l\'état de tous les réseaux."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Accès Internet complet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permet à une application de créer des connecteurs réseau."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"Écriture des paramètres \"Nom des points d\'accès\""</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permet à une application de modifier les paramètres APN (Nom des points d\'accès), comme le proxy ou le port de tout APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"changer/intercepter les paramètres et le trafic du réseau"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permet à une application de modifier les paramètres réseau et d\'intercepter et d\'inspecter tout le trafic réseau, par exemple pour changer le proxy et le port de tout APN. Des applications malveillantes pourraient surveiller, rediriger ou modifier les paquets réseau à votre insu."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"Modification de la connectivité du réseau"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permet à une application de modifier l\'état de la connectivité réseau."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Changer la connectivité du partage de connexion"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Vous avez saisi un code PIN incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. "\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Vous avez saisi un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide de votre identifiant Google."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Vous avez mal saisi le schéma de déverrouillage <xliff:g id="NUMBER_0">%d</xliff:g> fois. Au bout de <xliff:g id="NUMBER_1">%d</xliff:g> tentatives supplémentaires, vous devrez déverrouiller votre téléphone à l\'aide de votre identifiant Google."\n\n"Merci de réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Schéma oublié ?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Déverrouillage du compte"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permet à l\'application d\'ajouter des messages à votre messagerie vocale."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifier les autorisations de géolocalisation du navigateur"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permet à une application de modifier les autorisations de géolocalisation du navigateur. Les applications malveillantes peuvent se servir de cette fonctionnalité pour envoyer des informations de lieu à des sites Web arbitraires."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"vérifier les packages"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permet à l\'application de vérifier qu\'un package peut être installé."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"associer à un vérificateur de package"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permet à l\'application d\'effectuer des requêtes de vérificateur de package. Cette autorisation ne doit jamais être utilisée pour les applications standards."</string>
<string name="save_password_message" msgid="767344687139195790">"Voulez-vous que le navigateur se souvienne de ce mot de passe ?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Pas maintenant"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Mémoriser"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"entrée"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"supprimer"</string>
<string name="search_go" msgid="8298016669822141719">"Rechercher"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Rechercher"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Requête de recherche"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Effacer la requête"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Envoyer la requête"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Recherche vocale"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Il y a 1 mois"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Il y a plus d\'un mois"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Couper"</string>
<string name="copy" msgid="2681946229533511987">"Copier"</string>
<string name="paste" msgid="5629880836805036433">"Coller"</string>
- <string name="replace" msgid="8333608224471746584">"Remplacer"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Remplacer"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copier l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Sélect. le texte..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Sélection de texte"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Sélectionnez une application pour le périphérique USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Aucune application ne peut effectuer cette action."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Malheureusement, l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> s\'est arrêtée."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Malheureusement, le processus <xliff:g id="PROCESS">%1$s</xliff:g> s\'est arrêté."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"L\'application <xliff:g id="APPLICATION">%2$s</xliff:g> ne répond pas."\n\n"Voulez-vous la fermer ?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"L\'activité <xliff:g id="ACTIVITY">%1$s</xliff:g> ne répond pas."\n\n"Voulez-vous la fermer ?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Réactivez ce mode depuis Paramètres &gt; Applications &gt; Gérer les applications."</string>
<string name="smv_application" msgid="295583804361236288">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string>
<string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Mise à jour d\'Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimisation de l\'application <xliff:g id="NUMBER_0">%1$d</xliff:g> sur <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Lancement des applications"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Finalisation de la mise à jour."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en cours d\'exécution"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Sélectionner pour changer d\'application"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Passer d\'une application à l\'autre ?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volume"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volume des notifications"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume du Bluetooth. Appuyer pour passer en mode silencieux"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume de la sonnerie. Appuyer pour passer en mode silencieux"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume des appels. Appuyer pour passer en mode silencieux"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume des fichiers multimédias. Appuyer pour passer en mode silencieux"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume des notifications. Appuyer pour passer en mode silencieux"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume de la sonnerie"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume d\'appel"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume des notifications"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Sonnerie par défaut"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Sonnerie par défaut (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silencieux"</string>
@@ -942,10 +937,10 @@
<item quantity="other" msgid="7915895323644292768">"Réseaux Wi-Fi ouverts disponibles"</item>
</plurals>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossible de se connecter au Wi-Fi."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"dispose d\'une faible connexion Internet."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"dispose d\'une connexion Internet faible."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Lancer le Wi-Fi Direct. Cela désactive le fonctionnement du Wi-Fi client ou via un point d\'accès."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Échec du démarrage du Wi-Fi Direct."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Impossible d\'activer le Wi-Fi Direct."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Demande de configuration du Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Cliquez sur \"OK\" pour accepter."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Demande de configuration du Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Saisissez le code PIN pour continuer."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Afin de poursuivre la configuration de la connexion, vous devez saisir le code WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sur l\'appareil associé <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annuler"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Carte SIM retirée"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Le réseau mobile sera indisponible tant que vous n\'aurez pas remplacé la carte SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Le réseau mobile ne sera pas disponible avant le redémarrage avec une carte SIM valide insérée."</string>
<string name="sim_done_button" msgid="827949989369963775">"OK"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Carte SIM ajoutée."</string>
<string name="sim_added_message" msgid="1209265974048554242">"Pour accéder au réseau mobile, redémarrez votre appareil."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Un problème est survenu lors de la désactivation de la mémoire de stockage USB. Assurez-vous que l\'hôte USB a bien été désinstallé, puis réessayez."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activer la mémoire de stockage USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si vous activez la mémoire de stockage USB, certaines applications en cours d\'utilisation seront fermées. Elles risquent de rester indisponibles jusqu\'à ce que la mémoire de stockage USB soit désactivée."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Échec du fonctionnement USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Échec du fonctionnement de la mémoire de stockage USB."</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connecté en tant qu\'appareil multimédia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connecté en tant qu\'appareil photo"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Désinstallation de la carte SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Effacement de la mémoire de stockage USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Effacement de la carte SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Impossible d\'effacer la mémoire de stockage USB"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Impossible d\'effacer la mémoire de stockage USB"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Impossible d\'effacer la mémoire de stockage USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Impossible d\'effacer la carte SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"La carte SD a été retirée sans avoir été désinstallée."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Vérification de la mémoire de stockage USB en cours."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Vérification de la carte SD en cours."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"désactivé"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"sélectionné"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"non sélectionné"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuler"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Supprimer"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Terminé"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Changement de mode"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Touche : casque nécessaire pour entendre le son des touches lorsque vous saisissez un mot de passe."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Parcourir vers le haut"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Plus d\'options"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Données 2G-3G désactivées"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Données 4G désactivées"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Données mobiles désactivées"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"appuyer pour activer"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Appuyez ici pour réactiver."</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Quota de données 2G-3G dépassé"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Quota de données 4G dépassé"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Quota util. données mob. dépassé"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> au-delà de la limite spécifiée"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> au-delà de la limite spécifiée"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Données en arrière-plan limitées"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Appuyez pour suppr. restriction."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de sécurité"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Ce certificat est valide."</string>
<string name="issued_to" msgid="454239480274921032">"Délivré à :"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Sélectionner une activité"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Partager avec..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Appareil verrouillé"</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-h720dp/dimens.xml b/core/res/res/values-h720dp/dimens.xml
index 7efe322..6e99183 100644
--- a/core/res/res/values-h720dp/dimens.xml
+++ b/core/res/res/values-h720dp/dimens.xml
@@ -21,10 +21,6 @@
<dimen name="alert_dialog_button_bar_height">54dip</dimen>
<!-- Preference fragment padding, bottom -->
<dimen name="preference_fragment_padding_bottom">16dp</dimen>
- <!-- Preference activity top margin -->
- <dimen name="preference_screen_top_margin">16dp</dimen>
- <!-- Preference activity bottom margin -->
- <dimen name="preference_screen_bottom_margin">16dp</dimen>
<dimen name="preference_screen_header_padding_side">0dip</dimen>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index e1e54fd..5e4a78e 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Omogućuje aplikaciji primanje i obradu poruka hitnih odašiljanja. Ta je dozvola dostupna samo aplikacijama sustava."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"slanje SMS poruka"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Aplikaciji omogućuje slanje SMS poruka. Zlonamjerne aplikacije mogu stvarati troškove slanjem poruka bez vaše potvrde."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"slanje SMS poruka bez potvrde"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Aplikaciji omogućuje slanje SMS poruka. Zlonamjerne aplikacije mogu stvarati novčane troškove slanjem poruka bez vaše potvrde."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"čitanje SMS-a ili MMS-a"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Aplikaciji omogućuje čitanje SMS poruka pohranjenih na tabletnom uređaju ili SIM kartici. Zlonamjerne aplikacije mogu čitati vaše povjerljive poruke."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Aplikaciji omogućuje čitanje SMS poruka pohranjenih na telefonu ili SIM kartici. Zlonamjerne aplikacije mogu čitati vaše povjerljive poruke."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"pisanje kontaktnih podataka"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Aplikaciji omogućuje izmjenu kontaktnih podataka (adrese) koji su pohranjeni na vašem tabletnom uređaju. Zlonamjerne aplikacije mogu to upotrijebiti za brisanje ili izmjenu kontaktnih podataka."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Aplikaciji omogućuje izmjenu kontaktnih podataka (adrese) koji su pohranjeni na vašem telefonu. Zlonamjerne aplikacije to mogu koristiti za brisanje ili izmjenu vaših kontaktnih podataka."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"Pročitaj podatke profila"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Aplikaciji omogućuje čitanje informacija o vašem osobnom profilu. Zlonamjerne aplikacije mogu to upotrijebiti za vašu identifikaciju i slanje vaših osobnih podataka drugim ljudima."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisivanje podataka profila"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Aplikaciji omogućuje izmjenu informacija o osobnom profilu. Zlonamjerne aplikacije mogu to upotrijebiti za brisanje ili izmjenu podataka o profilu."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"čitanje podataka vašeg profila"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Aplikaciji omogućuje čitanje osobnih informacija profila koje su pohranjene na vašem uređaju, poput vašeg imena i kontaktnih podataka. To znači da vas aplikacija može identificirati i slati informacije vašeg profila drugima."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje u podatke profila"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Aplikaciji omogućuje promjenu ili dodavanje informacija u osobne informacije profila koje su spremljene na vašem uređaju, poput vašeg imena i kontaktnih podataka. To znači da vas druge aplikacije mogu identificirati i slati informacije vašeg profila drugima."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"čitajte kalendarske događaje i povjerljive informacije"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Aplikaciji omogućuje čitanje svih kalendarskih događaja pohranjenih na tabletnom računalu, uključujući događaje prijatelja ili suradnika. Zlonamjerna aplikacija s tim dopuštenjem može izdvajati osobne podatke iz tih kalendara bez znanja vlasnika."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Aplikaciji omogućuje čitanje svih kalendarskih događaja na vašem telefonu, uključujući događaje prijatelja ili suradnika. Zlonamjerne aplikacije s tim dopuštenjem mogu izdvajati osobne podatke iz tih kalendara bez znanja vlasnika."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Aplikaciji omogućuje pregled stanja svih mreža."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"potpun internetski pristup"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Aplikaciji omogućuje stvaranje mrežnih priključaka."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"pisanje postavki naziva pristupne točke"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Aplikaciji omogućuje izmjenu postavki za APN, kao što je Proxy i Port bilo kojeg APN-a."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"promjena/presretanje mrežnih postavki i prometa"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Aplikaciji omogućuje promjenu mrežnih postavki te presretanje i provjeru cijelog prometa na mreži, primjerice promjenu proxyja i priključka bilo kojeg APN-a. Zlonamjerne aplikacije mogu pratiti, preusmjeravati ili izmjenjivati mrežne pakete bez vašeg znanja."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"promjena mrežne povezivosti"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Aplikaciji omogućuje promjenu stanja mrežnog povezivanja."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Izmijeni ograničenu povezivost"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Netočno ste unijeli PIN <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovno za <xliff:g id="NUMBER_1">%d</xliff:g> sekunda."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još <xliff:g id="NUMBER_1">%d</xliff:g> neuspješna pokušaja, zamolit ćemo vas da otključate tabletni uređaj pomoću Google prijave."\n\n" Pokušajte ponovno za <xliff:g id="NUMBER_2">%d</xliff:g> sekunda."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još <xliff:g id="NUMBER_1">%d</xliff:g> neuspješna pokušaja, morat ćete otključati telefon pomoću Google prijave."\n\n" Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Pokušajte ponovno za <xliff:g id="NUMBER">%d</xliff:g> s."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Zaboravili ste uzorak?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Otključaj račun"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Omogućuje aplikaciji da doda poruke u vašu govornu poštu."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Izmijeni dopuštenja za geo-lociranje u pregledniku"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Aplikaciji omogućuje izmjenu dopuštenja za geolokaciju u pregledniku. Zlonamjerne aplikacije to mogu koristiti za omogućavanje slanja informacija o lokaciji na proizvoljne web-lokacije."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"provjeri pakete"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Aplikaciji omogućuje da provjeri je li paket moguće instalirati."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"vezano uz paketnu provjeru"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Nositelju omogućuje da traži paketnu provjeru. Nikad ne bi trebalo biti potrebno za uobičajene aplikacije."</string>
<string name="save_password_message" msgid="767344687139195790">"Želite li da preglednik zapamti ovu zaporku?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ne sada"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Zapamti"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"izbriši"</string>
<string name="search_go" msgid="8298016669822141719">"Pretraži"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Pretraživanje"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Upit za pretraživanje"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Izbriši upit"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Pošalji upit"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Glasovno pretraživanje"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Prije 1 mjesec"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Prije 1 mjesec"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"Izreži"</string>
<string name="copy" msgid="2681946229533511987">"Kopiraj"</string>
<string name="paste" msgid="5629880836805036433">"Zalijepi"</string>
- <string name="replace" msgid="8333608224471746584">"Zamijeni"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Zamijeni"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Odabir teksta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Odabir teksta"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ponovno omogući ovo uz Postavke &gt; Aplikacije &gt; Upravljanje aplikacijama."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) prekršila je svoje vlastito pravilo StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> prekršio je svoje vlastito pravilo StrictMode."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"Izvodi se <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Odaberite za izmjenu aplikacije"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Izmjena aplikacija?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Glasnoća alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Glasnoća obavijesti"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Glasnoća"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth glasnoća. Dodirnite za prebacivanje na bešumni način ili s njega."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Glasnoća zvona. Dodirnite za prebacivanje na bešumni način ili s njega."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Glasnoća poziva. Dodirnite za prebacivanje na bešumni način ili s njega."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Glasnoća medija. Dodirnite za prebacivanje na bešumni način ili s njega."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Glasnoća obavijesti. Dodirnite za prebacivanje na bešumni način ili s njega."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Glasnoća Bluetootha"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Glasnoća melodije zvona"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Glasnoća poziva"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Glasnoća medija"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Glasnoća obavijesti"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Zadana melodija zvona"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Zadana melodija zvona (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Bešumno"</string>
@@ -944,7 +949,7 @@
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ne može se spojiti na Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ima lošu internetsku vezu."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Izravni Wi-Fi"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Pokreni izravan rad s Wi-Fi mrežom. To će isključiti rad s Wi-Fi klijentom/hotspotom."</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Pokreni izravan rad s Wi-Fi mrežom. To će isključiti rad s Wi-Fi klijentom/žarišnom točkom."</string>
<!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Neuspjelo pokretanje izravne Wi-Fi veze"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Zahtjev za postavljanje izravne Wi-Fi veze od <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknite \"U redu\" za potvrdu."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Zahtjev za postavljanje izravne Wi-Fi veze s <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Unesite PIN da biste nastavili."</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"U redu"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Odustani"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM kartica uklonjena"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilna mreža neće biti dostupna sve dok ne vratite SIM karticu."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilna mreža bit će nedostupna do ponovnog pokretanja s umetnutom važećom SIM karticom."</string>
<string name="sim_done_button" msgid="827949989369963775">"Gotovo"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM kartica dodana"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Morate ponovno pokrenuti uređaj za pristup mobilnoj mreži."</string>
@@ -1113,12 +1118,28 @@
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"označeno"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"nije označeno"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"odabrano"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"odabran"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"nije odabrano"</string>
<string name="switch_on" msgid="551417728476977311">"uključeno"</string>
<string name="switch_off" msgid="7249798614327155088">"isključeno"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"pritisnut"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nije pritisnut"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Kreni gore"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Više opcija"</string>
@@ -1131,11 +1152,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G podaci su onemogućeni"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G podaci su onemogućeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podaci su onemogućeni"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Dotaknite za omogućivanje"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Prekoračeno ograničenje 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Prekoračeno je ograničenje 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Prekoračeno mobilno ograničenje"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> preko ograničenja"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Prekoračeno je ograničenje 4G podataka"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Prekoračeno je ograničenje za podatke na mobilnom uređaju"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> preko navedenog ograničenja"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
<!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
@@ -1156,7 +1181,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 otisak prsta:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Prikaži sve..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Odaberite aktivnost"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Dijeli s..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Dijeli sa..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Uređaj zaključan."</string>
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 5673aab..9f157b8 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Az azonosítás nem sikerült."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"A proxy szerveren keresztüli azonosítás nem sikerült."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Nem sikerült kapcsolatot létesíteni a szerverrel."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Nem sikerült kommunikálni a szerverrel. Próbálja újra később."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Nem sikerült kommunikálni a szerverrel. Próbálja újra később."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Időtúllépés miatt megszakadt a kapcsolat a szerverrel."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Az oldal túl sok szerverátirányítást tartalmaz."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Nem támogatott protokoll."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Lehetővé teszi, hogy az alkalmazás fogadja és feldolgozza a vészhelyzeti közleményeket. Ez az engedély csak a rendszeralkalmazások számára érhető el."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"SMS-ek küldése"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Lehetővé teszi az alkalmazás számára SMS küldését. A rosszindulatú alkalmazások az Ön engedélye nélkül küldhetnek üzenetet, ami megnövelheti a kiadásait."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"SMS üzenetek küldése megerősítés nélkül"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Engedélyezi az alkalmazások számára SMS küldését. Rosszindulatú alkalmazások költségeket generálhatnak az Ön jóváhagyása nélkül küldött üzenetekkel."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS vagy MMS olvasása"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Lehetővé teszi az alkalmazások számára, hogy olvassák a táblagépen vagy a SIM-kártyán lévő SMS-eket. A rosszindulatú alkalmazások elolvashatják a bizalmas üzeneteket."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Lehetővé teszi az alkalmazás számára a telefonon és a SIM-kártyán tárolt SMS-ek olvasását. A rosszindulatú alkalmazások elolvashatják a bizalmas üzeneteket."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"névjegyadatok írása"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Lehetővé teszi az alkalmazások számára, hogy módosítsák a táblagépen tárolt névjegyadatokat (címeket). A rosszindulatú alkalmazások ezt felhasználhatják arra, hogy töröljék vagy módosítsák a névjegyadatokat."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a telefonon tárolt névjegy- (cím-) adatokat. A rosszindulatú alkalmazások felhasználhatják ezt a névjegyadatok törlésére vagy módosítására."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"profiladatok beolvasása"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Lehetővé teszi az alkalmazás számára, hogy beolvassa az összes személyes profiladatot. A rosszindulatú alkalmazások felhasználhatják ezt az Ön azonosítására, és személyes adatai elküldésére másoknak."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"profiladatok írása"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Lehetővé teszi az alkalmazás számára, hogy módosítsa az Ön személyes profiladatait. A rosszindulatú alkalmazások használhatják a profiladatok törlésére vagy módosítására."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"olvassa el profiladatait"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Engedélyezi, hogy az alkalmazás a készüléken tárolt személyes profiladatokat olvassa, például az Ön nevét és elérhetőségét. Ez azt jelenti, az alkalmazás képes az Ön azonosítására, és elküldheti a profiladatokat másoknak."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"írás a profiladatokba"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Engedélyezi, hogy az alkalmazás megváltoztassa vagy hozzáadja a készüléken tárolt személyes profiladatokat, például az Ön nevét és elérhetőségét. Ez azt jelenti, hogy más alkalmazások is azonosíthatják Önt, és elküldhetik a profiladatokat másoknak."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"naptári események és bizalmas információk beolvasása"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Lehetővé teszi egy alkalmazás számára a táblagépén található összes naptári esemény beolvasását, beleértve az ismerőseihez vagy munkatársaihoz tartozó eseményeket is. Ha egy rosszindulatú alkalmazás megkapja ezt az engedélyt, akkor vissza tudja fejteni a személyes adatokat ezekből a naptárakból, a tulajdonos tudomása nélkül."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Lehetővé teszi egy alkalmazás részére, hogy beolvassa a telefonján tárolt összes naptáreseményt, beleértve az ismerősök és kollégák eseményeit is. Ha egy rosszindulatú alkalmazás megkapja ezt az engedélyt, akkor vissza tudja fejteni a személyes adatokat ezekből a naptárakból, a tulajdonos tudomása nélkül."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Lehetővé teszi egy alkalmazás számára, hogy megnézze az összes hálózat állapotát."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"teljes internet-hozzáférés"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Lehetővé teszi egy alkalmazás számára hálózati szoftvercsatorna létrehozását."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"hozzáférési pont nevével kapcsolatos beállítások írása"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Lehetővé teszi egy alkalmazás számára az APN-beállítások, például a proxy vagy a port módosítását."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"a hálózati beállítások és a forgalom megváltoztatása/elfogása"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Engedélyezi az alkalmazások számára a hálózati beállítások módosítását, illetve a teljes hálózati forgalom elfogását és vizsgálatát, például bármely APN proxyjának vagy portjának megváltoztatását. A rosszindulatú alkalmazások az Ön tudta nélkül megfigyelhetik, átirányíthatják vagy módosíthatják a hálózati csomagokat."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"hálózati csatlakoztathatóság módosítása"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Lehetővé teszi egy alkalmazás számára a hálózati csatlakoztathatóság állapotának módosítását."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Megosztott csatlakoztathatóság módosítása"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg PIN kódját. "\n\n"Kérjük, próbálkozzon újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal rosszul rajzolta be a feloldó mintát. <xliff:g id="NUMBER_1">%d</xliff:g> további sikertelen kísérlet után táblagépe zárolását a Google bejelentkezési adataival kell feloldania."\n\n" Kérjük, próbálkozzon újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Helytelenül rajzolta le a feloldási mintát <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után a Google rendszerében használt bejelentkezési adataival kell feloldania a telefonját."\n\n" Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"A táblagépet <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. <xliff:g id="NUMBER_1">%d</xliff:g> további sikertelen próbálkozás után a rendszer visszaállítja a táblagép gyári alapértelmezett beállításait, és minden felhasználói adat elvész."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"A telefont <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. <xliff:g id="NUMBER_1">%d</xliff:g> további sikertelen próbálkozás után a rendszer visszaállítja a telefon gyári alapértelmezett beállításait, és minden felhasználói adat elvész."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"A táblagépet <xliff:g id="NUMBER">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. A rendszer visszaállítja a táblagép gyári alapértelmezett beállításait."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"A telefont <xliff:g id="NUMBER">%d</xliff:g> alkalommal próbálta meg sikertelenül feloldani. A rendszer visszaállítja a telefon gyári alapértelmezett beállításait."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Próbálkozzon újra <xliff:g id="NUMBER">%d</xliff:g> másodperc múlva."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Elfelejtette a mintát?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Fiók feloldása"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Lehetővé teszi az alkalmazás számára, hogy üzeneteket adjon hozzá bejövő hangpostájához."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"A böngésző helymeghatározási engedélyeinek módosítása"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a böngésző helymeghatározási engedélyeit. A rosszindulatú alkalmazások kihasználhatják ezt arra, hogy helyadatokat küldjenek tetszőleges webhelyeknek."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"csomagok ellenőrzése"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Lehetővé teszi az alkalmazás számára, hogy ellenőrizze, egy csomag telepíthető-e."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"egy csomaghitelesítőhöz kötődnek"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Lehetővé teszi, hogy a tulajdonos kérelmeket nyújtson be a csomag hitelesítőivel kapcsolatban. Soha nem lehet rá szükség szokásos alkalmazások esetében."</string>
<string name="save_password_message" msgid="767344687139195790">"Szeretné, hogy a böngésző megjegyezze a jelszót?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Most nem"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Megjegyzés"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"törlés"</string>
<string name="search_go" msgid="8298016669822141719">"Keresés"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Keresés"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Keresési lekérdezés"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Lekérdezés törlése"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Lekérdezés küldése"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Hangalapú keresés"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 hónapja"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Több mint 1 hónapja"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Kivágás"</string>
<string name="copy" msgid="2681946229533511987">"Másolás"</string>
<string name="paste" msgid="5629880836805036433">"Beillesztés"</string>
- <string name="replace" msgid="8333608224471746584">"Csere"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Csere"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL másolása"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Szöveg kijelölése..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Szöveg kijelölése"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Válasszon egy alkalmazást az USB-eszköz számára"</string>
<string name="noApplications" msgid="1691104391758345586">"Egyik alkalmazás sem tudja végrehajtani ezt a műveletet."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"A(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás sajnos leállt."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Sajnos a(z) <xliff:g id="PROCESS">%1$s</xliff:g> folyamat leállt."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"A(z) <xliff:g id="APPLICATION">%2$s</xliff:g> nem válaszol."\n\n"Be szeretné zárni?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"A(z) <xliff:g id="ACTIVITY">%1$s</xliff:g> tevékenység nem válaszol. "\n\n"Be szeretné zárni?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ismételt bekapcsolás a Beállítások &gt; Alkalmazások &gt; Alkalmazások kezelése alatt."</string>
<string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás (<xliff:g id="PROCESS">%2$s</xliff:g> folyamat) megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> folyamat megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android frissítése folyamatban..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Alkalmazás optimalizálása: <xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Alkalmazások indítása."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Rendszerindítás befejezése."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> fut"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Válassza ezt az alkalmazásra váltáshoz"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Alkalmazást vált?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Ébresztés hangereje"</string>
<string name="volume_notification" msgid="2422265656744276715">"Értesítés hangereje"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Hangerő"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-hangerő. Koppintson ide a néma üzemmódra való váltáshoz."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Csörgés hangereje. Koppintson ide a néma üzemmódra való váltáshoz."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hívás hangereje. Koppintson ide a néma üzemmódra való váltáshoz."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Média hangereje. Koppintson ide a néma üzemmódra való váltáshoz."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Értesítés hangereje. Érintse meg a néma üzemmódra való váltáshoz."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth hangerő"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Csengőhang hangereje"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hívás hangereje"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Média hangereje"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Értesítés hangereje"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Alapértelmezett csengőhang"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Alapértelmezett csengőhang (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Néma"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"rossz internetkapcsolattal rendelkezik."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Direct elindítása. A Wi-Fi kliens/hotspot működése ettől leáll."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nem sikerült elindítani a Wi-Fi Direct kapcsolatot"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nem sikerült elindítani a Wi-Fi Direct kapcsolatot"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct kapcsolódási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Az elfogadáshoz kattintson az OK gombra."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct csatlakoztatási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Adja meg a PIN-kódot a folytatáshoz."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"A csatlakoztatás folytatásához be kell írni a(z) <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> WPS PIN-kódot a partnereszközön (<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>)"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Mégse"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kártya eltávolítva"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"A mobilhálózat addig nem lesz elérhető, amíg nem cseréli ki a SIM-kártyát."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"A mobilhálózat nem lesz elérhető, amíg újra nem indítja egy érvényes SIM kártya behelyezése után."</string>
<string name="sim_done_button" msgid="827949989369963775">"Kész"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kártya hozzáadva"</string>
<string name="sim_added_message" msgid="1209265974048554242">"A mobilhálózat eléréséhez újra kell indítania eszközét."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Gond volt az USB-tár kikapcsolásával. Ellenőrizze, hogy leválasztotta-e az USB-gazdagépet, majd próbálja újra."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB-tár bekapcsolása"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ha bekapcsolja az USB-tárat, egyes jelenleg használt alkalmazások leállnak és lehet, hogy nem lesznek elérhetők a tár újbóli kikapcsolásáig."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Az USB művelet sikertelen"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Az USB-művelet sikertelen"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Csatlakoztatva médiaeszközként"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Csatlakoztatva kameraként"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD-kártya leválasztása..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Az USB-tár törlése..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Az SD-kártya törlése..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nem sikerült törölni az USB-tárat."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Nem sikerült törölni az USB-tárat."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nem lehet törölni az USB-háttértárat"</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nem lehet törölni az SD-kártyát."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Az SD-kártya nem lett lecsatolva, mielőtt eltávolították."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Az USB-tár ellenőrzése folyamatban van."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Az SD-kártya ellenőrzése folyamatban van."</string>
@@ -1113,12 +1108,20 @@
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"bejelölve"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"nincs bejelölve"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"kiválasztott"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"bejelölve"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"nincs kiválasztva"</string>
- <string name="switch_on" msgid="551417728476977311">"bekapcsolva"</string>
+ <string name="switch_on" msgid="551417728476977311">"be"</string>
<string name="switch_off" msgid="7249798614327155088">"kikapcsolva"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"megnyomva"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nincs megnyomva"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Mégse"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Kész"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mód váltása"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Billentyű. Headset szükséges, ha hallani szeretné a billentyűket a jelszó megadása közben."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Felfele mozgás"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"További lehetőségek"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G adatforgalom letiltva"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G adatforgalom letiltva"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil adatforgalom letiltva"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"koppintson az engedélyezéshez"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Elérte a 2G/3G-adatkorlátot"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Elérte a 4G-adatkorlátot"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Elérte a mobil adatkorlátot"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> a meghatároz. korl. felett"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Érintse meg az engedélyezéshez"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Elérte a 2G/3G adatkorlátot"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Elérte a 4G adatkorlátot"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Elérte a mobil adatkorlátot"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> a meghatározott korlát felett"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Háttéradatok korlátozva"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Érintse meg a korl. eltáv.-hoz"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Biztonsági tanúsítvány"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"A tanúsítvány érvényes."</string>
<string name="issued_to" msgid="454239480274921032">"Kiállítva a következőnek:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Tevékenység kiválasztása"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Megosztás..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Az eszköz le van zárva."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 24f6429..93a957a 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autentikasi gagal."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autentikasi via proxy server gagal."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Sambungan ke server gagal."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Server gagal berkomunikasi. Coba lagi."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Server tidak dapat berkomunikasi. Coba lagi nanti."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Sambungan ke server terputus."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Laman ini berisi terlalu banyak pengalihan server."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol tidak didukung."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Memungkinkan aplikasi menerima dan memproses pesan siaran darurat. Izin ini hanya tersedia untuk aplikasi sistem."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"kirim pesan SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Mengizinkan aplikasi mengirim pesan SMS. Aplikasi hasad dapat membebankan biaya kepada Anda dengan mengirim pesan tanpa konfirmasi dari Anda."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"mengirim SMS tanpa konfirmasi"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Mengizinkan aplikasi mengirimkan pesan SMS. Aplikasi hasad dapat menyedot uang Anda dengan mengirimkan pesan tanpa konfirmasi."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"baca SMS atau MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Mengizinkan aplikasi untuk membaca pesan SMS yang disimpan di tablet atau kartu SIM. Aplikasi berbahaya dapat membaca pesan rahasia Anda."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Mengizinkan aplikasi membaca SMS yang tersimpan dalam ponsel atau kartu SIM Anda. Aplikasi hasad dapat membaca pesan rahasia Anda."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"tuliskan data kenalan"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Mengizinkan aplikasi memodifikasi data kenalan (alamat) yang disimpan pada tablet Anda. Aplikasi berbahaya dapat menggunakan ini untuk menghapus atau mengubah data kenalan."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Mengizinkan aplikasi mengubah data kenalan (alamat) yang tersimpan pada ponsel. Aplikasi hasad dapat menggunakan ini untuk menghapus atau mengubah data kenalan Anda."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"baca data profil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Memungkinkan aplikasi membaca semua informasi profil pribadi Anda. Aplikasi berbahaya dapat menggunakannya untuk mengidentifikasi Anda dan mengirimkan informasi pribadi Anda kepada orang lain."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"tulis data profil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Memungkinkan aplikasi mengubah informasi profil pribadi Anda. Aplikasi berbahaya dapat menggunakannya untuk menghapus atau mengubah data profil Anda."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"membaca data profil Anda"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Memungkinkan aplikasi membaca informasi profil pribadi yang tersimpan pada perangkat Anda, seperti nama dan informasi kontak. Artinya aplikasi dapat mengidentifikasi Anda dan mengirimkan informasi profil Anda kepada orang lain."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"menulis ke data profil Anda"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Memungkinkan aplikasi mengubah atau menambah informasi profil pribadi yang tersimpan pada perangkat Anda, seperti nama dan informasi kontak. Artinya aplikasi lain dapat mengidentifikasi Anda dan mengirimkan informasi profil Anda kepada orang lain."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"baca acara kalender serta informasi rahasia"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Memungkinkan aplikasi membaca semua acara kalender yang disimpan pada tablet Anda, termasuk acara teman atau rekan kerja. Aplikasi berbahaya dengan izin ini dapat mengambil informasi pribadi dari kalender ini tanpa sepengetahuan pemilik."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Memungkinkan aplikasi membaca semua acara kalender yang disimpan di ponsel Anda, termasuk acara teman atau rekan kerja. Aplikasi berbahaya dengan izin ini dapat mengambil informasi pribadi dari kalender ini tanpa sepengetahuan pemilik."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Mengizinkan aplikasi melihat kondisi semua jaringan."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"akses internet penuh"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Mengizinkan aplikasi membuat soket jaringan."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"tuliskan setelan Nama Poin Akses (APN)"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Mengizinkan aplikasi mengubah setelan APN, seperti Proxy dan Port APN mana saja."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"mengubah/mencegat lalu lintas dan setelan jaringan"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Memungkinkan aplikasi mengubah setelan jaringan dan mencegat serta memeriksa semua lalu lintas jaringan, misalnya mengubah proxy dan port APN apa pun. Aplikasi berbahaya dapat memantau, mengalihkan, atau memodifikasi paket jaringan tanpa sepengetahuan Anda."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"ubah konektivitas jaringan"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Mengizinkan aplikasi mengubah status konektivitas jaringan."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Ubah konektivitas tertambat"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Anda telah salah memasukkan PIN <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Anda telah salah menggambar pola pembuka kunci <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya yang gagal, Anda akan diminta membuka kunci tablet menggunakan info masuk Google."\n\n" Harap masuk lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Anda telah salah menggambar pola pembuka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, Anda akan diminta membuka kunci ponsel menggunakan info masuk Google."\n\n" Harap coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, tablet akan disetel ulang ke setelan bawaan pabrik dan semua data pengguna hilang."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, ponsel akan disetel ulang ke setelan bawaan pabrik dan semua data pengguna hilang."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini tablet akan disetel ulang ke setelan bawaan pabrik."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini ponsel akan disetel ulang ke setelan bawaan pabrik."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Coba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> detik."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Lupa pola?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Pembuka kunci akun"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Memungkinkan aplikasi menambahkan pesan ke kotak masuk untuk kotak pesan Anda."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ubah izin geolokasi Peramban"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Mengizinkan aplikasi mengubah izin geolokasi Peramban. Aplikasi hasad dapat menggunakan ini untuk mengizinkan pengiriman informasi lokasi ke situs web sembarangan."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verifikasi paket"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Mengizinkan aplikasi memverifikasi bahwa suatu paket dapat dipasang."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"mengikat ke pemverifikasi paket"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Mengizinkan pemegangnya mengajukan permintaan pemverifikasian paket. Tidak diperlukan untuk aplikasi normal."</string>
<string name="save_password_message" msgid="767344687139195790">"Apakah Anda ingin peramban menyimpan sandi ini?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Tidak sekarang"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Ingat"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"hapus"</string>
<string name="search_go" msgid="8298016669822141719">"Telusuri"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Penelusuran"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Kueri penelusuran"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Hapus kueri"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Mengirimkan kueri"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Penelusuran suara"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tempel"</string>
- <string name="replace" msgid="8333608224471746584">"Ganti"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Ganti"</string>
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Pilih sebuah aplikasi untuk perangkat USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Tidak ada aplikasi dapat melakukan tindakan ini."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Sayangnya, <xliff:g id="APPLICATION">%1$s</xliff:g> telah berhenti."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Sayangnya, proses <xliff:g id="PROCESS">%1$s</xliff:g> telah berhenti."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> tidak merespons."\n\n"Apakah Anda ingin menutupnya?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktivitas <xliff:g id="ACTIVITY">%1$s</xliff:g> tidak merespons."\n\n"Apakah Anda ingin menutupnya?"</string>
@@ -900,14 +891,15 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikasi dialihkan"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang berjalan."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah diluncurkan aslinya."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Selalu tampilkan"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aktifkan kembali ini dengan aplikasi Setelan &gt; Aplikasi &gt; Kelola"</string>
<string name="smv_application" msgid="295583804361236288">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar kebijakan StrictMode yang diberlakukan secara otomatis."</string>
<string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar kebijakan StrictMode yang diberlakukan secara otomatis."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android sedang meningkatkan versi..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Mengoptimalkan aplikasi <xliff:g id="NUMBER_0">%1$d</xliff:g> dari <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Memulai aplikasi."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Menyelesaikan boot."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> berjalan"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Pilih untuk beralih ke aplikasi"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Ubah aplikasi?"</string>
@@ -926,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volume alarm"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volume pemberitahuan"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume bluetooth. Ketuk untuk beralih mode senyap."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume nada dering. Ketuk untuk beralih mode senyap."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume panggilan. Ketuk untuk beralih mode senyap."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume media. Ketuk untuk beralih mode senyap."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume pemberitahuan. Ketuk untuk beralih mode senyap."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume nada dering"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume panggilan"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume media"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume pemberitahuan"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Nada dering bawaan"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering bawaan (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Senyap"</string>
@@ -948,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"memiliki sambungan internet yang buruk."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Langsung"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Memulai operasi Wi-Fi Langsung. Opsi ini akan mematikan operasi hotspot/klien WiFi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Gagal memulai Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Tidak dapat memulai Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Permintaan penyiapan sambungan WiFI Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK untuk menerima."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Permintaan penyiapan sambungan WiFi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Masukkan pin untuk melanjutkan."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> harus dimasukkan pada perangkat rekan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> agar penyiapan sambungan dapat dilanjutkan"</string>
@@ -958,18 +950,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Sejumlah besar pesan SMS sedang dikirimkan. Pilih \"OK\" untuk melanjutkan, atau \"Batal\" untuk menghentikan pengiriman."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Batal"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Kartu SIM dihapus"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Jaringan seluler tidak akan tersedia sampai Anda memulai lagi dengan memasukkan kartu SIM yang valid."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Selesai"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Kartu SIM ditambahkan"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Anda harus memulai ulang perangkat untuk mengakses jaringan seluler."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Mulai Ulang"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Setel waktu"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setel tanggal"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setel"</string>
@@ -995,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ada masalah ketika mematikan penyimpanan USB. Periksa untuk memastikan bahwa Anda telah melepaskan inang USB, lalu coba sekali lagi."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Hidupkan penyimpanan USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Jika Anda menghidupkan penyimpanan USB, sebagian aplikasi yang Anda gunakan akan berhenti dan mungkin tidak tersedia sampai Anda mematikan penyimpanan USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operasi USB gagal"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operasi USB gagal"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Terhubung sebagai perangkat media"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Terhubung sebagai kamera"</string>
@@ -1095,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Melepas kartu SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Menghapus penyimpanan USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Menghapus kartu SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Gagal menghapus penyimpanan USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Gagal menghapus penyimpanan USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Tidak dapat menghapus penyimpanan USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Tidak dapat menghapus kartu SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Kartu SD dihapus sebelum dilepas."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Saat ini penyimpanan USB sedang diperiksa."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Kartu SD sedang diperiksa."</string>
@@ -1120,14 +1106,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Penambahan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Pengurangan"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"diperiksa"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"tidak dicentang"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"dicentang"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"tidak diperiksa"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"dipilih"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"tidak dipilih"</string>
<string name="switch_on" msgid="551417728476977311">"nyala"</string>
<string name="switch_off" msgid="7249798614327155088">"mati"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"ditekan"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"tidak ditekan"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Hapus"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pengubahan mode"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tombol. Perlu headset untuk mendengarkan suara tombol saat mengetik sandi."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi naik"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Opsi lainnya"</string>
@@ -1140,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data 2G-3G dinonaktifkan"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dinonaktifkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data seluler dinonaktifkan"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ketuk untuk mengaktifkan"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Sentuh untuk mengaktifkan"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Batas data 2G-3G terlampaui"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Batas data 4G terlampaui"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Batas data seluler terlampaui"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> melebihi batas yang ditentukan"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> melebihi batas yang ditentukan"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Data latar belakang dibatasi"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Sentuh untuk menghapus pembatasan"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Sertifikat keamanan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikat ini valid."</string>
<string name="issued_to" msgid="454239480274921032">"Diterbitkan ke:"</string>
@@ -1165,8 +1161,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"Sidik jari SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Lihat semua..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pilih aktivitas"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Bagikan dengan..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Berbagi dengan..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Perangkat tergembok."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 7c108bc..05fd07b 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autenticazione non riuscita."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autenticazione tramite il server proxy non riuscita."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Connessione al server non riuscita."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Impossibile comunicare con il server. Riprova più tardi."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Errore di comunicazione del server. Riprova più tardi."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Tempo esaurito per la connessione al server."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"La pagina contiene troppi reindirizzamenti sul server."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protocollo non supportato."</string>
@@ -671,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento del PIN. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il tablet tramite i dati di accesso di Google."\n\n" Riprova fra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono tramite i dati di accesso di Google."\n\n"Riprova fra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Hai erroneamente tentato di sbloccare il tablet <xliff:g id="NUMBER_0">%d</xliff:g> volte. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi non riusciti, il tablet verrà sottoposto a un ripristino dati di fabbrica e tutti i dati utente andranno persi."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Hai erroneamente tentato di sbloccare il telefono <xliff:g id="NUMBER_0">%d</xliff:g> volte. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi non riusciti, il telefono verrà sottoposto a un ripristino dati di fabbrica e tutti i dati utente andranno persi."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Hai erroneamente tentato di sbloccare il tablet <xliff:g id="NUMBER">%d</xliff:g> volte. Il tablet ora verrà sottoposto a un ripristino dati di fabbrica."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Hai erroneamente tentato di sbloccare il telefono <xliff:g id="NUMBER">%d</xliff:g> volte. Il telefono ora verrà sottoposto a un ripristino dati di fabbrica."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Riprova fra <xliff:g id="NUMBER">%d</xliff:g> secondi."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Hai dimenticato la sequenza?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Sblocco account"</string>
@@ -728,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Consente all\'applicazione di aggiungere messaggi alla casella della segreteria."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifica le autorizzazioni di localizzazione geografica del browser"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Consente a un\'applicazione di modificare le autorizzazioni di localizzazione geografica del browser. Le applicazioni dannose possono utilizzare questa autorizzazione per consentire l\'invio di informazioni sulla posizione a siti web arbitrari."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verifica dei pacchetti"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Consente all\'applicazione di verificare se un pacchetto è installabile."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"associazione a verifica pacchetto"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permette al proprietario di effettuare richieste relative alle verifiche dei pacchetti. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
<string name="save_password_message" msgid="767344687139195790">"Memorizzare la password nel browser?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Non ora"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Memorizza"</string>
@@ -748,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Invio"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"Canc"</string>
<string name="search_go" msgid="8298016669822141719">"Cerca"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Cerca"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Query di ricerca"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Cancella query"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Invia query"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Ricerca vocale"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 mese fa"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Oltre 1 mese fa"</string>
<plurals name="num_seconds_ago">
@@ -859,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Taglia"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Incolla"</string>
- <string name="replace" msgid="8333608224471746584">"Sostituisci"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Sostituisci"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copia URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleziona testo..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selezione testo"</string>
@@ -883,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Seleziona un\'applicazione per il dispositivo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Nessuna applicazione è in grado di svolgere questa azione."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Purtroppo l\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> si è bloccata in modo anomalo."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Purtroppo il processo <xliff:g id="PROCESS">%1$s</xliff:g> si è interrotto."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> non risponde."\n\n"Vuoi chiuderla?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"L\'attività <xliff:g id="ACTIVITY">%1$s</xliff:g> non risponde."\n\n"Vuoi chiuderla?"</string>
@@ -903,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Riattiva questa modalità utilizzando Impostazioni &gt; Applicazioni &gt; Gestisci applicazioni."</string>
<string name="smv_application" msgid="295583804361236288">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) ha violato la norma StrictMode autoimposta."</string>
<string name="smv_process" msgid="5120397012047462446">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> ha violato la norma StrictMode autoimposta."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Upgrade di Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Ottimizzazione applicazione <xliff:g id="NUMBER_0">%1$d</xliff:g> di <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Avvio applicazioni."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Conclusione dell\'avvio."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> in esecuzione"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Seleziona per passare all\'applicazione"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Scambiare le applicazioni?"</string>
@@ -943,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ha una connessione a Internet insufficiente."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Avvia funzionamento Wi-Fi Direct. Verrà disattivato il funzionamento con hotspot/client Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Impossibile avviare Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Avvio di Wi-Fi Direct non riuscito"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Richiesta di configurazione della connessione Wi-Fi Direct da <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Fai clic su OK per accettare."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Richiesta di configurazione della connessione Wi-Fi Direct da <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Inserisci il PIN per continuare."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Per la continuazione della configurazione della connessione è necessario inserire un codice PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sul dispositivo peer <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
@@ -984,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Si è verificato un problema durante la disattivazione dell\'archivio USB. Assicurati di avere smontato l\'host USB e riprova."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Attiva archivio USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se attivi l\'archivio USB, alcune applicazioni in uso si bloccheranno e potrebbero risultare non disponibili finché non disattiverai l\'archivio USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operazione USB non riuscita"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operazione USB non riuscita"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Collegato come dispositivo multimediale"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Collegato come fotocamera"</string>
@@ -1084,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Smontaggio scheda SD in corso..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Cancellazione dell\'archivio USB in corso..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Cancellazione scheda SD in corso..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Cancellazione dell\'archivio USB non riuscita."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Cancellazione dell\'archivio USB non riuscita."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Cancellazione archivio USB non riuscita."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Cancellazione scheda SD non riuscita."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"La scheda SD è stata rimossa prima che fosse smontata."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Controllo dell\'archivio USB in corso."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Controllo della scheda SD in corso."</string>
@@ -1110,13 +1107,21 @@
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumenta"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuisci"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"selezionata"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"non selezionata"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"non selezionato"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"selezionato"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"non selezionato"</string>
<string name="switch_on" msgid="551417728476977311">"attivo"</string>
- <string name="switch_off" msgid="7249798614327155088">"disattivato"</string>
+ <string name="switch_off" msgid="7249798614327155088">"disattivo"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"premuto"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"non premuto"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annulla"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Canc"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fine"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Cambio modalità"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maiuscolo"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invio"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tasto. Set auricolari richiesto per udire i tasti durante la digitazione di una password."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Vai in alto"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Altre opzioni"</string>
@@ -1129,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dati 2G-3G disattivati"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dati 4G disattivati"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dati mobili disattivati"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tocca per attivare"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Tocca per abilitare"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Limite dati 2G-3G superato"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Limite dati 4G superato"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Limite dati mobili superato"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> oltre il limite specificato"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Limite dati cellulare superato"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> oltre il limite indicato"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dati in background limitati"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Tocca per rimuovere restrizione"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificato di protezione"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Questo certificato è valido."</string>
<string name="issued_to" msgid="454239480274921032">"Rilasciato a:"</string>
@@ -1156,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Seleziona attività"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Condividi con..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloccato."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 7e7f63e..5f96aa9 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -142,7 +142,7 @@
<string name="shutdown_confirm_question" msgid="6656441286856415014">"האם ברצונך לבצע כיבוי?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"נוצרו לאחרונה"</string>
<string name="no_recent_tasks" msgid="279702952298056674">"אין יישומים חדשים."</string>
- <string name="global_actions" product="tablet" msgid="408477140088053665">"אפשרות של טבלט"</string>
+ <string name="global_actions" product="tablet" msgid="408477140088053665">"אפשרויות טבלט"</string>
<string name="global_actions" product="default" msgid="2406416831541615258">"אפשרויות טלפון"</string>
<string name="global_action_lock" msgid="2844945191792119712">"נעילת מסך"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"כיבוי"</string>
@@ -195,15 +195,13 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"מאפשר ליישום לקבל ולעבד הודעות של שידורי חירום. הרשאה זו זמינה רק ליישומי מערכת."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"שלוח הודעות SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"מאפשר ליישום לשלוח הודעות SMS. יישומים זדוניים עלולים לעלות לך כסף על ידי שליחת הודעות ללא אישורך."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"שלח הודעות SMS ללא אישור"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"מאפשר ליישום לשלוח הודעות SMS. יישומים זדוניים עלולים לעלות לך כסף על ידי שליחת הודעות ללא אישורך."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"קרא SMS או MMS"</string>
- <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"מאפשר ליישום לקרוא הודעות SMS המאוחסנות בטבלט או בכרטיס ה-SIM. יישומים זדוניים עלולים למחוק את ההודעות שלך."</string>
+ <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"מאפשר ליישום לקרוא הודעות SMS המאוחסנות בטבלט או בכרטיס ה-SIM. יישומים זדוניים עלולים לקרוא את ההודעות הסודיות שלך."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"מאפשר ליישום לקרוא הודעות SMS המאוחסנות בטלפון או בכרטיס SIM. יישומים זדוניים עלולים לקרוא את ההודעות הסודיות."</string>
<string name="permlab_writeSms" msgid="6881122575154940744">"ערוך SMS או MMS"</string>
- <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"מאפשר ליישום לכתוב להודעות SMS המאוחסנות בטבלט או בכרטיס ה-SIM. יישומים זדוניים עלולים למחוק את ההודעות שלך."</string>
+ <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"מאפשר ליישום לכתוב להודעות SMS המאוחסנות בטבלט או בכרטיס SIM. יישומים זדוניים עלולים למחוק את ההודעות שלך."</string>
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"מאפשר ליישום לכתוב להודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM. יישומים זדוניים עלולים למחוק את ההודעות."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"קבל WAP"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"מאפשר ליישום לקבל ולעבד הודעות WAP. יישומים זדוניים עלולים לעקוב אחר ההודעות שלך או למחוק אותן מבלי להציג אותן."</string>
@@ -234,7 +232,7 @@
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"מנע החלפת יישומים"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"מונע מהמשתמש לעבור ליישום אחר."</string>
<string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"פקח ושלוט על כל הפעלה של יישום"</string>
- <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"מאפשר ליישום לעקוב אחר האופן שבו המערכת מפעילה פעילויות ולשלוט בו. יישומים זדוניים עשויים לפגוע לגמרי במערכת. הרשאה זו דרושה רק לצורך פיתוח, לעולם לא לשימוש רגיל."</string>
+ <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"מאפשר ליישום לעקוב אחר האופן שבו המערכת מפעילה פעילויות ולשלוט בו. יישומים זדוניים עשויים לפגוע במערכת לחלוטין. הרשאה זו דרושה רק לצורך פיתוח ולא לשימוש רגיל."</string>
<string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"שלח שידור שהוסר מחבילה"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"מאפשר ליישום לשדר התראה המודיעה על הסרת חבילה של יישום. יישומים זדוניים עלולים להשתמש באפשרות זו כדי להפסיק יישומים פועלים אחרים."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"שלח שידור שהתקבל ב-SMS"</string>
@@ -260,7 +258,7 @@
<string name="permlab_manageAppTokens" msgid="17124341698093865">"נהל אסימוני יישום"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"מאפשר ליישומים ליצור ולנהל אסימונים משלהם, תוך עקיפת סידור ה-Z הרגיל שלהם. לעולם לא נחוץ ביישומים רגילים."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"לחץ על מקשים ושלוט בלחצנים"</string>
- <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"מאפשר ליישום לספק אירועי קלט משלו (לחיצות על מקשים וכדומה) ליישומים אחרים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשתלט על הטבלט."</string>
+ <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"מאפשר ליישום לספק אירועי קלט משלו (הקשות על מקשים וכדומה) ליישומים אחרים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשתלט על הטבלט."</string>
<string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"מאפשר ליישום לספק אירועי קלט משלו (לחיצות על מקשים וכדומה) ליישומים אחרים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשתלט על הטלפון."</string>
<string name="permlab_readInputState" msgid="469428900041249234">"נהל רישום של ההקלדות והפעולות שלך"</string>
<string name="permdesc_readInputState" msgid="5132879321450325445">"מאפשר ליישומים לצפות במקשים שאתה לוחץ עליהם גם בעת אינטראקציה עם יישום אחר (כגון הזנת סיסמה). לעולם לא נחוץ ביישומים רגילים."</string>
@@ -273,7 +271,7 @@
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"קשור לטפט"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"מאפשר למשתמש להכפיף לממשק ברמה העליונה של טפט. לא נחוץ ביישומים רגילים."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"הכפפה לשירות Widget"</string>
- <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"מאפשר למחזיק להכפיף לממשק ברמה עליונה של שירות Widget. יישומים רגילים לעולם לא יזדקקו לו."</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"מאפשר למחזיק להכפיף לממשק ברמה העליונה של שירות Widget. יישומים רגילים לעולם לא יזדקקו להרשאה זו."</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"קיים אינטראקציה עם מנהל המכשיר"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"מאפשר למשתמש לשלוח כוונות למנהל המכשיר. לעולם לא נחוץ ביישומים רגילים."</string>
<string name="permlab_setOrientation" msgid="3365947717163866844">"שנה את כיוון המסך"</string>
@@ -295,18 +293,18 @@
<string name="permlab_installPackages" msgid="335800214119051089">"התקן יישומים ישירות"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"מאפשר ליישום להתקין חבילות Android חדשות או מעודכנות. יישומים זדוניים יכולים להשתמש באפשרות זו כדי להוסיף יישומים חדשים עם הרשאות שרירותיות בעלות עוצמה."</string>
<string name="permlab_clearAppCache" msgid="4747698311163766540">"מחק את כל נתוני הקובץ השמור של היישום"</string>
- <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"מאפשר ליישום לפנות שטח אחסון בטבלט על ידי מחיקת קבצים בספריית הקובץ השמור של היישום. הגישה מוגבלת מאוד בדרך כלל לתהליך מערכת."</string>
+ <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"מאפשר ליישום לפנות שטח אחסון בטבלט על ידי מחיקת קבצים מספריית הקובץ השמור של היישום. הגישה מוגבלת מאוד, בדרך כלל לתהליך מערכת."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"מאפשר ליישום לפנות שטח אחסון בטלפון על ידי מחיקת קבצים בספריית הקובץ השמור של היישום. הגישה מוגבלת מאוד בדרך כלל לתהליכי מערכת."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"העבר משאבי יישומים"</string>
<string name="permdesc_movePackage" msgid="6323049291923925277">"מאפשר ליישום להעביר משאבי יישומים ממדיה פנימית לחיצונית ולהיפך."</string>
<string name="permlab_readLogs" msgid="6615778543198967614">"קרא נתונים רגישים של יומן רישום"</string>
- <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"מאפשר ליישום לקרוא מיומני הרישום השונים של המערכת. כך מתאפשר לו לגלות מידע כללי על הפעולות שלך בטבלט, מידע שעשוי לכלול מידע אישי או פרטי."</string>
+ <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"מאפשר ליישום לקרוא מקובצי היומן השונים של המערכת. כך מתאפשר לו לגלות מידע כללי על הפעולות שלך בטבלט, שעשוי לכלול מידע אישי או פרטי."</string>
<string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"מאפשר ליישום לקרוא מקובצי יומני הרישום השונים של המערכת. כך הוא יכול לגלות מידע כללי על הפעולות שלך בטלפון, מידע שעשוי לכלול מידע אישי או פרטי."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"קרא/כתוב במשאבים בבעלות diag"</string>
<string name="permdesc_diagnostic" msgid="3121238373951637049">"מאפשר ליישום לקרוא ולכתוב בכל משאב שבבעלות קבוצת diag; לדוגמה, קבצים ב-‎/dev. פעולה זו עשויה להשפיע על היציבות והאבטחה של המערכת. היצרן או המפעיל בלבד יכולים להשתמש באפשרות זו לצורך אבחונים ספציפיים לחומרה."</string>
<string name="permlab_changeComponentState" msgid="79425198834329406">"הפעל או השבת רכיבי יישום"</string>
- <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"מאפשר ליישום להשתנות ללא קשר אם רכיב או יישום אחר מופעל או לא. יישומים זדוניים יכולים להשתמש ביכולת זו כדי להשבית יכולות חשובות של הטבלט. יש לנהוג בזהירות בהרשאה זו, כיוון שהיא עלולה להעביר רכיבי יישום למצב לא רגיל, לא עקבי או לא יציב."</string>
- <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"מאפשר ליישום להשתנות ללא קשר אם רכיב או יישום אחר מופעל או לא. יישומים זדוניים יכולים להשתמש ביכולת זו כדי להשבית יכולות חשובות של הטלפון. יש לנהוג בזהירות בהרשאה זו, כיוון שהיא עלולה להעביר רכיבי יישום למצב לא רגיל, לא עקבי או לא יציב."</string>
+ <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"מאפשר ליישום לשנות את הקביעה אם רכיב של יישום אחר מופעל או לא. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשבית יכולות חשובות של הטבלט. יש לנהוג בזהירות בהרשאה זו כיוון שהיא עלולה להעביר רכיבי יישום למצב לא שמיש, לא עקבי או לא יציב."</string>
+ <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"מאפשר ליישום לשנות את הקביעה אם רכיב של יישום אחר מופעל או לא. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשבית יכולות חשובות של הטלפון. יש לנהוג בזהירות בהרשאה זו מכיוון שהיא עלולה להעביר רכיבי יישום למצב לא שמיש, לא עקבי או לא יציב."</string>
<string name="permlab_setPreferredApplications" msgid="3393305202145172005">"הגדר יישומים מועדפים"</string>
<string name="permdesc_setPreferredApplications" msgid="760008293501937546">"מאפשר ליישום לשנות את היישומים המועדפים. פעולה זו עלולה לאפשר ליישומים זדוניים לשנות באופן שקט את היישומים הפועלים ולזייף את היישומים הקיימים כדי לאסוף ממך נתונים פרטיים."</string>
<string name="permlab_writeSettings" msgid="1365523497395143704">"שנה את הגדרות המערכת הכלליות"</string>
@@ -316,21 +314,21 @@
<string name="permlab_writeGservices" msgid="2149426664226152185">"שנה את מפת השירותים של Google"</string>
<string name="permdesc_writeGservices" msgid="6602362746516676175">"מאפשר ליישום לשנות את מפת שירותי Google. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"הפעל אוטומטית בעת האתחול"</string>
- <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"מאפשר ליישום להפעיל את עצמו ברגע שהמערכת מסיימת את האתחול. מצב זה עלול להאריך את הפעלת הטבלט ולאפשר ליישום להאט את הפעולה הכללית של הטבלט אם יפעל תמיד."</string>
+ <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"מאפשר ליישום להפעיל את עצמו ברגע שהמערכת מסיימת את האתחול. מצב זה עלול להאריך את הפעלת הטבלט ולאפשר ליישום להאט את הפעולה הכללית של הטבלט מעצם העובדה שהיישום יפעל כל הזמן."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"מאפשר ליישום להפעיל את עצמו לאחר אתחול המערכת. פעולה זו עלולה להאריך את הפעלת הטלפון ומאפשרת ליישום להאט את הפעולה הכוללת של הטלפון אם היא פועלת תמיד."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"שלח שידור דביק"</string>
- <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"מאפשר ליישום לשלוח שידורים דביקים שנותרים לאחר שהשידור מסתיים. יישומים זדוניים יכולים להאט את הטבלט או להפוך אותו ללא יציב בכך שיגרמו לו להשתמש בזיכרון רב מדי."</string>
+ <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"מאפשר ליישום לשלוח שידורים דביקים, שנותרים לאחר שהשידור מסתיים. יישומים זדוניים עלולים להאט את הטבלט או להפוך אותו ללא יציב על ידי כך שיגרמו לו להשתמש בזיכרון רב מדי."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"מאפשר ליישום לשלוח שידורים דביקים, שנשארים לאחר סיום השידור. יישומים זדוניים עלולים להאט את פעולת הטלפון או לפגום ביציבות שלו כיוון שהם גורמים לשימוש מופרז בזיכרון."</string>
<string name="permlab_readContacts" msgid="6219652189510218240">"קרא נתונים של אנשי קשר"</string>
- <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"מאפשר ליישום לקרוא את כל נתוני אנשי הקשר (כתובות) בטבלט. יישומים זדוניים יכולים להשתמש ביכולת זו כדי לשלוח את הנתונים לאחרים."</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"מאפשר ליישום לקרוא את כל נתוני אנשי הקשר (כתובות) המאוחסנים בטבלט. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לשלוח את הנתונים שלך לאנשים אחרים."</string>
<string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"מאפשר ליישום לקרוא את כל הנתונים של אנשי הקשר (כתובות) המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לשלוח את הנתונים שלך לאנשים אחרים."</string>
<string name="permlab_writeContacts" msgid="644616215860933284">"כתוב נתונים של אנשי קשר"</string>
- <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"מאפשר ליישום לשנות את נתוני הקשר (כתובות) המאוחסנים בטבלט. יישומים זדוניים יכולים להשתמש ביכולת זו כדי למחוק או לשנות את נתוני אנשי הקשר."</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"מאפשר ליישום לשנות את נתוני אנשי הקשר (כתובות) המאוחסנים בטבלט. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את נתוני אנשי הקשר שלך."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"מאפשר ליישום לשנות את הנתונים של אנשי הקשר (כתובות) המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את הנתונים של אנשי הקשר."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"קריאת נתוני פרופיל"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"מאפשר ליישום לקרוא את כל פרטי הפרופיל האישיים שלך. יישומים זדוניים יכולים להשתמש בהרשאה זו כדי לזהות אותך ולשלוח את המידע האישי שלך לאנשים אחרים."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"כתוב נתוני פרופיל"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"מאפשר ליישום לשנות את פרטי הפרופיל האישיים שלך. יישומים זדוניים יכולים להשתמש בהרשאה זו כדי למחוק או לשנות את נתוני הפרופיל שלך."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"קרא את נתוני הפרופיל שלך"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"מאפשר ליישום לקרוא נתוני פרופיל אישי המאוחסנים במכשיר שלך, כגון שמך ופרטי הקשר שלך. משמעות הדבר היא שהיישום יכול לזהות אותך ולשלוח את נתוני הפרופיל שלך לאחרים."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"כתוב בנתוני הפרופיל שלך"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"מאפשר ליישום לשנות או להוסיף לנתוני הפרופיל האישי המאוחסנים במכשיר, כגון שמך ופרטי הקשר שלך. משמעות הדבר היא שיישומים אחרים יכולים לזהות אותך ולשלוח את נתוני הפרופיל שלך לאחרים."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי לוח שנה וגם מידע סודי"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"מאפשר ליישום לקרוא את כל אירועי לוח השנה שמאוחסנים בטבלט שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות שנה אלה ללא ידיעת הבעלים."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"מאפשר ליישום לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות השנה האלה ללא ידיעת הבעלים."</string>
@@ -343,10 +341,10 @@
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"הרשאה להתקין ספק מיקום"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות המיקום האמיתיים כגון GPS או ספקי רשת או לעקוב אחר המיקום שלך ולדווח עליו למקור חיצוני."</string>
<string name="permlab_accessFineLocation" msgid="8116127007541369477">"מיקום מדויק (GPS)"</string>
- <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"קבל משאבי מיקומים מדויקים כגון \'מערכת מיקום גלובלית\' בטבלט בהתאם לזמינות. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע היכן אתה, ועשויים לצרוך כוח סוללה נוסף."</string>
+ <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"קבל גישה למקורות מיקום מדויקים בטבלט, כגון מערכת המיקום הגלובלית (GPS), כאשר הם זמינים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע את המיקום שלך והם עשויים לצרוך חשמל נוסף מהסוללה."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"קבל גישה למקורות מיקום מדויקים כגון מערכת מיקום גלובלית (GPS) בטלפון, כאשר הם זמינים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע את המיקום שלך ולגרום לצריכת סוללה נוספת."</string>
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"מיקום משוער (מבוסס-רשת)"</string>
- <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"קבל גישה למשאבי מיקום גולמיים כגון מסד הנתונים של רשת סלולרית כדי לקבוע מיקום משוער של הטבלט, כשהאפשרות זמינה. יישומים זדוניים עלולים להשתמש ביכולת זאת כדי לקבוע את מיקומך המשוער."</string>
+ <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"קבל גישה למקורות מיקום משוער כגון מסד הנתונים של הרשת לנייד כדי לקבוע את המיקום המשוער של הטבלט, כאשר מקורות אלה זמינים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע את מיקומך המשוער."</string>
<string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"קבל גישה למקורות מיקום משוער כגון מסד הנתונים של הרשת הסלולרית כדי לקבוע את המיקום המשוער של הטלפון, כאשר ניתן. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע את מיקומך המשוער."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"גישה ל-SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"מאפשר ליישום להשתמש בתכונות SurfaceFlinger ברמה נמוכה."</string>
@@ -360,11 +358,11 @@
<string name="permdesc_camera" msgid="6004878235852154239">"מאפשר ליישום לצלם תמונות וסרטונים באמצעות המצלמה. כך יכול היישום לאסוף בכל עת תמונות שהמצלמה רואה."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"השבת טבלט לצמיתות"</string>
<string name="permlab_brick" product="default" msgid="8337817093326370537">"השבת טלפון לצמיתות"</string>
- <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"מאפשר ליישום להשבית את הטבלט כולו לצמיתות."</string>
+ <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"מאפשר ליישום להשבית את הטבלט כולו לצמיתות. זו יכולת מסוכנת מאוד."</string>
<string name="permdesc_brick" product="default" msgid="5569526552607599221">"מאפשר ליישום להשבית את הטלפון כולו לצמיתות. יכולת זו מסוכנת מאוד."</string>
- <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"אלץ אתחול מחדש אל הטבלט"</string>
+ <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"אלץ אתחול מחדש של הטבלט"</string>
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"אלץ אתחול מחדש של הטלפון"</string>
- <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"מאפשר ליישום לכפות על הטבלט לבצע אתחול מחדש."</string>
+ <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"מאפשר ליישום לאלץ את הטבלט לבצע אתחול מחדש."</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"מאפשר ליישום לאלץ את הטלפון לבצע אתחול מחדש."</string>
<string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"טעינה וביטול טעינה של מערכות קבצים"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"מאפשר ליישום לטעון ולבטל טעינה של מערכות קבצים עבור אמצעי אחסון נשלפים."</string>
@@ -384,17 +382,17 @@
<string name="permdesc_vibrate" msgid="2886677177257789187">"מאפשר ליישום לשלוט ברטט."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"שליטה בפנס"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"מאפשר ליישום לשלוט בפנס."</string>
- <string name="permlab_manageUsb" msgid="1113453430645402723">"נהל העדפות ואישורים עבור התקני USB"</string>
- <string name="permdesc_manageUsb" msgid="6148489202092166164">"מאפשר ליישום לנהל העדפות ואישורים עבור התקני USB."</string>
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"נהל העדפות ואישורים עבור מכשירי USB"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"מאפשר ליישום לנהל העדפות ואישורים עבור מכשירי USB."</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"יישם פרוטוקול MTP"</string>
- <string name="permdesc_accessMtp" msgid="6532961200486791570">"מאפשר גישה למנהל התקן MTP של הליבה כדי ליישם פרוטוקול USB של MTP."</string>
+ <string name="permdesc_accessMtp" msgid="6532961200486791570">"מאפשר גישה למנהל התקן MTP של הליבה כדי ליישם פרוטוקול ה-USB של ה-MTP."</string>
<string name="permlab_hardware_test" msgid="4148290860400659146">"בדוק חומרה"</string>
<string name="permdesc_hardware_test" msgid="3668894686500081699">"מאפשר ליישום לשלוט בציוד היקפי מסוגים שונים לצורך בדיקת חומרה."</string>
<string name="permlab_callPhone" msgid="3925836347681847954">"התקשר ישירות למספרי טלפון"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"מאפשר ליישום להתקשר למספרי טלפון ללא התערבות מצידך. יישומים זדוניים עלולים לגרום לשיחות לא צפויות בחשבון הטלפון שלך. לתשומת ליבך, אין אפשרות ליישום להתקשר למספרי חירום."</string>
<string name="permlab_callPrivileged" msgid="4198349211108497879">"התקשר ישירות לכל מספר טלפון"</string>
<string name="permdesc_callPrivileged" msgid="244405067160028452">"מאפשר ליישום להתקשר לכל מספר טלפון, כולל מספרי חירום, ללא התערבות מצידך. יישומים זדוניים עלולים לבצע שיחות מיותרות ולא חוקיות לשירותי חירום."</string>
- <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"הפעל ישירות הגדרת טבלט של CDMA"</string>
+ <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"הפעל ישירות התקנת טבלט מסוג CDMA"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"הפעל ישירות הגדרה של טלפון CDMA"</string>
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"מאפשר ליישום להפעיל הקצאת CDMA. יישומים זדוניים עלולים להפעיל הקצאת CDMA ללא צורך"</string>
<string name="permlab_locationUpdates" msgid="7785408253364335740">"שלוט בהתראות על עדכון מיקום"</string>
@@ -411,12 +409,12 @@
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"מניעת מעבר הטלפון למצב שינה"</string>
<string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"מאפשר ליישום למנוע מהטבלט לעבור למצב שינה."</string>
<string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"מאפשר ליישום למנוע מעבר של הטלפון למצב שינה."</string>
- <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"הפעלה וכיבוי של טבלט"</string>
+ <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"הפעלה או כיבוי של טבלט"</string>
<string name="permlab_devicePower" product="default" msgid="4928622470980943206">"הפעל או כבה את הטלפון"</string>
<string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"מאפשר ליישום להפעיל או לכבות את הטבלט."</string>
<string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"מאפשר ליישום לכבות ולהפעיל את הטלפון."</string>
<string name="permlab_factoryTest" msgid="3715225492696416187">"הפעל במצב בדיקת יצרן"</string>
- <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"הפעל כבדיקת יצרן ברמה נמוכה, המאפשרת גישה מלאה לחומרה של הטבלט . זמין רק כאשר הטבלט פועל במצב בדיקת יצרן."</string>
+ <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"הפעל כבדיקת יצרן ברמה נמוכה, המאפשרת גישה מלאה לחומרה של הטבלט. זמין רק כאשר הטבלט פועל במצב בדיקת יצרן."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"הפעל כבדיקת יצרן ברמה נמוכה, המאפשרת גישה מלאה לחומרת הטלפון. זמינה רק כאשר טלפון פועל במצב בדיקת יצרן."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"הגדר טפט"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"מאפשר ליישום להגדיר את טפט המערכת."</string>
@@ -425,7 +423,7 @@
<string name="permlab_masterClear" msgid="2315750423139697397">"אפס את המערכת לברירות המחדל של היצרן"</string>
<string name="permdesc_masterClear" msgid="5033465107545174514">"מאפשר ליישום לאפס את המערכת לגמרי להגדרות היצרן שלה ולמחוק את כל הנתונים, התצורה והיישומים המותקנים."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"הגדר שעה"</string>
- <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"מאפשר ליישום לשנות את שעת השעון של הטבלט."</string>
+ <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"מאפשר ליישום לשנות את השעה בשעון של הטבלט."</string>
<string name="permdesc_setTime" product="default" msgid="667294309287080045">"מאפשר ליישום לשנות את שעת השעון של הטלפון."</string>
<string name="permlab_setTimeZone" msgid="2945079801013077340">"הגדר אזור זמן"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"מאפשר ליישום לשנות את אזור הזמן של הטבלט."</string>
@@ -433,7 +431,7 @@
<string name="permlab_accountManagerService" msgid="4829262349691386986">"פעל בתור ה-AccountManagerService"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"מאפשר ליישום לבצע שיחות אל AccountAuthenticators"</string>
<string name="permlab_getAccounts" msgid="4549918644233460103">"גלה חשבונות ידועים"</string>
- <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"מאפשר ליישום לקבל רשימה של חשבונות הידועים לטבלט."</string>
+ <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"מאפשר ליישום לקבל רשימה של חשבונות המוכרים לטבלט."</string>
<string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"מאפשר ליישום לקבל את רשימת החשבונות המוכרים לטלפון."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"פעל כמאמת חשבון"</string>
<string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"מאפשר ליישום להשתמש ביכולות מאמת החשבון של מנהל החשבון, כולל יצירת חשבונות וקבלה והגדרה של הסיסמאות שלהם."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"מאפשר ליישום להציג את המצב של כל הרשתות."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"גישה מלאה לאינטרנט"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"מאפשר ליישום ליצור שקעי רשת."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"כתוב את ההגדרות של שם נקודת הגישה"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"מאפשר ליישום לשנות את הגדרות ה-APN, כגון Proxy ויציאה של APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"שנה/עכב הגדרות רשת ותנועה"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"מאפשר ליישום לשנות את הגדרות הרשת ולעכב ולבדוק את כל תנועת הרשת, למשל, לשנות את ה-proxy והיציאה של APN כלשהו. יישומים זדוניים עשויים לפקח, להפנות מחדש, או לשנות חבילות רשת ללא ידיעתך."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"שנה את קישוריות הרשת"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"מאפשר ליישום לשנות את מצב הקישוריות של הרשת."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"שנה קישוריות קשורה"</string>
@@ -460,10 +458,10 @@
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"אפשר קבלת שידורים מרובים ב-Wi-Fi"</string>
<string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"מאפשר ליישום לקבל חבילות שלא ממוענות ישירות למכשיר שלך. יכולת זו שימושית בעת גילוי שירותים המוצעים בקרבת מקום. היא צורכת יותר חשמל לעומת מצב שאינו כולל ריבוי שידורים."</string>
<string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"ניהול Bluetooth"</string>
- <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"מאפשר ליישום להגדיר את הטבלט המקומי עם Bluetooth ולגלות ולהתאים התקנים מרוחקים."</string>
+ <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"מאפשר ליישום להגדיר את הטבלט המקומי מסוג Bluetooth, וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"מאפשר ליישום להגדיר את טלפון Bluetooth המקומי, ולגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"צור חיבורי Bluetooth"</string>
- <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"מאפשר ליישום להציג תצורה של טבלט Bluetooth מקומי וליצור ולקבל חיבורים עם התקנים מותאמים."</string>
+ <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"מאפשר ליישום להציג תצורה של טבלט מקומי מסוג Bluetooth וליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"מאפשר ליישום להציג תצורה של טלפון Bluetooth המקומי, וליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"שלוט ב-Near Field Communication"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"מאפשר ליישום לקיים תקשורת עם תגיות, כרטיסים וקוראים מסוג Near Field Communication ‏‏(NFC)."</string>
@@ -487,8 +485,8 @@
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"שנה/מחק תוכן של כרטיס SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"מאפשר ליישום לכתוב באמצעי אחסון מסוג USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"מאפשר ליישום לכתוב לכרטיס SD."</string>
- <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של מדיית אחסון פנימית"</string>
- <string name="permdesc_mediaStorageWrite" product="default" msgid="8232008512478316233">"מאפשר ליישום לשנות את התוכן של מדיית האחסון הפנימית."</string>
+ <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של אחסון מדיה פנימי"</string>
+ <string name="permdesc_mediaStorageWrite" product="default" msgid="8232008512478316233">"מאפשר ליישום לשנות את התוכן של אחסון המדיה הפנימי."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"גישה למערכת הקבצים בקובץ השמור"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"מאפשר ליישום לקרוא ולכתוב במערכת הקבצים בקובץ השמור."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"בצע/קבל שיחות אינטרנט"</string>
@@ -497,8 +495,8 @@
<string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"מאפשר ליישום לקרוא נתוני שימוש היסטוריים ברשת עבור רשתות ויישומים ספציפיים."</string>
<string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"ניהול מדיניות רשת"</string>
<string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"מאפשר ליישום לנהל מדיניות רשת ולהגדיר כללים ספציפיים ליישומים."</string>
- <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"שינוי ניהול חשבונות של שימוש ברשת"</string>
- <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"מאפשר שינוי של האופן שבו מנוהלים החשבונות של שימוש ברשת מול יישומים. לא מיועד לשימוש של יישומים רגילים."</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"שנה ניהול חשבונות של שימוש ברשת"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"מאפשר שינוי של האופן שבו מנוהלים החשבונות של שימוש ברשת מול יישומים. לא מיועד לשימוש ביישומים רגילים."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"הגדר כללי סיסמה"</string>
<string name="policydesc_limitPassword" msgid="9083400080861728056">"שלוט באורך ובתווים המותרים בסיסמאות לביטול נעילת מסך"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"עקוב אחר ניסיונות לביטול נעילת מסך"</string>
@@ -616,7 +614,7 @@
<string name="relationTypeCustom" msgid="3542403679827297300">"מותאם אישית"</string>
<string name="relationTypeAssistant" msgid="6274334825195379076">"עוזר"</string>
<string name="relationTypeBrother" msgid="8757913506784067713">"אח"</string>
- <string name="relationTypeChild" msgid="1890746277276881626">"צאצא"</string>
+ <string name="relationTypeChild" msgid="1890746277276881626">"ילד"</string>
<string name="relationTypeDomesticPartner" msgid="6904807112121122133">"שותף לחיים"</string>
<string name="relationTypeFather" msgid="5228034687082050725">"אב"</string>
<string name="relationTypeFriend" msgid="7313106762483391262">"חבר"</string>
@@ -625,7 +623,7 @@
<string name="relationTypeParent" msgid="4755635567562925226">"הורה"</string>
<string name="relationTypePartner" msgid="7266490285120262781">"שותף"</string>
<string name="relationTypeReferredBy" msgid="101573059844135524">"הופנה על ידי"</string>
- <string name="relationTypeRelative" msgid="1799819930085610271">"קרוב משפחה"</string>
+ <string name="relationTypeRelative" msgid="1799819930085610271">"קרוב-משפחה"</string>
<string name="relationTypeSister" msgid="1735983554479076481">"אחות"</string>
<string name="relationTypeSpouse" msgid="394136939428698117">"בן/בת זוג"</string>
<string name="sipAddressTypeCustom" msgid="2473580593111590945">"בהתאמה אישית"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"הזנת PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"שרטטת באופן שגוי את קו ביטול הנעילה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטבלט באמצעות פרטי הכניסה שלך ל-Google."\n\n" נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"ציירת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות פרטי הכניסה שלך ב-Google.‏"\n\n" נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"נסה שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"שכחת את הקו?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"ביטול נעילת חשבון"</string>
@@ -702,27 +708,27 @@
<string name="save_password_label" msgid="6860261758665825069">"אשר"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"טיפ: הקש פעמיים כדי להתקרב ולהתרחק."</string>
<string name="autofill_this_form" msgid="1272247532604569872">"מילוי אוטומטי"</string>
- <string name="setup_autofill" msgid="8154593408885654044">"התקן \'מילוי אוטומטי\'"</string>
+ <string name="setup_autofill" msgid="8154593408885654044">"הגדר מילוי אוטומטי"</string>
<string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <string name="autofill_province" msgid="2231806553863422300">"פרובינציה"</string>
+ <string name="autofill_province" msgid="2231806553863422300">"מחוז"</string>
<string name="autofill_postal_code" msgid="4696430407689377108">"מיקוד"</string>
<string name="autofill_state" msgid="6988894195520044613">"מדינה"</string>
<string name="autofill_zip_code" msgid="8697544592627322946">"מיקוד"</string>
<string name="autofill_county" msgid="237073771020362891">"מחוז"</string>
<string name="autofill_island" msgid="4020100875984667025">"אי"</string>
- <string name="autofill_district" msgid="8400735073392267672">"רובע"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"מחוז"</string>
<string name="autofill_department" msgid="5343279462564453309">"מחלקה"</string>
- <string name="autofill_prefecture" msgid="2028499485065800419">"תחום שיפוט"</string>
+ <string name="autofill_prefecture" msgid="2028499485065800419">"אזור"</string>
<string name="autofill_parish" msgid="8202206105468820057">"קהילה"</string>
<string name="autofill_area" msgid="3547409050889952423">"אזור"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"אמירות"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"קרא את ההיסטוריה והסימניות של הדפדפן"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"מאפשר ליישום לקרוא את כל כתובות האתרים שהדפדפן ביקר בהן, ואת כל סימניות הדפדפן."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"כתוב את ההיסטוריה והסימניות של הדפדפן"</string>
- <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"מאפשר ליישום לשנות את ההיסטוריה או הסימניות של הדפדפן המאוחסנות בטבלט. יישומים זדוניים יכולים להשתמש ביכולת זו כדי למחוק או לשנות את הנתונים בדפדפן."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"מאפשר ליישום לשנות את ההיסטוריה או את הסימניות של הדפדפן המאוחסנות בטבלט. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את הנתונים בדפדפן."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"מאפשר ליישום לשנות את ההיסטוריה או הסימניות של הדפדפן המאוחסנות בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את נתוני הדפדפן."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"הגדר התראה בשעון המעורר"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"מאפשר ליישום להגדיר התראה ביישום מותקן של שעון מעורר. ייתכן שיישומי שעון מעורר מסוימים לא יישמו תכונה זו."</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"מאפשר ליישום להוסיף הודעות לתיבת הדואר הנכנס של הדואר הקולי."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"שנה את הרשאות המיקום הגיאוגרפי בדפדפן"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"מאפשר ליישום לשנות את הרשאות המיקום הגיאוגרפי של הדפדפן. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לאפשר שליחה של פרטי מיקום לאתרי אינטרנט אקראיים."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"אימות חבילות"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"מאפשר ליישום לאמת שחבילה ניתנת להתקנה."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"הכפפה למאמת חבילה"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"מאפשר לבעלים להגיש בקשות של מאמתי חבילות. לא אמור להידרש לעולם ביישומים רגילים."</string>
<string name="save_password_message" msgid="767344687139195790">"האם ברצונך שהדפדפן יזכור סיסמה זו?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"לא כעת"</string>
<string name="save_password_remember" msgid="6491879678996749466">"זכור"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"מחק"</string>
<string name="search_go" msgid="8298016669822141719">"חפש"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"חיפוש"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"שאילתת חיפוש"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"נקה שאילתה"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"שלח שאילתה"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"חיפוש קולי"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"לפני חודש אחד"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"לפני חודש אחד"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"חתוך"</string>
<string name="copy" msgid="2681946229533511987">"העתק"</string>
<string name="paste" msgid="5629880836805036433">"הדבק"</string>
- <string name="replace" msgid="8333608224471746584">"החלף"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"החלף"</string>
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"בחירת טקסט"</string>
@@ -882,7 +879,7 @@
<string name="alwaysUse" msgid="4583018368000610438">"השתמש כברירת מחדל עבור פעולה זו."</string>
<string name="clearDefaultHintMsg" msgid="4815455344600932173">"נקה את ברירת המחדל ב\'הגדרות דף הבית\' &gt; \'יישומים\' &gt; \'נהל יישומים\'."</string>
<string name="chooseActivity" msgid="1009246475582238425">"בחר פעולה"</string>
- <string name="chooseUsbActivity" msgid="7892597146032121735">"בחר יישום עבור התקן ה-USB"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"בחר יישום עבור מכשיר ה-USB"</string>
<string name="noApplications" msgid="1691104391758345586">"אין יישומים שיכולים לבצע פעולה זו."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<!-- no translation found for aerr_application (932628488013092776) -->
@@ -908,6 +905,14 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"היישום <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הפר את מדיניות StrictMode באכיפה עצמית."</string>
<string name="smv_process" msgid="5120397012047462446">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הפר את מדיניות StrictMode באכיפה עצמית."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> פועל"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"בחר כדי לעבור ליישום"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"להחליף יישומים?"</string>
@@ -926,11 +931,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"עוצמת קול של התראה"</string>
<string name="volume_notification" msgid="2422265656744276715">"עוצמת קול של התראות"</string>
<string name="volume_unknown" msgid="1400219669770445902">"עוצמת קול"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"עוצמת הקול ב-Bluetooth. הקש כדי להפעיל או להשבית מצב שקט."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"עוצמת קול של רינגטון. הקש כדי להפעיל או להשבית מצב שקט."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"עוצמת קול של שיחה. הקש כדי להפעיל או להשבית מצב שקט."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"עוצמת קול של מדיה. הקש כדי להפעיל או להשבית מצב שקט."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"עוצמת קול של התראות. הקש כדי להפעיל או להשבית מצב שקט."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"עוצמת קול של Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"עוצמת קול של רינגטון"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"עוצמת קול של שיחות"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"עוצמת קול של מדיה"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"עוצמת קול של התראות"</string>
<string name="ringtone_default" msgid="3789758980357696936">"רינגטון המוגדר כברירת מחדל"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"רינגטון המוגדר כברירת מחדל (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"שקט"</string>
@@ -960,8 +965,7 @@
<string name="sms_control_no" msgid="1715320703137199869">"ביטול"</string>
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
+ <string name="sim_removed_message" msgid="2333164559970958645">"הרשת הסלולרית לא תהיה זמינה עד שתפעיל מחדש לאחר הכנסת כרטיס SIM חוקי."</string>
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
@@ -979,8 +983,8 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"הצג הכל"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"אמצעי אחסון גדול מסוג USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB מחובר"</string>
- <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב ואמצעי האחסון מסוג USB של התקן ה-Android."</string>
- <string name="usb_storage_message" product="default" msgid="4510858346516069238">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב וכרטיס ה-SD של התקן ה-Android."</string>
+ <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב ואמצעי האחסון מסוג USB של מכשיר Android."</string>
+ <string name="usb_storage_message" product="default" msgid="4510858346516069238">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לבין כרטיס ה-SD של מכשיר ה-Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"הפעל אמצעי אחסון מסוג USB"</string>
<string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"קיימת בעיה בשימוש באמצעי אחסון מסוג USB לאחסון בנפח גדול ב-USB."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"יש בעיה בשימוש בכרטיס SD לאחסון גדול ב-USB."</string>
@@ -1010,7 +1014,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"ניקוי באגים של USB מחובר"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"בחר להשבית ניקוי באגים ב-USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"בחר שיטת קלט"</string>
- <string name="configure_input_methods" msgid="6324843080254191535">"הגדר שיטות קלט"</string>
+ <string name="configure_input_methods" msgid="6324843080254191535">"הגדרת שיטות קלט"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"מועמדים"</u></string>
@@ -1105,29 +1109,45 @@
<string name="media_shared" product="default" msgid="5706130568133540435">"כרטיס SD נמצא כעת בשימוש של מחשב."</string>
<string name="media_unknown_state" msgid="729192782197290385">"מדיה חיצונית במצב לא ידוע."</string>
<string name="share" msgid="1778686618230011964">"שתף"</string>
- <string name="find" msgid="4808270900322985960">"חפש"</string>
- <string name="websearch" msgid="4337157977400211589">"חיפוש Google"</string>
- <string name="gpsNotifTicker" msgid="5622683912616496172">"בקשת מיקום מ-<xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="find" msgid="4808270900322985960">"מצא"</string>
+ <string name="websearch" msgid="4337157977400211589">"חיפוש באינטרנט"</string>
+ <string name="gpsNotifTicker" msgid="5622683912616496172">"בקשת מיקום מאת <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="gpsNotifTitle" msgid="5446858717157416839">"בקשת מיקום"</string>
<string name="gpsNotifMessage" msgid="1374718023224000702">"מבוקש על ידי <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
<string name="gpsVerifYes" msgid="2346566072867213563">"כן"</string>
<string name="gpsVerifNo" msgid="1146564937346454865">"לא"</string>
<string name="sync_too_many_deletes" msgid="5296321850662746890">"חרגת ממגבלת המחיקה"</string>
- <string name="sync_too_many_deletes_desc" msgid="7030265992955132593">"יש <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> פריטים שנמחקו עבור <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, חשבון <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. מה ברצונך לעשות?"</string>
+ <string name="sync_too_many_deletes_desc" msgid="7030265992955132593">"יש <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> פריטים שנמחקו עבור <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, חשבון <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. מה תרצה לעשות?"</string>
<string name="sync_really_delete" msgid="8933566316059338692">"מחק את הפריטים."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"בטל את המחיקות."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"אל תעשה דבר בינתיים."</string>
<string name="choose_account_label" msgid="4191313562041125787">"בחר חשבון"</string>
- <string name="number_picker_increment_button" msgid="4830170763103463443">"הוספה"</string>
- <string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחתה"</string>
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"הגדל"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחת"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"מסומן"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"לא מסומן"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"נבחר"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"לא נבחר"</string>
- <string name="switch_on" msgid="551417728476977311">"פועל"</string>
+ <string name="switch_on" msgid="551417728476977311">"מופעל"</string>
<string name="switch_off" msgid="7249798614327155088">"כבוי"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"לחוץ"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"לא לחוץ"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
@@ -1140,10 +1160,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"נתוני 2G-3G מושבתים"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"נתוני 4G מושבתים"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"נתונים לנייד מושבתים"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"הקש כדי להפעיל"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"אירעה חריגה ממגבלת הנתונים של 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"אירעה חריגה ממגבלת הנתונים של 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"אירעה חריגה ממגבלת הנתונים לנייד"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> מעבר למגבלה שצוינה"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
@@ -1158,16 +1182,14 @@
<string name="issued_by" msgid="2647584988057481566">"הונפק על ידי:"</string>
<string name="validity_period" msgid="8818886137545983110">"חוקיות:"</string>
<string name="issued_on" msgid="5895017404361397232">"הונפק בתאריך:"</string>
- <string name="expires_on" msgid="3676242949915959821">"פג תוקף ב:"</string>
+ <string name="expires_on" msgid="3676242949915959821">"תאריך תפוגה:"</string>
<string name="serial_number" msgid="758814067660862493">"מספר סידורי:"</string>
<string name="fingerprints" msgid="4516019619850763049">"טביעות אצבע:"</string>
<string name="sha256_fingerprint" msgid="4391271286477279263">"טביעת אצבע SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"טביעת אצבע SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"הצג הכל..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"בחר פעילות"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"שתף עם..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"המכשיר נעול."</string>
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index ef2d53e..a370cb6 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"緊急放送メッセージの取得と処理をアプリケーションに許可します。これはシステムアプリケーションのみ利用できる権限です。"</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"SMSメッセージの送信"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"SMSメッセージの送信をアプリケーションに許可します。悪意のあるアプリケーションが確認なしでメッセージを送信し、料金が発生する恐れがあります。"</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"確認せずにSMSメッセージを送信する"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"SMSメッセージの送信をアプリケーションに許可します。悪意のあるアプリケーションが確認なしでメッセージを送信し、料金が発生する恐れがあります。"</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMSの読み取り"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"タブレットやSIMカードに保存されているSMSメッセージの読み取りをアプリケーションに許可します。この許可を悪意のあるアプリケーションに利用されると、機密メッセージが読み取られる恐れがあります。"</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"携帯電話やSIMカードに保存したSMSメッセージの読み取りをアプリケーションに許可します。悪意のあるアプリケーションが機密メッセージを読み取る恐れがあります。"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"連絡先データの書き込み"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"タブレットに保存されている連絡先(アドレス)データの変更をアプリケーションに許可します。この許可を悪意のあるアプリケーションに利用されると、連絡先データが消去または変更される恐れがあります。"</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"端末に保存した連絡先(アドレス)データの変更をアプリケーションに許可します。悪意のあるアプリケーションが連絡先データを消去/変更する恐れがあります。"</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"プロフィールデータの読み取り"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"アプリケーションによる個人の全プロフィール情報の読み取りを許可します。この場合、悪意のあるアプリケーションによって身元が特定されたり個人情報が第三者に転送されたりする危険があります。"</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"プロフィールデータの書き込み"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"アプリケーションによる個人のプロフィール情報の変更を許可します。この場合、悪意のあるアプリケーションによってプロフィールデータが消去または変更される危険があります。"</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"プロフィールデータの読み取り"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"端末に保存されている名前や連絡先情報といった個人のプロフィール情報をアプリケーションが読み取ることを許可します。このアプリケーションは身元を特定したり、プロフィール情報を第三者に転送したりする可能性があります。"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"プロフィールデータに書き込む"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"端末に保存されている名前や連絡先情報といった個人のプロフィール情報をアプリケーションが変更または追加することを許可します。このアプリケーションは身元を特定したり、プロフィール情報を第三者に転送したりする可能性があります。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"カレンダーの予定と機密情報を読み取る"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"タブレットに保存したすべてのカレンダーの予定(友だちや同僚の予定も含む)を読み取ることをアプリケーションに許可します。悪意のあるアプリケーションにこの許可を与えると、所有者の知らないうちにカレンダーから個人情報が引き出される恐れがあります。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"端末に保存したすべてのカレンダーの予定(友だちや同僚の予定も含む)を読み取ることをアプリケーションに許可します。悪意のあるアプリケーションにこの許可を与えると、所有者の知らないうちにカレンダーから個人情報が引き出される恐れがあります。"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"すべてのネットワーク状態の表示をアプリケーションに許可します。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"完全なインターネットアクセス"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"ネットワークソケットの作成をアプリケーションに許可します。"</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"アクセスポイント名設定の書き込み"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"APNのプロキシやポートなどのAPN設定の変更をアプリケーションに許可します。"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"ネットワークの設定の変更とトラフィックの傍受"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"任意のAPNのプロキシとポートを変更するなど、アプリケーションがネットワークの設定を変更して、すべてのネットワークトラフィックを傍受、検査することを許可します。悪意のあるアプリケーションによって通知なしにネットワークパケットが監視、リダイレクト、変更される恐れがあります。"</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"ネットワーク接続の変更"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"ネットワークの接続状態の変更をアプリケーションに許可します。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"テザリング接続の変更"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"入力したPINは<xliff:g id="NUMBER_0">%d</xliff:g>回とも正しくありませんでした。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度入力してください。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"指定したパターンは<xliff:g id="NUMBER_0">%d</xliff:g>回とも正しくありません。あと<xliff:g id="NUMBER_1">%d</xliff:g>回指定に失敗すると、携帯電話のロックの解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度指定してください。"</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g>秒後にやり直してください。"</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"パターンを忘れた場合"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"アカウントのロック解除"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"ボイスメール受信トレイにメッセージを追加することをアプリケーションに許可します。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"ブラウザの位置情報へのアクセス権を変更"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"ブラウザの位置情報に対するアクセス権の変更をアプリケーションに許可します。この設定では、悪意のあるアプリケーションが任意のウェブサイトに位置情報を送信する可能性があります。"</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"パッケージのベリファイ"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"パッケージがインストール可能かを確認することをアプリケーションに許可します。"</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"パッケージベリファイアにバインド"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"パッケージベリファイアのリクエストを所有者に許可します。通常のアプリケーションにはまったく必要ありません。"</string>
<string name="save_password_message" msgid="767344687139195790">"このパスワードをブラウザで保存しますか?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"今は保存しない"</string>
<string name="save_password_remember" msgid="6491879678996749466">"保存"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"Del"</string>
<string name="search_go" msgid="8298016669822141719">"検索"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"検索"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"検索キーワード"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"検索キーワードを削除"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"検索キーワードを送信"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"音声検索"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1か月前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1か月前"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"切り取り"</string>
<string name="copy" msgid="2681946229533511987">"コピー"</string>
<string name="paste" msgid="5629880836805036433">"貼り付け"</string>
- <string name="replace" msgid="8333608224471746584">"置換"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"変更"</string>
<string name="copyUrl" msgid="2538211579596067402">"URLをコピー"</string>
<string name="selectTextMode" msgid="6738556348861347240">"テキストを選択..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"テキスト選択"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"[設定]&gt;[アプリケーション]&gt;[アプリケーションの管理]で再度有効にできます。"</string>
<string name="smv_application" msgid="295583804361236288">"アプリケーション<xliff:g id="APPLICATION">%1$s</xliff:g>(プロセス<xliff:g id="PROCESS">%2$s</xliff:g>)でStrictModeポリシー違反がありました。"</string>
<string name="smv_process" msgid="5120397012047462446">"プロセス<xliff:g id="PROCESS">%1$s</xliff:g>でStrictModeポリシー違反がありました。"</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>を実行中"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"アプリケーションを切り替える"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"アプリケーションを切り替えますか?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"アラームの音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetoothの音量。タップするとマナーモードに切り替わります。"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"着信音量。タップするとマナーモードに切り替わります。"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"通話の音量。タップするとマナーモードに切り替わります。"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"メディアの音量。タップするとマナーモードに切り替わります。"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知の音量。タップするとマナーモードに切り替わります。"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetoothの音量"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"着信音量"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"通話音量"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"メディアの音量"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知音量"</string>
<string name="ringtone_default" msgid="3789758980357696936">"プリセット着信音"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"端末の基本着信音(<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"サイレント"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"キャンセル"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIMカードが取り外されました"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"モバイルネットワークはSIMカードを交換するまで利用できません。"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"有効なSIMカードを挿入して再起動するまでは、モバイルネットワークは利用できません。"</string>
<string name="sim_done_button" msgid="827949989369963775">"完了"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIMカードが追加されました"</string>
<string name="sim_added_message" msgid="1209265974048554242">"モバイルネットワークにアクセスするには端末を再起動する必要があります。"</string>
@@ -1111,14 +1116,30 @@
<string name="choose_account_label" msgid="4191313562041125787">"アカウントを選択"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"オン"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"オフ"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"オフ"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"オフ"</string>
- <string name="switch_on" msgid="551417728476977311">"オン"</string>
- <string name="switch_off" msgid="7249798614327155088">"オフ"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"ON"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"OFF"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"ON"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"選択されていません"</string>
+ <string name="switch_on" msgid="551417728476977311">"ON"</string>
+ <string name="switch_off" msgid="7249798614327155088">"OFF"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"ON"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"OFF"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"上へ移動"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"その他のオプション"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G~3Gデータが無効になりました"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4Gデータが無効になりました"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"モバイルデータが無効になりました"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"有効にするにはタップしてください"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G~3Gデータの制限を超えました"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4Gデータの制限を超えました"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"モバイルデータの制限を超えました"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G~3Gデータの上限を超えました"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4Gデータの上限を超えました"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"モバイルデータの上限を超えました"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"指定した上限を<xliff:g id="SIZE">%s</xliff:g>超えました"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index ba4e6df..746e90b 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"인증에 실패했습니다."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"프록시 서버를 통한 인증에 실패했습니다."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"서버에 연결하지 못했습니다."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"서버와 통신할 수 없습니다. 잠시 후에 다시 시도해 주세요."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"서버와 통신할 수 없습니다. 잠시 후에 다시 시도해 주세요."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"서버 연결 제한시간이 초과되었습니다."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"페이지에 서버 리디렉션이 너무 많이 포함되어 있습니다."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"지원되지 않는 프로토콜입니다."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"애플리케이션이 긴급 방송 메시지를 수신하고 처리할 수 있도록 합니다. 이 권한은 시스템 애플리케이션에만 사용할 수 있습니다."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"SMS 메시지 보내기"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"애플리케이션이 SMS 메시지를 보낼 수 있도록 합니다. 이 경우 악성 애플리케이션이 사용자의 확인 없이 메시지를 전송하여 요금을 부과할 수 있습니다."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"확인 없이 SMS 메시지 보내기"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"애플리케이션이 SMS 메시지를 보낼 수 있도록 합니다. 이 경우 악성 애플리케이션이 사용자의 확인 없이 메시지를 전송하여 요금을 부과할 수 있습니다."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS 또는 MMS 읽기"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"애플리케이션이 태블릿 또는 SIM 카드에 저장된 SMS 메시지를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 기밀 메시지를 읽을 수도 있습니다."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"애플리케이션이 휴대전화 또는 SIM 카드에 저장된 SMS 메시지를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 기밀 메시지를 읽을 수 있습니다."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"연락처 데이터 작성"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"애플리케이션이 태블릿에 저장된 연락처(주소) 데이터를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 연락처 데이터를 지우거나 수정할 수 있습니다."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"애플리케이션이 휴대전화에 저장된 연락처(주소) 데이터를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 연락처 데이터를 지우거나 수정할 수 있습니다."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"프로필 데이터 읽기"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"애플리케이션이 개인 프로필 정보를 모두 읽을 수 있도록 합니다. 이렇게 하면 악성 애플리케이션이 이 정보를 사용하여 사용자를 식별하고 개인 정보를 다른 사용자에게 보낼 수 있습니다."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"프로필 데이터 작성"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"애플리케이션이 개인 프로필 정보를 수정할 수 있도록 허용합니다. 이렇게 하면 악성 애플리케이션이 이 정보를 사용하여 프로필 데이터를 지우거나 수정할 수 있습니다."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"프로필 데이터 읽기"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"애플리케이션이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 읽을 수 있도록 합니다. 이것은 애플리케이션이 사용자를 확인하고 다른 사용자들에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"프로필 데이터에 쓰기"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"애플리케이션이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 변경하거나 추가할 수 있도록 합니다. 이것은 다른 애플리케이션이 사용자를 확인하고 다른 사용자들에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"캘린더 일정 및 기밀정보 읽기"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"애플리케이션이 친구나 동료의 일정을 포함하여 태블릿에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 권한이 있는 악성 애플리케이션은 소유자 몰래 이러한 캘린더에서 개인정보를 추출할 수 있습니다."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"애플리케이션이 친구나 동료의 일정을 포함하여 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 권한이 있는 악성 애플리케이션은 소유자 몰래 이러한 캘린더에서 개인정보를 추출할 수 있습니다."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"애플리케이션이 모든 네트워크의 상태를 볼 수 있도록 합니다."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"인터넷에 최대한 액세스"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"애플리케이션이 네트워크 소켓을 만들 수 있도록 합니다."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"액세스포인트 이름(APN) 설정 쓰기"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"애플리케이션이 APN의 프록시 및 포트 같은 APN 설정을 수정할 수 있도록 합니다."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"네트워크 설정 및 트래픽 차단/변경"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"애플리케이션이 모든 네트워크 트래픽을 가로채고 검사하거나 네트워크 설정을 변경하도록 허용합니다. 예를 들어 프록시나 APN의 포트를 변경할 수 있습니다. 악성 애플리케이션이 사용자 모르게 네트워크 패킷을 모니터링하고 리디렉션하며 수정할 수도 있습니다."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"네트워크 연결 변경"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"애플리케이션이 네트워크 연결 상태를 변경할 수 있도록 합니다."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"테러링 연결 변경"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"PIN을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 입력했습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 Google 로그인을 통해 태블릿을 잠금해제하도록 요청됩니다. "\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도하세요."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 Google 로그인을 통해 휴대전화를 잠금해제하도록 요청됩니다. "\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도하세요."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"태블릿을 잠금 해제하려는 시도가 <xliff:g id="NUMBER_0">%d</xliff:g>번 잘못되었습니다. <xliff:g id="NUMBER_1">%d</xliff:g>번 더 실패하면 태블릿이 초기 설정값으로 재설정되고 사용자 데이터가 모두 손실됩니다."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"휴대전화를 잠금 해제하려는 시도가 <xliff:g id="NUMBER_0">%d</xliff:g>번 잘못되었습니다. <xliff:g id="NUMBER_1">%d</xliff:g>번 더 실패하면 휴대전화가 초기 설정값으로 재설정되고 사용자 데이터가 모두 손실됩니다."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"태블릿을 잠금 해제하려는 시도가 <xliff:g id="NUMBER">%d</xliff:g>번 잘못되었습니다. 태블릿이 초기 설정값으로 재설정됩니다."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"휴대전화를 잠금 해제하려는 시도가 <xliff:g id="NUMBER">%d</xliff:g>번 잘못되었습니다. 휴대전화가 초기 설정값으로 재설정됩니다."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g>초 후에 다시 시도하세요."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"패턴을 잊으셨나요?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"계정 잠금 해제"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"애플리케이션이 음성사서함 받은편지함에 메시지를 추가하도록 허용합니다."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"브라우저 위치 정보 수정 권한"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"애플리케이션이 브라우저의 위치 정보 권한을 수정할 수 있도록 합니다. 악성 애플리케이션이 이를 사용하여 임의의 웹사이트에 위치 정보를 보낼 수도 있습니다."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"패키지 확인"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"애플리케이션이 패키지가 설치 가능한지 확인할 수 있도록 합니다."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"패키지 인증 연결"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"소유자가 패키지 인증을 요청할 수 있도록 합니다. 일반 애플리케이션에는 필요하지 않습니다."</string>
<string name="save_password_message" msgid="767344687139195790">"브라우저에 이 비밀번호를 저장하시겠습니까?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"나중에"</string>
<string name="save_password_remember" msgid="6491879678996749466">"저장"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"입력"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"삭제"</string>
<string name="search_go" msgid="8298016669822141719">"검색"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"검색"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"검색어"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"검색어 삭제"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"검색어 보내기"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"음성 검색"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"한 달 전"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"한 달 전"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"잘라내기"</string>
<string name="copy" msgid="2681946229533511987">"복사"</string>
<string name="paste" msgid="5629880836805036433">"붙여넣기"</string>
- <string name="replace" msgid="8333608224471746584">"바꾸기"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"파일 바꾸기"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL 복사"</string>
<string name="selectTextMode" msgid="6738556348861347240">"텍스트 선택..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"텍스트 선택"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"USB 기기에 대한 애플리케이션 선택"</string>
<string name="noApplications" msgid="1691104391758345586">"작업을 수행할 수 있는 애플리케이션이 없습니다."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g>(이)가 중지되었습니다."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"<xliff:g id="PROCESS">%1$s</xliff:g> 프로세스가 중지되었습니다."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g>이(가) 응답하지 않습니다."\n\n"닫으시겠습니까?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"<xliff:g id="ACTIVITY">%1$s</xliff:g> 활동이 응답하지 않습니다."\n\n"닫으시겠습니까?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"설정 &gt; 애플리케이션 &gt; 애플리케이션 관리로 이동하여 이 모드를 다시 사용하도록 설정합니다."</string>
<string name="smv_application" msgid="295583804361236288">"애플리케이션 <xliff:g id="APPLICATION">%1$s</xliff:g>(프로세스 <xliff:g id="PROCESS">%2$s</xliff:g>)이(가) 자체 시행 StrictMode 정책을 위반했습니다."</string>
<string name="smv_process" msgid="5120397012047462446">"프로세스(<xliff:g id="PROCESS">%1$s</xliff:g>)가 자체 시행 StrictMode 정책을 위반했습니다."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android 업그레이드 중..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"애플리케이션 <xliff:g id="NUMBER_1">%2$d</xliff:g>개 중 <xliff:g id="NUMBER_0">%1$d</xliff:g>개 최적화 중"</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"애플리케이션을 시작하는 중입니다."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"부팅 완료"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 실행 중"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"애플리케이션으로 전환하려면 선택"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"애플리케이션을 전환하시겠습니까?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"알람 볼륨"</string>
<string name="volume_notification" msgid="2422265656744276715">"알림 볼륨"</string>
<string name="volume_unknown" msgid="1400219669770445902">"볼륨"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"블루투스 볼륨입니다. 무음 모드로 전환하려면 탭하세요."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"벨소리 볼륨입니다. 무음 모드로 전환하려면 탭하세요."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"통화 볼륨입니다. 무음 모드로 전환하려면 탭하세요."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"미디어 볼륨입니다. 무음 모드로 전환하려면 탭하세요."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"알림 볼륨입니다. 무음 모드로 전환하려면 탭하세요."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"블루투스 볼륨"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"벨소리 볼륨"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"통화 볼륨"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"미디어 볼륨"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"알림 볼륨"</string>
<string name="ringtone_default" msgid="3789758980357696936">"기본 벨소리"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"기본 벨소리(<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"무음"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"인터넷 연결 상태가 좋지 않습니다."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Direct 작업을 시작합니다. 이 작업을 하면 Wi-Fi 클라이언트/핫스팟 작업이 중지됩니다."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct를 시작하지 못했습니다."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct를 시작하지 못했습니다."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>에서 Wi-Fi Direct 연결 설정을 요청합니다. 수락하려면 확인을 클릭하세요."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>에서 Wi-Fi Direct 연결 설정을 요청합니다. 계속 진행하려면 PIN을 입력하세요."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"연결 설정을 계속하려면 WPS 핀(<xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>)을 피어 기기(<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>)에 입력해야 합니다."</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"확인"</string>
<string name="sms_control_no" msgid="1715320703137199869">"취소"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM 카드 제거됨"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"SIM 카드를 교체해야 모바일 네트워크를 사용할 수 있습니다."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"유효한 SIM 카드를 삽입하여 다시 시작할 때까지 모바일 네트워크를 사용할 수 없습니다."</string>
<string name="sim_done_button" msgid="827949989369963775">"완료"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM 카드 추가됨"</string>
<string name="sim_added_message" msgid="1209265974048554242">"모바일 네트워크에 액세스하려면 기기를 다시 시작해야 합니다."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB 저장소를 사용하지 않도록 설정하는 동안 문제가 발생했습니다. USB 호스트와 연결을 해제했는지 확인한 다음 다시 시도하세요."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB 저장소 사용"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB 저장소를 사용하면 사용 중인 일부 애플리케이션이 중지되어 USB 저장소를 사용 중지할 때까지 사용할 수 없게 됩니다."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB 작업 실패"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB 작업을 하지 못했습니다."</string>
<string name="dlg_ok" msgid="7376953167039865701">"확인"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"미디어 기기로 연결됨"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"카메라로 연결됨"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD 카드 마운트 해제 중..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB 저장소 지우는 중..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"SD 카드 지우는 중..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB 저장소를 지우지 못했습니다."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"USB 저장소를 지우지 못했습니다."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB 저장소를 지우지 못했습니다."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"SD 카드를 지우지 못했습니다."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD 카드가 마운트 해제되기 전에 제거되었습니다."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"현재 USB 저장소를 확인하는 중입니다."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"현재 SD 카드를 확인하는 중입니다."</string>
@@ -1111,14 +1106,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"계정 선택"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"올리기"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"줄이기"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"선택됨"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"확인"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"선택 안함"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"선택됨"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"선택 안함"</string>
- <string name="switch_on" msgid="551417728476977311">"사용"</string>
- <string name="switch_off" msgid="7249798614327155088">"사용 안함"</string>
+ <string name="switch_on" msgid="551417728476977311">"켜짐"</string>
+ <string name="switch_off" msgid="7249798614327155088">"꺼짐"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"누름"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"누르지 않음"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt 키"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"취소"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete 키"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"완료"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"모드 변경"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 키"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 키"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"키. 비밀번호를 입력할 때 키 소리를 들으려면 헤드셋이 필요합니다."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"위로 탐색"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G 데이터 사용중지됨"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 데이터 사용중지됨"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"모바일 데이터 사용중지됨"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"사용하려면 누르세요."</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G 데이터 제한을 초과했습니다."</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G의 데이터 제한을 초과했습니다."</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"모바일 데이터 제한을 초과했습니다."</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> - 지정된 한도 초과"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"사용하려면 터치하세요."</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G - 3G 데이터 제한 초과됨"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4GB의 데이터 제한 초과됨"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"모바일 데이터 제한 초과됨"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g>의 지정된 한도를 초과했습니다."</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"백그라운드 데이터 사용이 제한됨"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"제한 설정을 삭제하려면 터치하세요."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"보안 인증서"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"유효한 인증서입니다."</string>
<string name="issued_to" msgid="454239480274921032">"발급 대상:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"활동 선택"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"공유 대상..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"기기가 잠겼습니다."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-large/styles.xml b/core/res/res/values-large/styles.xml
deleted file mode 100644
index 5206d7c..0000000
--- a/core/res/res/values-large/styles.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<resources>
- <style name="PreferencePanel">
- <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
- <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
- <item name="android:layout_marginTop">48dip</item>
- <item name="android:layout_marginBottom">48dip</item>
- <item name="android:background">?attr/detailsElementBackground</item>
- </style>
-</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index c4f72df..92465fb 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Tapatybės nustatymas buvo nesėkmingas."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Tapatybės nustatymas naudojant tarpinį serverį buvo nesėkmingas."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Ryšys su serveriu buvo nesėkmingas."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serveriui nepavyko susisiekti. Vėliau bandykite dar kartą."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Nepavyko pasiekti serverio. Vėliau bandykite dar kartą."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Baigėsi ryšio su serveriu laikas."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Šiame puslapyje yra per daug serverio peradresavimų."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokolas nepalaikomas."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Leidžiama programa gauti ir apdoroti kritinės padėties transliacijos pranešimus. Šis leidimas galimas tik naudojant sistemos programas."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"siųsti SMS pranešimus"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Leidžia programai siųsti SMS pranešimus. Kenkėjiškos programos gali kainuoti jums pinigų, nes gali siųsti SMS pranešimus be jūsų patvirtinimo."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"siųsti SMS pranešimus be patvirtinimo"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Programai leidžiama siųsti SMS pranešimus. Kenkėjiškos programos gali būti jums nuostolingos, nes gali siųsti pranešimus be jūsų patvirtinimo."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"skaityti SMS ar MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Leidžiama programai skaityti SMS pranešimus, išsaugotus jūsų planšetiniame kompiuteryje ar SIM kortelėje. Kenkėjiškos programos gali skaityti konfidencialius pranešimus."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Leidžia programai skaityti SMS pranešimus, išsaugotus jūsų telefone ar SIM kortelėje. Kenkėjiškos programos gali skaityti konfidencialius pranešimus."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"rašyti adresatų duomenis"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Leidžiama programai keisti kontaktų (adreso) duomenis, išsaugotus planšetiniame kompiuteryje. Kenkėjiškos programos gali tai naudoti, kad ištrintų ar keistų kontaktų duomenis."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Leidžia programai keisti adresatų (adresų) duomenis, išsaugotus jūsų telefone. Kenkėjiškos programos gali tai naudoti, kad ištrintų ar pakeistų jūsų adresatų duomenis."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"skaityti profilio duomenis"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Leidžiama programai skaityti visą asmeninę profilio informaciją. Piktybinės programos gali tai naudoti, kad jus identifikuotų ir siųstų asmeninę informaciją kitiems žmonėms."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"įrašyti profilio duomenis"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Leidžiama programai keisti asmeninę profilio informaciją. Piktybinės programos gali tai naudoti profilio duomenims ištrinti arba keisti."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"skaityti profilio duomenis"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Programai leidžiama skaityti įrenginyje saugomą asmeninio profilio informaciją, pvz., vardą ir kontaktinę informaciją. Vadinasi, programa galės jus identifikuoti ir siųsti profilio informaciją kitiems."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"rašyti kaip profilio duomenis"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Programai leidžiama keisti įrenginyje saugomą asmeninio profilio informaciją, pvz., vardą ir kontaktinę informaciją, arba jos pridėti. Vadinasi, kitos programos galės jus identifikuoti ir siųsti profilio informaciją kitiems."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"nuskaito kalendoriaus įvykius ir konfidencialią informaciją"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Programai leidžiama nuskaityti visus jūsų planšetiniame kompiuteryje saugomus kalendoriaus įvykius – įskaitant ir jūsų draugų bei bendradarbių. Šį leidimą gavusi kenkėjiška programa gali paimti asmeninius duomenis iš šių kalendorių be savininko žinios."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Programai leidžiama nuskaityti visus jūsų telefone saugomus kalendoriaus įvykius – įskaitant ir jūsų draugų bei bendradarbių. Šį leidimą gavusi kenkėjiška programa gali paimti asmeninius duomenis iš šių kalendorių be savininko žinios."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Leidžia programai žiūrėti visų tinklų būseną."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"visa interneto prieiga"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Leidžia programai kurti tinklo lizdus."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"rašyti prieigos taško pavadinimo nustatymus"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Leidžia programai keisti APN nustatymus, pvz., bet kurio VPT tarpinio serverio ir prievado nustatymus."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"keisti / perimti tinklo nustatymus ir srautą"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Programai leidžiama keisti tinklo nustatymus ir perimti bei tikrinti visą tinklo srautą, pvz., keisti bet kurio APN tarpinį serverį ir prievadą. Kenkėjiškos programos jums nežinant galėjo stebėti, peradresuoti arba pakeisti tinklo paketus."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"keisti tinklo jungiamumą"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Leidžia programai keisti tinklo jungiamumo būseną."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Keisti susietą jungiamumą"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"<xliff:g id="NUMBER_0">%d</xliff:g> k. netinkamai įvedėte PIN kodą. "\n\n"Po <xliff:g id="NUMBER_1">%d</xliff:g> sek. bandykite dar kartą."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g> k. neteisingai nubrėžėte atrakinimo šabloną. Dar po <xliff:g id="NUMBER_1">%d</xliff:g> nesėkmingų (-o) bandymų (-o) būsite paprašyti atrakinti planšetinį kompiuterį naudodami „Google“ prisijungimo duomenis."\n\n" Po <xliff:g id="NUMBER_2">%d</xliff:g> sek. bandykite dar kartą."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Neteisingai nurodėte savo atrakinimo modelį <xliff:g id="NUMBER_0">%d</xliff:g> kartus (-ų). Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkmingų bandymų būsite paprašyti atrakinti telefoną naudojant „Google“ prisijungimo duomenis."\n\n" Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"<xliff:g id="NUMBER_0">%d</xliff:g> kart. bandėte netinkamai atrakinti planšetinį kompiuterį. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. planšetiniame kompiuteryje bus iš naujo nustatyti numatytieji gamyklos nustatymai ir bus prarasti visi naudotojo duomenys."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"<xliff:g id="NUMBER_0">%d</xliff:g> kart. bandėte netinkamai atrakinti telefoną. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. telefone bus iš naujo nustatyti numatytieji gamyklos nustatymai ir bus prarasti visi naudotojo duomenys."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"<xliff:g id="NUMBER">%d</xliff:g> kart. bandėte netinkamai atrakinti planšetinį kompiuterį. Planšetinis kompiuteris bus iš naujo nustatytas į numatytuosius gamyklos nustatymus."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"<xliff:g id="NUMBER">%d</xliff:g> kart. bandėte netinkamai atrakinti telefoną. Telefonas bus iš naujo nustatytas į numatytuosius gamyklos nustatymus."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Bandyti dar kartą po <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Pamiršote modelį?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Paskyros atrakinimas"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Leidžia programai pridėti pranešimų prie jūsų balso pašto gautųjų."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Keisti naršyklės geografinės vietovės leidimus"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Leidžia programai keisti geografinių naršyklės vietų leidimus. Kenkėjiškos programos tai gali naudoti siunčiant vietos informaciją atsitiktinėms svetainėms."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"patikrinti paketus"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Leidžiama programa patikrinti, ar paketą galima įdiegti."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"susaistyti su paketo tikrinimo programa"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Savininkui leidžiama teikti užklausas patikrinti paketą. Įprastinėms programoms to neturėtų prireikti."</string>
<string name="save_password_message" msgid="767344687139195790">"Ar norite, kad naršyklė atsimintų šį slaptažodį?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ne dabar"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Atsiminti"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"„Enter“ klavišas"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"ištrinti"</string>
<string name="search_go" msgid="8298016669822141719">"Ieškoti"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Ieškoti"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Paieškos užklausa"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Išvalyti užklausą"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Patvirtinti užklausą"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Paieška balsu"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Prieš 1 mėn."</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Prieš maždaug 1 mėnesį"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Iškirpti"</string>
<string name="copy" msgid="2681946229533511987">"Kopijuoti"</string>
<string name="paste" msgid="5629880836805036433">"Įklijuoti"</string>
- <string name="replace" msgid="8333608224471746584">"Pakeisti"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Pakeisti"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopijuoti URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pasirinkti tekstą..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksto pasirinkimas"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Pasirinkti programą USB įrenginiui"</string>
<string name="noApplications" msgid="1691104391758345586">"Šio veiksmo negali atlikti jokios programos."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Deja, <xliff:g id="APPLICATION">%1$s</xliff:g> sustojo."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Deja, <xliff:g id="PROCESS">%1$s</xliff:g> sustojo."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"„<xliff:g id="APPLICATION">%2$s</xliff:g>“ neatsako."\n\n"Ar norite ją uždaryti?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Veiksmas „<xliff:g id="ACTIVITY">%1$s</xliff:g>“ neatsako."\n\n"Ar norite jį uždaryti?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Iš naujo įgalinkite tai apsilankę skiltyje „Nustatymai“ &gt; „Programos“ &gt; „Valdyti programas“."</string>
<string name="smv_application" msgid="295583804361236288">"Programa „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (procesas „<xliff:g id="PROCESS">%2$s</xliff:g>“) pažeidė savo vykdomą „StrictMode“ politiką."</string>
<string name="smv_process" msgid="5120397012047462446">"„<xliff:g id="PROCESS">%1$s</xliff:g>“ procesas pažeidė savo vykdomą „StrictMode“ politiką."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"„Android“ naujovinama..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimizuojama <xliff:g id="NUMBER_0">%1$d</xliff:g> programa iš <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Paleidžiamos programos."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Užbaigiamas paleidimas."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Vykdoma „<xliff:g id="APP">%1$s</xliff:g>“"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Pasirinkti perjungti į programą"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Perjungti programas?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Signalo garsumas"</string>
<string name="volume_notification" msgid="2422265656744276715">"Pranešimo apimtis"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Garsumas"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"„Bluetooth“ apimtis. Palieskite, kad perjungtumėte į tylųjį režimą."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Skambėjimo signalo apimtis. Palieskite, kad perjungtumėte į tylųjį režimą."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Skambučių apimtis. Palieskite, kad perjungtumėte į tylųjį režimą."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Medijos apimtis. Palieskite, kad perjungtumėte į tylųjį režimą."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Pranešimų apimtis. Palieskite, kad perjungtumėte į tylųjį režimą."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"„Bluetooth“ garsumas"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Skambėjimo tono garsumas"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Skambučio garsumas"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Medijos garsumas"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Pranešimo apimtis"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Numatytasis skambėjimo tonas"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Numatytasis skambėjimo tonas (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Tylus"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"turi prastą interneto ryšį."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Tiesioginis „Wi-Fi“ ryšys"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Paleiskite tiesioginę „Wi-Fi“ operaciją. Bus išjungta „Wi-Fi“ kliento / viešosios interneto prieigos taško operacija."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nepavyko paleisti tiesioginio „Wi-Fi“"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nepavyko paleisti „Wi-Fi Direct“"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"„Wi-Fi“ tiesioginio ryšio užklausa iš <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jei norite sutikti, spustelėkite „Gerai“."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Tiesioginio „Wi-Fi“ ryšio sąrankos užklausa iš <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jei norite tęsti, įveskite PIN kodą."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS PIN kodą <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> reikia įvesti lygiaverčiame įrenginyje <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, kad būtų toliau atliekama ryšio sąranka"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"Gerai"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Atšaukti"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM kortelė pašalinta"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobiliojo ryšio tinklas bus nepasiekiamas, kol pakeisite SIM kortelę."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilusis tinklas bus nepasiekiamas, kol nepaleisite iš naujo įdėję tinkamą SIM kortelę."</string>
<string name="sim_done_button" msgid="827949989369963775">"Atlikta"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM kortelė pridėta"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Kad pasiektumėte mobiliojo ryšio tinklą, turite iš naujo paleisti įrenginį."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Išjungiant USB saugyklą iškilo problemų. Įsitikinkite, kad pašalinote USB prieglobą ir bandykite dar kartą."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Įjungti USB saugyklą"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Jei įjungiate USB saugyklą, kai kurios naudojamos programos sustos ir gali būti negalimos, kol išjungsite USB saugyklą."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB operacija nepavyko"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Nesėkminga USB operacija"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Gerai"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Prij. kaip medijos įrenginys"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Prij. kaip fotoap."</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Atjungiama SD kortelė..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Ištrinama USB atmintinė..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Ištrinama SD kortelė..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nepavyko ištrinti USB atmintinės."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Nepavyko ištrinti USB atmintinės."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nepavyko ištrinti USB atminties."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nepavyko ištrinti SD kortelės."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD kortelė buvo pašalinta jos neatjungus."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Šiuo metu USB atmintinė tikrinama."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Šiuo metu SD kortelė tikrinama."</string>
@@ -1112,13 +1107,21 @@
<string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"pažymėtas"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"nepažymėtas"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"pasirinktas"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"nepatikrinta"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"pasirinkta"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"nepasirinkta"</string>
<string name="switch_on" msgid="551417728476977311">"įjungta"</string>
<string name="switch_off" msgid="7249798614327155088">"išjungta"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"paspaustas"</string>
- <string name="togglebutton_not_pressed" msgid="4495147725636134425">"nepaspaustas"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"paspausta"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"nepaspausta"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Atšaukti"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Atlikta"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režimo keitimas"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klavišai. Jei norite įvesdami slaptažodį girdėti klavišų garsus, reikia ausinių."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naršyti į viršų"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Daugiau parinkčių"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G duomenys neleidžiami"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G duomenys neleidžiami"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilieji duomenys neleidžiami"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"jei norite įgalinti, palieskite"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Viršytas 2G–3G duomenų apribojimas"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Palieskite, kad įgalintumėte"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Viršyta 2G–3G duomenų riba"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Viršyta 4G duomenų riba"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Viršyta mobiliųjų duomenų riba"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> viršyta nurodyta riba"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> viršyta nurodyta riba"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Apriboti foniniai duomenys"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Palieskite, kad pašal. aprib."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Saugos sertifikatas"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Šis sertifikatas galioja."</string>
<string name="issued_to" msgid="454239480274921032">"Išduota:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pasirinkti veiklą"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Bendrinti su..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Įrenginys užrakintas."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 8f58e37..09a671b 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autentifikācija nebija veiksmīga."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autentifikācija, izmantojot starpniekserveri, nebija veiksmīga."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Savienojuma izveide ar serveri nebija veiksmīga."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serverim neizdevās izveidot savienojumu. Vēlāk mēģiniet vēlreiz."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Serveris nevarēja izveidot savienojumu. Vēlāk mēģiniet vēlreiz."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Savienojumam ar serveri radās noildze."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Lapā ir pārāk daudz servera novirzīšanu."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokols netiek atbalstīts."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Ļauj lietojumprogrammai saņemt un apstrādāt ārkārtas apraides ziņojumus. Šī atļauja attiecas tikai uz sistēmas lietojumprogrammām."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"sūtīt īsziņas"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Ļauj lietojumprogrammai sūtīt īsziņas. Ļaunprātīgas lietojumprogrammas var radīt jums izmaksas, bez apstiprinājuma sūtot īsziņas."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"īsziņu sūtīšana bez apstiprinājuma"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Ļauj lietojumprogrammai sūtīt īsziņas. Ļaunprātīgas lietojumprogrammas var jums radīt papildu izdevumus, sūtot ziņojumus bez jūsu apstiprinājuma."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"lasīt īsziņu vai multiziņu"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ļauj lietojumprogrammai lasīt īsziņas, kas ir saglabātas planšetdatorā vai SIM kartē. Ļaunprātīgas lietojumprogrammas var lasīt jūsu konfidenciālos ziņojumus."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Ļauj lietojumprogrammai lasīt īsziņas, kas ir saglabātas jūsu tālrunī vai SIM kartē. Ļaunprātīgas lietojumprogrammas var lasīt konfidenciālos ziņojumus."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"rakstīt kontaktpersonu datus"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Ļauj lietojumprogrammai pārveidot planšetdatorā saglabātos kontaktpersonu (adrešu) datus. Ļaunprātīgas lietojumprogrammas var to izmantot, lai dzēstu vai pārveidotu jūsu kontaktpersonu datus."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Ļauj lietojumprogrammai pārveidot tālrunī saglabātos kontaktpersonu (adrešu) datus. Ļaunprātīgas lietojumprogrammas var to izmantot, lai dzēstu vai pārveidotu jūsu kontaktpersonu datus."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"lasīt profila datus"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ļauj lietojumprogrammai lasīt visu jūsu personas informāciju profilā. Ļaunprātīgas lietojumprogrammas var izmantot šo iespēju, lai identificētu jūs un sūtītu jūsu personas informāciju citām personām."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"rakstīt profila datus"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ļauj lietojumprogrammai mainīt jūsu personas informāciju profilā. Ļaunprātīgas lietojumprogrammas var izmantot šo iespēju, lai dzēstu vai mainītu jūsu profila datus."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"jūsu profila datu lasīšana"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ļauj lietojumprogrammai lasīt ierīcē glabāto personiskā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka lietojumprogramma var jūs identificēt un sūtīt jūsu profila informāciju citām personām."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"rakstīšana jūsu profila datos"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ļauj lietojumprogrammai mainīt vai pievienot ierīcē glabāto personiskā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka citas lietojumprogrammas var jūs identificēt un sūtīt jūsu profila informāciju citām personām."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"lasīt kalendāra pasākumus un konfidenciālu informāciju"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ļauj lietojumprogrammai lasīt visus planšetdatorā saglabātos kalendāra pasākumus, tostarp jūsu draugu un darbabiedru pasākumus. Ļaunprātīga lietojumprogramma, izmantojot šo atļauju, bez īpašnieka ziņas no šiem kalendāriem var iegūt personisku informāciju."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ļauj lietojumprogrammai lasīt visus tālrunī saglabātos kalendāra pasākumus, tostarp jūsu draugu un darbabiedru pasākumus. Ļaunprātīga lietojumprogramma, izmantojot šo atļauju, bez īpašnieka ziņas no šiem kalendāriem var iegūt personisku informāciju."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Ļauj lietojumprogrammai skatīt visu tīklu stāvokli."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"pilnīga interneta piekļuve"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ļauj lietojumprogrammai izveidot tīkla ligzdas."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"rakstīt piekļuves punkta nosaukuma iestatījumus"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ļauj lietojumprogrammai pārveidot APN iestatījumus, piemēram, jebkura APN starpniekserveri un portu."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"tīkla iestatījumu un datplūsmas mainīšana/pārtveršana"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ļauj lietojumprogrammai mainīt tīkla iestatījumus, kā arī pārķert un pārbaudīt visu tīkla datplūsmu, piemēram, mainīt starpniekserveri un jebkura APN portu. Ļaunprogrammatūra, jums nezinot, var uzraudzīt, novirzīt vai modificēt tīkla paketes."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"mainīt tīkla savienojamību"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ļauj lietojumprogrammai mainīt tīkla savienojamības stāvokli."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Mainīt piesaistes savienojamību"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"PIN tika nepareizi ievadīts <xliff:g id="NUMBER_0">%d</xliff:g> reizes. "\n\n"Lūdzu, mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Atbloķēšanas shēma tika nepareizi uzzīmēta <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Vēl pēc <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tiks pieprasīts, lai atbloķējat planšetdatoru, izmantojot Google pierakstīšanos."\n\n" Lūdzu, mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Atbloķēšanas kombinācija tika nepareizi uzzīmēta <xliff:g id="NUMBER_0">%d</xliff:g> reizi(-es). Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunis būs jāatbloķē, izmantojot Google pierakstīšanos."\n\n" Lūdzu, mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundes(-ēm)."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Jūs nepareizi veicāt planšetdatora atbloķēšanu <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīga(-iem) mēģinājuma(-iem) planšetdatorā tiks atiestatīti rūpnīcas noklusējuma iestatījumi, un lietotāja dati tiks zaudēti."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Jūs nepareizi veicāt tālruņa atbloķēšanu <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīga(-iem) mēģinājuma(-iem) tālrunī tiks atiestatīti rūpnīcas noklusējuma iestatījumi, un lietotāja dati tiks zaudēti."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Jūs nepareizi veicāt planšetdatora atbloķēšanu <xliff:g id="NUMBER">%d</xliff:g> reizes. Planšetdatorā tiks atiestatīti rūpnīcas noklusējuma iestatījumi."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Jūs nepareizi veicāt tālruņa atbloķēšanu <xliff:g id="NUMBER">%d</xliff:g> reizes. Tālrunī tiks atiestatīti rūpnīcas noklusējuma iestatījumi."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER">%d</xliff:g> sekundes(-ēm)."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Vai aizmirsāt kombināciju?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Konta atbloķēšana"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Ļauj lietojumprogrammai pievienot ziņojumus no jūsu balss pasta iesūtnes."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Pārveidot pārlūkprogrammas ģeogrāfiskās atrašanās vietas atļaujas"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ļauj lietojumprogrammai pārveidot pārlūkprogrammas ģeogrāfiskās atrašanās vietas atļaujas. Ļaunprātīgas lietojumprogrammas var to izmantot, lai atļautu atrašanās vietas informācijas sūtīšanu uz citām vietnēm."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"pakotņu verificēšana"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Ļauj lietojumprogrammai verificēt, vai pakotne ir instalējama."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"saistīšana ar pakotnes verificētāju"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Atļauj īpašniekam sūtīt pakotņu verificētāju pieprasījumus. Nekad netiek izmantots parastām lietojumprogrammām."</string>
<string name="save_password_message" msgid="767344687139195790">"Vai vēlaties, lai pārlūkprogrammā tiktu saglabāta šī parole?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ne tagad"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Atcerēties"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ievade"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"dzēst"</string>
<string name="search_go" msgid="8298016669822141719">"Meklēt"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Meklēt"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Meklēšanas vaicājums"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Notīrīt vaicājumu"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Iesniedziet vaicājumu."</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Meklēšana ar balsi"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Pirms 1 mēneša"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vairāk nekā pirms 1 mēneša"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Izgriezt"</string>
<string name="copy" msgid="2681946229533511987">"Kopēt"</string>
<string name="paste" msgid="5629880836805036433">"Ielīmēt"</string>
- <string name="replace" msgid="8333608224471746584">"Aizstāt"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Aizstāt"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopēt URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Atlasīt tekstu..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksta atlase"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Atlasīt lietojumprogrammu USB ierīcei"</string>
<string name="noApplications" msgid="1691104391758345586">"Šo darbību nevar veikt neviena lietojumprogramma."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Diemžēl lietojumprogrammas <xliff:g id="APPLICATION">%1$s</xliff:g> darbība ir apturēta."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Diemžēl process <xliff:g id="PROCESS">%1$s</xliff:g> ir apturēts."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Lietojumprogramma <xliff:g id="APPLICATION">%2$s</xliff:g> nereaģē."\n\n"Vai vēlaties to aizvērt?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Darbība <xliff:g id="ACTIVITY">%1$s</xliff:g> nereaģē. "\n" "\n" Vai vēlaties to aizvērt?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Iespējojiet atkārtoti, izmantojot Iestatījumi &gt; Lietojumprogrammas &gt; Pārvaldīt lietojumprogrammas."</string>
<string name="smv_application" msgid="295583804361236288">"Lietojumprogramma <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) ir pārkāpusi savu pašieviesto StrictMode politiku."</string>
<string name="smv_process" msgid="5120397012047462446">"Process <xliff:g id="PROCESS">%1$s</xliff:g> ir pārkāpis savu pašieviesto StrictMode politiku."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Notiek op. Android jaunināšana..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Tiek optimizēta <xliff:g id="NUMBER_0">%1$d</xliff:g>. lietojumprogramma no <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Tiek palaistas lietojumprogrammas."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Tiek pabeigta sāknēšana."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> darbojas"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Atlasiet, lai pārietu uz lietojumprogrammu"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Vai pārslēgt lietojumprogrammas?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Signāla skaļums"</string>
<string name="volume_notification" msgid="2422265656744276715">"Paziņojumu skaļums"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Skaļums"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth skaļums. Pieskarieties, lai pārslēgtu uz klusuma režīmu."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zvana signāla skaļums. Pieskarieties, lai pārslēgtu uz klusuma režīmu."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Zvanu skaļums. Pieskarieties, lai pārslēgtu uz klusuma režīmu."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Multivides skaļums. Pieskarieties, lai pārslēgtu uz klusuma režīmu."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Paziņojumu skaļums. Pieskarieties, lai pārslēgtu uz klusuma režīmu."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth apjoms"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zvana signāla skaļums"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Zvana skaļums"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Multivides skaļums"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Paziņojumu skaļums"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Noklusējuma zvana signāls"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Noklusējuma zvana signāls (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Klusums"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ir slikts interneta savienojums."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Sākt Wi-Fi Direct darbību. Tiks izslēgta Wi-Fi klienta/tīklāja darbība."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Neizdevās palaist Wi-Fi Direct."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nevarēja palaist programmu Wi-Fi Direct."</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct savienojuma iestatīšanas pieprasījums no adreses <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Noklikšķiniet uz Labi, lai apstiprinātu."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct savienojuma iestatīšanas pieprasījums no adreses <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Lai turpinātu, ievadiet PIN."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Lai turpinātu savienojuma iestatīšanu, vienādranga ierīcē <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> ir jāievada WPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"Labi"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Atcelt"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM karte ir izņemta."</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilo sakaru tīkls nebūs pieejams, līdz nomainīsiet SIM karti."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilais tīkls nebūs pieejams līdz brīdim, kad restartēsiet ierīci ar ievietotu derīgu SIM karti."</string>
<string name="sim_done_button" msgid="827949989369963775">"Gatavs"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM karte ir pievienota."</string>
<string name="sim_added_message" msgid="1209265974048554242">"Lai piekļūtu mobilo sakaru tīklam, restartējiet ierīci."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Izslēdzot USB krātuvi, radās problēma. Pārliecinieties, ka USB saimniekdators ir noņemts, pēc tam mēģiniet vēlreiz."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Ieslēgt USB krātuvi"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ja ieslēgsiet USB krātuvi, dažu joprojām lietoto lietojumprogrammu darbība tiks apturēta un tās, iespējams, nebūs pieejamas līdz brīdim, kad USB krātuve tiks izslēgta."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB darbība neizdevās."</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB atmiņas darbība neizdevās."</string>
<string name="dlg_ok" msgid="7376953167039865701">"Labi"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Pievienots kā multivides ierīce"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Pievienots kā kamera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Notiek SD kartes atvienošana..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Notiek USB krātuves dzēšana..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Notiek SD kartes dzēšana..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Neizdevās dzēst USB krātuvi."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Neizdevās dzēst USB krātuvi."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nevarēja dzēst USB atmiņu."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nevarēja dzēst SD karti."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD karte pirms atvienošanas tika noņemta."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB atmiņa pašlaik tiek pārbaudīta."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD karte pašlaik tiek pārbaudīta."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"izslēgts"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"nospiesta"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nav nospiesta"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alternēšanas taustiņš"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Atcelt"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Dzēšanas taustiņš"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gatavs"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režīma maiņa"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Pārslēgšanas taustiņš"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ievadīšanas taustiņš"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Taustiņš. Lai, rakstot paroli, dzirdētu taustiņu signālus, nepieciešamas austiņas."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Pārvietoties augšup"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Vairāk opciju"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G dati ir atspējoti"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dati ir atspējoti"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilie dati ir atspējoti"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"pieskarieties, lai iespējotu"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Pieskarieties, lai iespējotu"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G datu ierobež. pārsniegts"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G datu limits pārsniegts"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Pārsniegts mobilo datu ierobežoj."</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> virs norādītā ierobežojuma"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> virs norādītā ierobežojuma"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Fona dati ir ierobežoti."</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Pieskar., lai noņemtu ierobež."</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Drošības sertifikāts"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikāts ir derīgs."</string>
<string name="issued_to" msgid="454239480274921032">"Izdots:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Darbības atlase"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Koplietot ar..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Ierīce ir bloķēta."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 8ba895d..68f7a56 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Pengesahan tidak berjaya."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Pengesahan melalui pelayan proksi tidak berjaya."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Sambungan ke pelayan tidak berjaya."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Pelayan gagal berkomunikasi. Cuba sebentar lagi."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Pelayan tidak dapat berkomunikasi. Cuba sebentar lagi."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Sambungan ke pelayan tamat masa."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Halaman ini mengandungi terlalu banyak pengubahhalaan pelayan."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol tidak disokong."</string>
@@ -671,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Anda telah memasukkan PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Sila cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Anda telah melukis corak buka kunci dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda."\n\n" Sila cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Anda telah melukis corak buka kunci dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda."\n\n" Sila cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula ke tetapan lalai kilang."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Lupa corak?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Buka kunci akaun"</string>
@@ -850,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tampal"</string>
- <string name="replace" msgid="8333608224471746584">"Ganti"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Ganti"</string>
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
@@ -874,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Pilih aplikasi untuk peranti USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Tiada aplikasi yang boleh menjalankan tindakan ini."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Malangnya, <xliff:g id="APPLICATION">%1$s</xliff:g> telah berhenti."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Malangnya, proses <xliff:g id="PROCESS">%1$s</xliff:g> telah berhenti."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Tiada sambutan dari <xliff:g id="APPLICATION">%2$s</xliff:g>."\n\n"Adakah anda mahu menutupnya?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Tiada sambutan dari aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g>."\n\n"Adakah anda mahu menutupnya?"</string>
@@ -894,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Dayakan semula ini dengan Tetapan &gt; Aplikasi &gt; Urus aplikasi."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar dasar Mod Tegasnya sendiri."</string>
<string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar dasar Mod Tegasnya sendiri."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android sedang menaik taraf..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Mengoptimumkan aplikasi <xliff:g id="NUMBER_0">%1$d</xliff:g> <xliff:g id="NUMBER_1">%2$d</xliff:g> ."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Memulakan aplikasi"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"But akhir."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> dijalankan"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Pilih untuk bertukar kepada aplikasi"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Bertukar aplikasi?"</string>
@@ -934,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"mempunyai sambungan internet yang kurang baik."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Langsung"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Mulakan pengendalian Wi-Fi Langsung. Hal ini akan mematikan pengendalian klien Wi-Fi/titik panas."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Gagal memulakan Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Tidak dapat memulakan Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK untuk menerima."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Masukkan pin untuk meneruskan."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> perlu dimasukkan pada peranti rakan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> untuk penyediaan sambungan untuk meneruskan"</string>
@@ -975,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Terdapat masalah mematikan storan USB. Semak untuk memastikan anda sudah menyahlekap hos USB, kemudian cuba lagi."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Hidupkan storan USB."</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Jika anda menghidupkan storan USB, sesetengah aplikasi yang anda sedang gunakan akan terhenti dan mungkin tidak akan tersedia sehingga anda memadamkan storan USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Pengendalian USB gagal"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operasi USB tidak berjaya"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Disambungkan sebagai peranti media"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Disambungkan sebagai kamera"</string>
@@ -1075,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Menyahlekap kad SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Memadamkan storan USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Memadamkan kad SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Gagal memadamkan storan USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Gagal memadamkan storan USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Tidak dapat memadam storan USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Tidak dapat memadam kad SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Kad SD telah dikeluarkan sebelum dinyahlekap."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Storan USB sedang disemak buat masa ini."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Kad SD sedang disemak buat masa ini."</string>
@@ -1106,8 +1112,16 @@
<string name="radiobutton_not_selected" msgid="2908760184307722393">"tidak dipilih"</string>
<string name="switch_on" msgid="551417728476977311">"hidup"</string>
<string name="switch_off" msgid="7249798614327155088">"mati"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"ditekan"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"ditekan."</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"tidak ditekan"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Padam"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Kekunci. Set kepala diperlukan untuk mendengar kekunci semasa menaip kata laluan."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi ke atas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lagi pilihan"</string>
@@ -1120,15 +1134,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data 2G-3G dilumpuhkan"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dilumpuhkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data mudah alih dilumpuhkan"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ketik untuk mendayakan"</string>
+ <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Data Wi-Fi dinyahdayakan"</string>
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Sentuh untuk mendayakan"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Melebihi had data 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Melebihi had data 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Melebihi had data mudah alih"</string>
+ <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Melebihi had data Wi-Fi"</string>
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> melebihi had yang ditentukan"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
- <skip />
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Data latar belakang terhad"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Sentuh untuk membuang sekatan"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Sijil keselamatan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sijil ini sah."</string>
<string name="issued_to" msgid="454239480274921032">"Dikeluarkan kepada:"</string>
@@ -1147,6 +1161,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pilih aktiviti"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Kongsi dengan..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Peranti dikunci."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index ae84876..bfaa11c 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autentiseringen feilet."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autentisering via mellomtjeneren feilet."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Kunne ikke koble til tjeneren."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Klarte ikke å kommunisere med tjeneren. Prøv igjen senere."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Kommunikasjon med tjeneren mislyktes. Prøv på nytt senere."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Det oppsto et tidsavbrudd under tilkobling til tjeneren."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Siden inneholder for mange videresendinger."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokollen er ikke støttet."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Tillater applikasjonen å motta og behandle nødkringkastingsmeldinger. Denne tillatelsen er kun tilgjengelig for systemapplikasjoner."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"sende SMS-meldinger"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Lar applikasjonen sende SMS-meldinger. Ondsinnede applikasjoner kan koste deg penger ved å sende meldinger uten bekreftelse."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"send tekstmeldinger uten godkjenning"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Gir applikasjonen tillatelse til å sende tekstmeldinger. Skadelige applikasjoner kan sende meldinger uten din godkjennelse, som du må betale for."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"lese SMS- og MMS-meldinger"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Lar programmet lese tekstmeldinger lagret på nettbrettet eller SIM-kortet. Skadelige programmer kan få tilgang til å lese dine private meldinger."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Lar applikasjonen lese SMS-meldinger lagret i telefonen eller på SIM-kortet. Ondsinnede applikasjoner kan lese private meldinger."</string>
@@ -327,13 +325,13 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"skrive kontaktinformasjon"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Lar programmet endre kontaktinformasjon (adresser) lagret på nettbrettet. Skadelige programmet kan bruke dette til å slette eller endre kontaktinformasjonen."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Lar applikasjonen endre kontakt- og adresseinformasjon lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å redigere eller endre kontaktinformasjonen."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"les profildata"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Gir applikasjoner tillatelse til å lese all din personlige profilinformasjon. Ondsinnede applikasjoner kan bruke dette til å identifisere deg og sende den personlige informasjonen din til andre."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"skriv profildata"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Gir applikasjoner tillatelse til å endre den personlige profilen din. Ondsinnede applikasjoner kan bruke dette til å slette eller endre profildataene dine."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lese profildataene dine"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Gir applikasjonen tillatelse til å lese personlig profilinformasjon lagret på enheten, for eksempel navn og kontaktinformasjon. Dette betyr at applikasjonen kan identifisere deg og sende din profilinformasjon til andre."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"skriv til profildataene dine"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Gir applikasjonen tillatelse til å endre eller legge til personlig profilinformasjon lagret på enheten, for eksempel navn og kontaktinformasjon. Dette betyr at andre applikasjoner kan identifisere deg og sende din profilinformasjon til andre."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"les kalenderhendelser og konfidensiell informasjon"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Lar en applikasjon lese alle kalenderhendelser lagret på nettbrettet, herunder de som tilhører venner eller kollegaer. En skadelig applikasjon med denne denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
- <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Lar et program lese alle kalenderhendelser lagret på telefonen, herunder de som tilhører venner eller kollegaer. Et skadelig program med denne denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Lar en applikasjon lese alle kalenderhendelser lagret på nettbrettet, herunder de som tilhører venner eller kollegaer. En skadelig applikasjon med denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Lar et program lese alle kalenderhendelser lagret på telefonen, herunder de som tilhører venner eller kollegaer. Et skadelig program med denne tillatelsen kan trekke ut personlige opplysninger fra disse kalenderne uten eiernes viten."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"legge til eller endre kalenderhendelser og sende e-post til gjester uten eiernes viten"</string>
<string name="permdesc_writeCalendar" msgid="5368129321997977226">"Lar en applikasjon sende hendelsesinvitasjoner som kalendereier, og legge til, fjerne og endre hendelser som du kan endre på enheten, herunder de som tilhører venner eller kollegaer. En skadelig applikasjon med denne tillatelsen kan sende nettsøppel-e-post som synes å komme fra kalendereieren, endre hendelser uten eiernes viten, eller legge til falske hendelser."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"lage simulerte posisjonskilder for testing"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Lar applikasjonen se tilstanden til alle nettverk."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"full internett-tilgang"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Lar applikasjonen opprette vilkårlige nettverkstilkoblinger."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"skrive APN-innstillinger"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Lar applikasjonen to endre APN-innstillinger slik som mellomtjener eller port for hvilket som helst aksesspunkt."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"endre eller avskjær nettverksinnstillinger og -trafikk"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Tillater en applikasjon å endre nettverksinnstillingene og fange opp og inspisere all nettverkstrafikk, for eksempel for å endre mellomtjeneren og porten for en APN. Skadelige applikasjoner kan overvåke, omdirigere, eller endre nettverkspakker uten din viten."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"endre nettverkskonnektivitet"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Tillater et program å endre innstillingene for nettverkstilkoblingen."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Endre tilknytningsoppsett"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Du har oppgitt feil personlig kode <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv igjen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Du har tegnet inn feil opplåsningsmønster <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter <xliff:g id="NUMBER_1">%d</xliff:g> nye forsøk, bes du låse opp nettbrettet ved å logge inn med dine Google-detaljer. "\n\n" Prøv igjen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using your Google sign-in."\n\n" Please try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Du har foretatt <xliff:g id="NUMBER_0">%d</xliff:g> mislykkede opplåsinger av nettbrettet. Etter <xliff:g id="NUMBER_1">%d</xliff:g> flere mislykkede forsøk, blir nettbrettet tilbakestilt til fabrikkinnstillingene, og alle brukerdata går tapt."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Du har foretatt <xliff:g id="NUMBER_0">%d</xliff:g> mislykkede opplåsinger av telefonen. Etter <xliff:g id="NUMBER_1">%d</xliff:g> flere mislykkede forsøk, blir telefonen tilbakestilt til fabrikkinnstillingene, og alle brukerdata går tapt."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Du har foretatt <xliff:g id="NUMBER">%d</xliff:g> mislykkede opplåsinger av nettbrettet. Nettbrettet blir nå tilbakestilt til fabrikkinnstillingene."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Du har foretatt <xliff:g id="NUMBER">%d</xliff:g> mislykkede opplåsinger av telefonen. Telefonen blir nå tilbakestilt til fabrikkinnstillingene."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Prøv igjen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Glemt mønsteret?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Opplåsing av konto"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Lar applikasjonen legge til meldinger i talepostinnboksen din."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Endre nettleserens tillatelser for geografisk posisjonering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Tillater programmet å endre nettleserens tillatelser for geografisk posisjonering. Skadelige programmer kan bruke denne funksjonen til å sende posisjonsopplysninger til vilkårlige nettsteder."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"bekreft pakker"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Lar appen bekrefte om en pakke kan installeres."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bind til en pakkeverifikator"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Gir innehaveren rett til å rette forespørsler mot pakkeverifikatorer. Bør aldri være nødvendig for normale applikasjoner."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du at nettleseren skal huske dette passordet?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ikke nå"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Husk"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"slett"</string>
<string name="search_go" msgid="8298016669822141719">"Søk"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Søk"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Søkeord"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Slett søket"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Send inn søk"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Talesøk"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"For én måned siden"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"For over en måned siden"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Klipp ut"</string>
<string name="copy" msgid="2681946229533511987">"Kopier"</string>
<string name="paste" msgid="5629880836805036433">"Lim inn"</string>
- <string name="replace" msgid="8333608224471746584">"Erstatt"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Erstatt"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopier URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Merket tekst"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Velg et program for USB-enheten"</string>
<string name="noApplications" msgid="1691104391758345586">"Ingen applikasjoner kan gjøre dette."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g> har dessverre stoppet."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Prosessen <xliff:g id="PROCESS">%1$s</xliff:g> har dessverre stoppet."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> svarer ikke."\n\n"Vil du lukke den?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> svarer ikke."\n\n"Vil du lukke den?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aktiver denne på nytt med Innstillinger &gt; Applikasjoner &gt; Administrer applikasjoner."</string>
<string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutt de selvpålagte StrictMode-retningslinjene."</string>
<string name="smv_process" msgid="5120397012047462446">"Prosessen<xliff:g id="PROCESS">%1$s</xliff:g> har brutt de selvpålagte StrictMode-retningslinjene."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android oppgraderes …"</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimaliserer applikasjon <xliff:g id="NUMBER_0">%1$d</xliff:g> av <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Starter applikasjoner."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Ferdigstiller oppstart."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> kjører"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Velg for å bytte til programmet"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Bytt programmer?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Alarmvolum"</string>
<string name="volume_notification" msgid="2422265656744276715">"Varslingsvolum"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volum"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volum. Trykk for å slå av og på lydløsmodus."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ringetonevolum. Trykk for å slå av og på lydløs modus."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Ringevolum. Trykk for å slå av og på lydløsmodus."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Medievolum. Trykk for å slå av og på lydløs modus."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Varslingsvolum. Trykk for å slå av og på lydløs modus."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volum"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ringetonevolum"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Samtalevolum"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Medievolum"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Varslingsvolum"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Standard ringetone"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standard ringetone (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Stille"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"har en dårlig Internett-tilkobling."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct-handling. Dette deaktiverer Wi-Fi-klienten og -handlingen."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kan ikke starte Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kunne ikke starte Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klikk på OK for å godta."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Oppgi personlig kode for å fortsette."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Personlig WPS-kode <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> må oppgis på mottakerenheten <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for å fortsette tilkoblingskonfigurasjonen"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Avbryt"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kort er fjernet"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilnettverket er ikke tilgjengelig før du erstatter SIM-kortet."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Det mobile nettverket forblir utilgjengelig inntil du starter på nytt med et gyldig SIM-kort."</string>
<string name="sim_done_button" msgid="827949989369963775">"Fullført"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kort er lagt til"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Du må starte enheten på nytt for å få tilgang til mobilnettet."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Det oppstod et problem ved deaktivering av USB-lagring. Kontroller at du har demontert USB-verten, og prøv på nytt."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Slå på USB-lagring"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Hvis du aktiverer USB-lagring, virker ikke lenger enkelte av programmene du bruker, og de kan være utilgjengelige inntil du deaktiverer USB-lagringen."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-operasjonen mislyktes"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-handling mislyktes"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tilkoblet som medieenhet"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Tilkoblet som kamera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Kobler fra SD-kort ..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Sletter USB-lagring ..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Sletter SD-kort ..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kan ikke slette USB-lagring."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Kan ikke slette USB-lagring."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kunne ikke slette USB-lagring."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Kunne ikke slette SD-kort."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kort ble ikke koblet fra før fjerning."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-lagring kontrolleres."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-kortet kontrolleres."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"av"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"trykket inn"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"ikke trykket inn"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Avbryt"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Slett"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Ferdig"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusendring"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tast. Hodetelefoner kreves for å høre tastene mens du skriver inn et passord."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Gå opp"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere alternativer"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G-data er deaktivert"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktivert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktivert"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"klikk for å aktivere"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Trykk for å aktivere"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Grense på 2G-3G data overskredet"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Grensen på 4G data er overskredet"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Grensen for mobildatabruk er overskredet"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> over angitt grense"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> over angitt grense"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Bakgrunnsdata er begrenset"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Trykk for å fjerne begrensning"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhetssertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikatet er gyldig."</string>
<string name="issued_to" msgid="454239480274921032">"Utstedt til:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Velg aktivitet"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Del med"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Enheten er låst."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 8bab89a..048f9ab 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Verificatie mislukt."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Verificatie via de proxyserver is mislukt."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Er kan geen verbinding met de server worden gemaakt."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"De server kan niet communiceren. Probeer het later opnieuw."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"De server kan niet communiceren. Probeer het later opnieuw."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Er is een time-out voor de serververbinding opgetreden."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"De pagina bevat te veel serveromleidingen."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Het protocol wordt niet ondersteund."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Hiermee kan een app noodberichten ontvangen en verwerken. Deze toestemming is alleen beschikbaar voor systeemapps."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"SMS-berichten verzenden"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Hiermee kan de app SMS-berichten verzenden. Schadelijke apps kunnen u geld kosten door berichten te verzenden zonder uw toestemming."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"zonder toestemming sms\'jes verzenden"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Hiermee kan de app sms\'jes verzenden. Schadelijke apps kunnen u geld kosten door zonder uw toestemming berichten te verzenden."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS of MMS lezen"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Hiermee kan een app de op uw tablet of SIM-kaart opgeslagen SMS-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Hiermee kan een app de op uw telefoon of SIM-kaart opgeslagen SMS-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"contactgegevens schrijven"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Hiermee kan een app de op uw tablet opgeslagen contactgegevens (adresgegevens) wijzigen. Schadelijke apps kunnen hiermee uw contactgegevens verwijderen of wijzigen."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Hiermee kan een app de op uw telefoon opgeslagen contactgegevens (adresgegevens) wijzigen. Schadelijke apps kunnen hiermee uw contactgegevens verwijderen of wijzigen."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"profielgegevens lezen"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Hiermee kan een app al uw persoonlijke profielgegevens lezen. Schadelijke apps kunnen dit gebruiken om u te identificeren en uw persoonlijke gegevens naar andere mensen te verzenden."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"profielgegevens schrijven"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Hiermee kan een app uw persoonlijke profielgegevens aanpassen. Schadelijke apps kunnen dit gebruiken om uw profielgegevens te wissen of aan te passen."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"uw profielgegevens lezen"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Hiermee kan de app persoonlijke profielgegevens lezen die op uw apparaat staan, zoals uw naam en contactgegevens. Dit houdt in dat de app u kan identificeren en uw profielgegevens kan doorsturen naar anderen."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"schrijven naar profielgegevens"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Hiermee kan de app persoonlijke profielgegevens die op uw apparaat staan, zoals uw naam en contactgegevens, wijzigen of toevoegen. Dit houdt in dat andere apps u kunnen identificeren en uw profielgegevens kunnen doorsturen naar anderen."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"agenda-afspraken en vertrouwelijke informatie lezen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Hiermee kan een app alle agenda-afspraken lezen die op uw tablet zijn opgeslagen, inclusief de afspraken van vrienden of collega\'s. Een schadelijke app die over deze rechten beschikt, kan persoonlijke gegevens extraheren uit deze agenda\'s zonder medeweten van de eigenaren van de agenda\'s."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Hiermee kan een app alle agenda-afspraken lezen die op uw telefoon zijn opgeslagen, inclusief de afspraken van vrienden of collega\'s. Een schadelijke app die over deze rechten beschikt, kan persoonlijke gegevens extraheren uit deze agenda\'s zonder medeweten van de eigenaren van de agenda\'s."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Hiermee kan een app de status van alle netwerken bekijken."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"volledige internettoegang"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Hiermee kan een app netwerksockets maken."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"instellingen voor toegangspuntnaam schrijven"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Hiermee kan een app de APN-instellingen, zoals proxy en poort, van elke APN wijzigen."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"netwerkinstellingen en -verkeer wijzigen/onderscheppen"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Hiermee kan een app netwerkinstellingen wijzigen en al het netwerkverkeer onderscheppen en inspecteren, bijvoorbeeld om de proxy en poort van een APN te wijzigen. Schadelijke apps kunnen zonder uw medeweten netwerkpakketten bijhouden, omleiden of aanpassen."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"netwerkverbinding wijzigen"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Staat een app toe de status van de netwerkverbinding te wijzigen."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Getetherde verbinding wijzigen"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"U heeft uw PIN-code <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist ingevoerd. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd uw tablet te ontgrendelen met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd om uw telefoon te ontgrendelen met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"U heeft <xliff:g id="NUMBER_0">%d</xliff:g> keer geprobeerd de tablet op een onjuiste manier te ontgrendelen. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen worden de fabrieksinstellingen hersteld op de tablet en gaan alle gebruikersgegevens verloren."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"U heeft nu <xliff:g id="NUMBER_0">%d</xliff:g> keer geprobeerd de telefoon op een onjuiste manier te ontgrendelen. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen worden de fabrieksinstellingen hersteld op de telefoon en gaan alle gebruikersgegevens verloren."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"U heeft <xliff:g id="NUMBER">%d</xliff:g> keer geprobeerd de tablet op een onjuiste manier te ontgrendelen. De fabrieksinstellingen worden u hersteld op de tablet."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"U heeft <xliff:g id="NUMBER">%d</xliff:g> keer geprobeerd de telefoon op een onjuiste manier te ontgrendelen. De fabrieksinstellingen worden nu hersteld op de telefoon."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Patroon vergeten?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Account ontgrendelen"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Hiermee kan de app berichten toevoegen aan de inbox van uw voicemail."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Geolocatierechten voor browser aanpassen"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Staat een app toe de geolocatierechten van de browser aan te passen. Schadelijke apps kunnen dit gebruiken om locatiegegevens te verzenden naar willekeurige websites."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"pakketten controleren"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Hiermee kan de app controleren of een pakket kan worden geïnstalleerd."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"koppelen aan pakketcontroleprogramma"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Hiermee kan de houder verzoeken indienen voor pakketcontroles. Nooit vereist voor normale apps."</string>
<string name="save_password_message" msgid="767344687139195790">"Wilt u dat de browser dit wachtwoord onthoudt?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Niet nu"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Onthouden"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"invoeren"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"verwijderen"</string>
<string name="search_go" msgid="8298016669822141719">"Zoeken"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Zoeken"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Zoekopdracht"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Zoekopdracht wissen"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Zoekopdracht verzenden"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Spraakgestuurd zoeken"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 maand geleden"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Meer dan 1 maand geleden"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Knippen"</string>
<string name="copy" msgid="2681946229533511987">"Kopiëren"</string>
<string name="paste" msgid="5629880836805036433">"Plakken"</string>
- <string name="replace" msgid="8333608224471746584">"Vervangen"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Vervangen"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL kopiëren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekst selecteren..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstselectie"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selecteer een app voor het USB-apparaat"</string>
<string name="noApplications" msgid="1691104391758345586">"Geen enkele app kan deze actie uitvoeren."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g> is gestopt."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> is gestopt."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> reageert niet."\n\n"Wilt u deze app sluiten?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Activiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> reageert niet."\n\n"Wilt u deze activiteit sluiten?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Dit opnieuw inschakelen via \'Instellingen\' &gt; \'Apps\' &gt; \'Apps beheren\'."</string>
<string name="smv_application" msgid="295583804361236288">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="smv_process" msgid="5120397012047462446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android wordt bijgewerkt..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Applicatie <xliff:g id="NUMBER_0">%1$d</xliff:g> van <xliff:g id="NUMBER_1">%2$d</xliff:g> optimaliseren."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Apps starten."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Opstarten afronden."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> wordt uitgevoerd"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Selecteren om over te schakelen naar app"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Toepassingen wijzigen?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Alarmvolume"</string>
<string name="volume_notification" msgid="2422265656744276715">"Meldingsvolume"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume. Tik om over te schakelen naar de stille modus."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Beltoon-volume. Tik om over te schakelen naar de stille modus."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Belvolume. Tik om over te schakelen naar de stille modus."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Media-volume. Tik om over te schakelen naar de stille modus."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Meldingvolume. Tik om over te schakelen naar de stille modus."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Beltoonvolume"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Belvolume"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolume"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Meldingsvolume"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Standaardbeltoon"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standaardbeltoon (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Stil"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"heeft een slechte internetverbinding."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Bewerking van Wi-Fi Direct starten. Hierdoor wordt de bewerking van Wi-Fi-client/hotspot uitgeschakeld."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct starten is mislukt"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kan Wi-Fi Direct niet starten"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Configuratieverzoek voor verbinding met Wi-Fi Direct van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik op \'OK\' om te accepteren."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Configuratieverzoek van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> voor verbinding met Wi-Fi Direct. Geef de pincode op om door te gaan."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-pincode <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> moet worden ingevoerd op peerapparaat <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, zodat het instellen van de verbinding kan worden voortgezet"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annuleren"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Simkaart verwijderd"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Het mobiele netwerk is niet beschikbaar totdat u de simkaart vervangt."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Het mobiele netwerk is niet beschikbaar totdat u het apparaat opnieuw start met een geldige simkaart."</string>
<string name="sim_done_button" msgid="827949989369963775">"Gereed"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Simkaart aangesloten"</string>
<string name="sim_added_message" msgid="1209265974048554242">"U moet uw apparaat opnieuw starten voor toegang tot het mobiele netwerk."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Er is een probleem opgetreden tijdens het uitschakelen van de USB-opslag. Controleer of u de USB-host heeft losgekoppeld en probeer het opnieuw."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB-opslag inschakelen"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Als u USB-opslag inschakelt, worden bepaalde apps die u gebruikt, gestopt en worden deze mogelijk pas weer beschikbaar wanneer u USB-opslag uitschakelt."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-bewerking mislukt"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-bewerking mislukt"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Gekoppeld als media-apparaat"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Gekoppeld als camera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD-kaart ontkoppelen..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB-opslag wissen..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"SD-kaart wissen..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Wissen van USB-opslag is mislukt."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Wissen van USB-opslag is mislukt."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kan USB-opslag niet wissen."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Kan SD-kaart niet wissen."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kaart is verwijderd voordat deze is ontkoppeld."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-opslag wordt momenteel gecontroleerd."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-kaart wordt momenteel gecontroleerd."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"uit"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"ingedrukt"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"niet ingedrukt"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuleren"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gereed"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modus wijzigen"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Toetsaanslag. Headset vereist om toetsaanslagen te kunnen horen bij het typen van een wachtwoord."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Omhoog navigeren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opties"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-/3G-gegevens uitgeschakeld"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-gegevens uitgeschakeld"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiele gegevens uitgeschakeld"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tik om in te schakelen"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Raak aan om in te schakelen"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Gegevenslimiet 2G-3G overschreden"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Gegevenslimiet 4G overschreden"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiele datalimiet overschreden"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> meer dan limiet"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> meer dan limiet"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Achtergrondgegevens beperkt"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Raak aan voor opheffen beperking"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Beveiligingscertificaat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dit certificaat is geldig."</string>
<string name="issued_to" msgid="454239480274921032">"Uitgegeven voor:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Activiteit selecteren"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Delen met..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Apparaat vergrendeld."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 68cbd3e..0c5cdf0 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Nieudane uwierzytelnianie."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autoryzacja przez serwer proxy zakończyła się niepowodzeniem."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Nieudane połączenie z serwerem."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Nie udało się połączyć z serwerem. Spróbuj ponownie później."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Serwer nie może nawiązać połączenia. Spróbuj ponownie później."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Zbyt długi czas oczekiwania na połączenie z serwerem."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Strona zawiera zbyt wiele przekierowań do serwerów."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokół nie jest obsługiwany"</string>
@@ -264,8 +264,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Pozwala aplikacjom na śledzenie naciskanych klawiszy, nawet podczas pracy z innym programem (na przykład podczas wpisywania hasła). Nigdy nie powinno być potrzebne normalnym aplikacjom."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"powiązanie ze sposobem wprowadzania tekstu"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Pozwala na powiązanie wybranego sposobu wprowadzania tekstu z interfejsem najwyższego poziomu. To uprawnienie nie powinno być nigdy wymagane przez zwykłe aplikacje."</string>
- <string name="permlab_bindTextService" msgid="7358378401915287938">"powiąż z usługą SMS"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Zezwala posiadaczowi na utworzenie powiązania z interfejsem najwyższego poziomu usługi tekstowej (np. SpellCheckerService). Opcja nie powinna być nigdy potrzebna w przypadku zwykłych aplikacji."</string>
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"tworzenie powiązania z usługą tekstową"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi tekstowej (np. SpellCheckerService). Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"tworzenie powiązania z usługą VPN"</string>
<string name="permdesc_bindVpnService" msgid="6011554199384584151">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi VPN. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"powiązanie z tapetą"</string>
@@ -671,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Niepoprawnie wprowadzono kod PIN <xliff:g id="NUMBER_0">%d</xliff:g> razy. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Wzór odblokowania został <xliff:g id="NUMBER_0">%d</xliff:g> razy narysowany nieprawidłowo. Po <xliff:g id="NUMBER_1">%d</xliff:g> kolejnych próbach zakończonych niepowodzeniem konieczne będzie odblokowanie tabletu przy użyciu danych logowania na konto Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Wzór odblokowania został narysowany nieprawidłowo <xliff:g id="NUMBER_0">%d</xliff:g> razy. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach telefon trzeba będzie odblokować przez zalogowanie na koncie Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> sekund."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Próbowano <xliff:g id="NUMBER_0">%d</xliff:g> razy nieprawidłowo odblokować tablet. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach tablet zostanie zresetowany do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Próbowano <xliff:g id="NUMBER_0">%d</xliff:g> razy nieprawidłowo odblokować telefon. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach telefon zostanie zresetowany do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Próbowano <xliff:g id="NUMBER">%d</xliff:g> razy nieprawidłowo odblokować tablet. Tablet zostanie teraz zresetowany do ustawień fabrycznych."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Próbowano <xliff:g id="NUMBER">%d</xliff:g> razy nieprawidłowo odblokować telefon. Telefon zostanie teraz zresetowany do ustawień fabrycznych."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Spróbuj ponownie za <xliff:g id="NUMBER">%d</xliff:g> sekund."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Zapomniałeś wzoru?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Odblokowanie konta"</string>
@@ -728,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Zezwala aplikacji na dodawanie wiadomości do skrzynki odbiorczej poczty głosowej."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Zezwala aplikacji na modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej. Złośliwe aplikacje mogą używać tej opcji do wysyłania informacji o lokalizacji do dowolnych witryn internetowych."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"weryfikowanie pakietów"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Umożliwia aplikacji zweryfikowanie, czy pakiet można zainstalować."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"powiązanie z weryfikatorem pakietów"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Zezwala na wysyłanie żądań weryfikacji pakietu. To uprawnienie nie powinno być potrzebne zwykłym aplikacjom."</string>
<string name="save_password_message" msgid="767344687139195790">"Czy chcesz, aby zapamiętać to hasło w przeglądarce?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Nie teraz"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Zapamiętaj"</string>
@@ -748,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"usuń"</string>
<string name="search_go" msgid="8298016669822141719">"Szukaj"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Szukaj"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Wyszukiwane hasło"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Wyczyść zapytanie"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Wyślij zapytanie"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Wyszukiwanie głosowe"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 miesiąc temu"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ponad 1 miesiąc temu"</string>
<plurals name="num_seconds_ago">
@@ -859,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Wytnij"</string>
<string name="copy" msgid="2681946229533511987">"Kopiuj"</string>
<string name="paste" msgid="5629880836805036433">"Wklej"</string>
- <string name="replace" msgid="8333608224471746584">"Zastąp"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Zastąp"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiuj adres URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Zaznacz tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Zaznaczanie tekstu"</string>
@@ -883,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Wybierz aplikację dla urządzenia USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Żadna z aplikacji nie może wykonać tej czynności."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Niestety, aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> została zatrzymana."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Niestety, proces <xliff:g id="PROCESS">%1$s</xliff:g> został zatrzymany."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Aplikacja <xliff:g id="APPLICATION">%2$s</xliff:g> nie odpowiada."\n\n"Czy chcesz ją zamknąć?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Funkcja <xliff:g id="ACTIVITY">%1$s</xliff:g> nie odpowiada."\n\n"Czy chcesz ją zakończyć?"</string>
@@ -903,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aby włączyć ponownie, skorzystaj z opcji Ustawienia &gt; Aplikacje &gt; Zarządzaj aplikacjami."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android jest uaktualniany..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optymalizowanie aplikacji <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Uruchamianie aplikacji."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Kończenie uruchamiania."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Działa <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Wybierz, aby przełączyć się na aplikację"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Czy przełączyć aplikacje?"</string>
@@ -943,10 +940,10 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ma powolne połączenie internetowe."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Rozpocznij pracę w trybie Wi-Fi Direct. Spowoduje to wyłączenie trybu klienta lub punktu dostępu Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nie można uruchomić Wi-Fi Direct."</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Odebrano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknij przycisk OK, aby zaakceptować."</string>
- <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Wprowadź kod PIN, aby kontynuować."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Aby kontynuować konfigurowanie połączenia, na drugim urządzeniu <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> należy wpisać kod PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nie można uruchomić Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknij OK, aby zaakceptować."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Wpisz kod PIN, aby kontynuować."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Aby kontynuować konfigurowanie połączenia, na drugim urządzeniu <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> wpisz kod PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Wstaw znak"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Nieznana aplikacja"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Wysyłanie wiadomości SMS"</string>
@@ -984,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Wystąpił problem podczas wyłączania nośnika USB. Upewnij się, że host USB został odłączony, a następnie spróbuj ponownie."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Włącz nośnik USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Po włączeniu nośnika USB niektóre używane aplikacje zostaną zatrzymane i mogą być niedostępne do chwili wyłączenia nośnika USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operacja USB nie powiodła się"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operacja USB zakończona niepowodzeniem"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Podłączono jako urządzenie multimedialne."</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Podłączono jako aparat."</string>
@@ -1084,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Odłączanie karty SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Czyszczenie nośnika USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Czyszczenie karty SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nie można wyczyścić nośnika USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Nie można wyczyścić nośnika USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nie można wymazać pamięci USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nie można wymazać karty SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Karta SD została wyjęta przed jej odłączeniem."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Nośnik USB jest obecnie sprawdzany."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Karta SD jest obecnie sprawdzana."</string>
@@ -1117,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"wyłączono"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"naciśnięto"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nie naciśnięto"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Anuluj"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Gotowe"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmiana trybu"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Klawisz. Wymagany jest zestaw słuchawkowy, aby słyszeć klawisze podczas wpisywania hasła."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Przejdź wyżej"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Więcej opcji"</string>
@@ -1129,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Wyłączono transmisję danych 2G/3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Wyłączono transmisję danych 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Wyłączono komórkową transm. danych"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"dotknij, aby włączyć"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Kliknij, aby włączyć"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Przekroczono limit danych 2G/3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Przekroczono limit danych 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Przekroczono limit danych komór."</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ponad określony limit"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ponad określony limit"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dane w tle są ograniczone"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Kliknij, aby usunąć ograniczenie"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certyfikat zabezpieczeń"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certyfikat jest ważny."</string>
<string name="issued_to" msgid="454239480274921032">"Wystawiony dla:"</string>
@@ -1156,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Wybierz czynność"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Udostępnij..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Urządzenie zablokowane."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 38b8a79..27bf311 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"A autenticação falhou."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"A autenticação através do servidor proxy falhou."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Não foi possível estabelecer a ligação ao servidor."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"O servidor falhou ao comunicar. Tente novamente mais tarde."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"O servidor não conseguiu comunicar. Tente novamente mais tarde."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Esgotou o tempo limite da ligação ao servidor."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"A página contém demasiados redireccionamentos do servidor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"O protocolo não é suportado."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permite que uma aplicação obtenha e processe mensagens de transmissões de emergência. Esta autorização só está disponível para aplicações do sistema."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"enviar mensagens SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permite à aplicação enviar mensagens SMS. Algumas aplicações maliciosas podem fazer com que incorra em custos, enviando mensagens sem a sua confirmação."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"enviar mensagens SMS sem confirmação"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permite à aplicação enviar mensagens SMS. Algumas aplicações maliciosas podem fazer com que incorra em custos, enviando mensagens sem a sua confirmação."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"ler SMS ou MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permite à aplicação ler mensagens SMS armazenadas no seu tablet ou cartão SIM. Algumas aplicações maliciosas podem ler as suas mensagens confidenciais."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permite à aplicação ler mensagens SMS armazenadas no seu telefone ou cartão SIM. Algumas aplicações maliciosas podem ler as suas mensagens confidenciais."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"escrever dados de contacto"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permite a uma aplicação modificar os dados de contacto (endereço) armazenados no seu tablet. Algumas aplicações maliciosas podem utilizar estes dados para apagar ou modificar os dados dos seus contactos."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permite a uma aplicação modificar os dados de contacto (endereço) armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar estes dados para apagar ou modificar os dados dos seus contactos."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"ler os dados de perfil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que uma aplicação leia as informações pessoais do seu perfil. As aplicações maliciosas poderão utilizar isto para identificá-lo e enviar os seus dados pessoais para outras pessoas."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"escrever os dados do perfil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que uma aplicação altere as informações pessoais do seu perfil. As aplicações maliciosas podem utilizar isto para apagar ou alterar os dados do seu perfil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"ler os dados do perfil"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que a aplicação leia informações do perfil pessoal armazenadas no aparelho, como o seu nome e as informações de contacto. Isto significa que a aplicação pode identificá-lo e enviar informações do seu perfil a outras pessoas."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do seu perfil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que a aplicação altere ou adicione dados às informações do perfil pessoal armazenadas no aparelho, como o seu nome e as informações de contacto. Isto significa que outras aplicações o podem identificar e enviar informações do seu perfil a outras pessoas."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ler eventos do calendário, para além de informações confidenciais"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que uma aplicação leia todos os eventos do calendário armazenados no tablet, incluindo os de amigos ou colegas de trabalho. Uma aplicação maliciosa com esta permissão pode extrair informações pessoais destes calendários sem o conhecimento dos proprietários."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que uma aplicação leia todos os eventos do calendário armazenados no telemóvel, incluindo os de amigos ou colegas de trabalho. Uma aplicação maliciosa com esta permissão pode extrair informações pessoais destes calendários sem o conhecimento dos proprietários."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permite a uma aplicação ver o estado de todas as redes."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"acesso total à internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permite a uma aplicação criar sockets de rede."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"escrever definições de Nome do ponto de acesso"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite a uma aplicaçaõ modificar as definições de APN, tais como Proxy e Porta de qualquer APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"alterar/intercetar definições e tráfego de rede"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite que as definições de rede sejam alteradas e que todo o tráfego de rede seja intercetado e analisado por uma aplicação para, por exemplo, alterar o proxy e a porta do APN. As aplicações maliciosas podem monitorizar, redirecionar ou modificar os pacotes de rede sem que se aperceba disso."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"mudar conectividade de rede"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permite a uma aplicação alterar o estado da conectividade de rede."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Alterar conectividade associada"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Introduziu incorrectamente o PIN <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Efectuou incorrectamente a sua sequência de desbloqueio <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet utilizando o seu início de sessão no Google."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Efectuou incorrectamente o seu padrão de desbloqueio <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telefone utilizando o seu início de sessão no Google."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Tentou desbloquear o tablet <xliff:g id="NUMBER_0">%d</xliff:g> vezes de forma incorreta. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativa(s) sem êxito, as definições de origem do tablet serão repostas e todos os dados de utilizador serão perdidos."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER_0">%d</xliff:g> vezes de forma incorreta. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativa(s) sem êxito, as definições de origem do telemóvel serão repostas e todos os dados de utilizador serão perdidos."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Tentou desbloquear o tablet <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que serão repostas as respetivas definições de origem."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que serão repostas as respetivas definições de origem."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Tente novamente dentro de <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Esqueceu-se do padrão?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloqueio da conta"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permite que a aplicação adicione mensagens à sua caixa de entrada de correio de voz."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar permissões de localização geográfica do Navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite a uma aplicação modificar as permissões de localização geográfica do Navegador. As aplicações mal intencionadas podem utilizar isto para enviar informações de localização para Web sites arbitrários."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verificar pacotes"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite que a aplicação verifique se um pacote é instalável."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"vincular a um verificador de pacotes"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite ao titular solicitar verificadores de pacotes. Nunca deverá ser necessário para aplicações normais."</string>
<string name="save_password_message" msgid="767344687139195790">"Quer que o browser memorize esta palavra-passe?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Agora não"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Lembrar"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"introduzir"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"eliminar"</string>
<string name="search_go" msgid="8298016669822141719">"Pesquisar"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Pesquisar"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Consulta de pesquisa"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Limpar consulta"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Pesquisa por voz"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Há 1 mês"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Há mais de 1 mês"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="replace" msgid="8333608224471746584">"Substituir"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Substituir"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecção de texto"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selecione uma aplicação para o dispositivo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Nenhuma aplicação pode efectuar esta acção."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Lamentamos, o <xliff:g id="APPLICATION">%1$s</xliff:g> foi interrompido."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Lamentamos, o processo <xliff:g id="PROCESS">%1$s</xliff:g> foi interrompido."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"A <xliff:g id="APPLICATION">%2$s</xliff:g> não está a responder."\n\n"Pretende encerrá-la?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"A atividade <xliff:g id="ACTIVITY">%1$s</xliff:g> não está a responder."\n\n"Pretende encerrá-la?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reativar modo através das Definições &gt; Aplicações &gt; Gerir aplicações."</string>
<string name="smv_application" msgid="295583804361236288">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode auto-imposta."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode auto-imposta."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"O Android está a ser atualizado..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"A otimizar a aplicação <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"A iniciar as aplicações."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"A concluir o arranque."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Seleccione para mudar para a aplicação"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Mudar aplicações?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volume do alarme"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volume de notificações"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume do Bluetooth. Toque para ativar o modo silencioso."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque. Toque para ativar o modo silencioso."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume das chamadas. Toque para ativar o modo silencioso."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume de multimédia. Toque para ativar o modo silencioso."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume de notificação. Toque para ativar o modo silencioso."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume de Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume de chamadas"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume de multimédia"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume de notificações"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Toque predefinido"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Toque predefinido (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silencioso"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"tem um ligação à internet fraca."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar operação Wi-Fi Direct. Isto irá desativar a operação do cliente/zona Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Falha ao iniciar o Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Não foi possível iniciar o Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Pedido de configuração de Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Clique em OK para aceitar."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Pedido de configuração de ligação Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Introduza o PIN para prosseguir."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"É preciso introduzir o PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> no aparelho de pares <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para que possa prosseguir a configuração da ligação"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"A rede de telemóvel só estará disponível quando substituir o cartão SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"A rede de telemóvel estará indisponível até que reinicie o aparelho com um cartão SIM válido inserido."</string>
<string name="sim_done_button" msgid="827949989369963775">"Concluído"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Cartão SIM adicionado"</string>
<string name="sim_added_message" msgid="1209265974048554242">"É necessário reiniciar o aparelho para aceder à rede de telemóvel."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ocorreu um problema ao desactivar o armazenamento USB. Confirme se desinstalou o anfitrião USB e, em seguida, tente novamente."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar armazenamento USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se activar o armazenamento USB, algumas aplicações que estiver a utilizar serão paradas e poderão ficar indisponíveis até desactivar o armazenamento USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Falha na operação USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operação USB sem êxito"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Ligado como um aparelho multimédia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Ligado como uma câmara"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"A desmontar cartão SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"A apagar armazenamento USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"A apagar cartão SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Falha ao apagar o armazenamento USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Falha ao apagar o armazenamento USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Não foi possível apagar a memória de armazenamento USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Não foi possível apagar o cartão SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"O cartão SD foi removido antes de ser desmontado."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"O armazenamento USB está actualmente a ser verificado."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"O cartão SD está actualmente a ser verificado."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"desativado"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"premido"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"não premido"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Concluído"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. São necessários auscultadores com microfone integrado para ouvir as teclas ao escrever uma palavra-passe."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Os dados 2G-3G estão desativados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Os dados 4G estão desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Os dados móveis estão desativados"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"toque para ativar"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Toque para ativar"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Limite de dados 2G-3G excedido"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Limite de dados 4G excedido"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Limite de dados móveis excedido"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> acima do limite especificado"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> acima do limite especificado"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dados em seg. plano restringidos"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Toque para remover a restrição"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecionar atividade"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Partilhar com..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Aparelho bloqueado."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 4b48bbd..be15743 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Falha na autenticação."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Falha na autenticação por meio do servidor proxy."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Falha na conexão com o servidor."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Falha de comunicação do servidor. Tente novamente mais tarde."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"O servidor não conseguiu estabelecer comunicação. Tente novamente mais tarde."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"O tempo limite de conexão com o servidor esgotou."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"A página contém muitos redirecionamentos do servidor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"O protocolo não é suportado."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permite que o aplicativo receba e processe mensagens de transmissão de emergência. Esta permissão está disponível somente para aplicativos do sistema."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"enviar mensagens SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permite que o aplicativo envie mensagens SMS. Aplicativos maliciosos podem gerar gastos enviando mensagens sem a sua confirmação."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"enviar mensagens SMS sem confirmação"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permite que o aplicativo envie mensagens SMS. Aplicativos maliciosos podem gerar gastos enviando mensagens sem sua confirmação."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"ler SMS ou MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permite que o aplicativo leia mensagens SMS armazenadas em seu tablet ou cartão SIM. Aplicativos maliciosos podem ler suas mensagens confidenciais."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permite que o aplicativo leia mensagens SMS armazenadas no seu telefone ou cartão SIM. Aplicativos maliciosos podem ler as suas mensagens confidenciais."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"gravar dados de contato"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permite que um aplicativo modifique os dados de contato (endereço) armazenados em seu tablet. Aplicativos maliciosos podem usar isso para apagar ou modificar seus dados de contato."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permite que um aplicativo modifique os dados de contato (endereço) armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os seus dados de contato."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"ler dados do perfil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que um aplicativo leia todas as informações pessoais do seu perfil. Aplicativos suspeitos podem usar isso para identificá-lo e enviar suas informações pessoais para outras pessoas."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"gravar dados do perfil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que um aplicativo modifique as informações pessoais do seu perfil. Aplicativos suspeitos podem usar isso para apagar ou alterar dados do seu perfil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"ler dados de seu perfil"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite que o aplicativo leia informações pessoais de seu perfil armazenadas em seu dispositivo, como seu nome e suas informações de contato. Isso significa que o aplicativo pode identificá-lo e enviar as informações de seu perfil para outras pessoas."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do perfil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite que o aplicativo altere ou adicione informações de perfil pessoais armazenadas em seu dispositivo, como seu nome e suas informações de contato. Isso significa que outros aplicativos podem identificá-lo e enviar informações de seu perfil para outras pessoas."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"ler compromissos e informações confidenciais"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite que um aplicativo leia todos os compromissos armazenados na agenda de seu tablet, incluindo os de amigos ou de colegas de trabalho. Um aplicativo malicioso com essa permissão pode extrair informações pessoais dessa agenda sem que seus donos saibam."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite que um aplicativo leia todos os compromissos armazenados na agenda de seu telefone, incluindo os de amigos ou de colegas de trabalho. Um aplicativo malicioso com essa permissão pode extrair informações pessoais dessa agenda sem que seus donos saibam."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permite que um aplicativo veja o estado de todas as redes."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"acesso total da internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permite que um aplicativo crie soquetes de rede."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"gravar as configurações do Nome do ponto de acesso"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite que um aplicativo modifique as configurações de APN, como Proxy e Porta de qualquer APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"alterar/interceptar as configurações de rede e tráfego"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite que um aplicativo altere as configurações de rede, intercepte e inspecione todo o tráfego de rede, por exemplo, para alterar o proxy e a porta de qualquer APN. Aplicativos maliciosos poderiam controlar, redirecionar ou modificar pacotes de rede sem seu conhecimento."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"alterar conectividade da rede"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permite que um aplicativo altere o estado da conectividade de rede."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Alterar conectividade vinculada"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Você digitou incorretamente o seu PIN <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Você desenhou <xliff:g id="NUMBER_0">%d</xliff:g> vezes seu padrão de desbloqueio de maneira incorreta. Mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas e você receberá uma solicitação para desbloquear seu tablet usando seu login do Google."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Você desenhou o seu padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas e você receberá uma solicitação para desbloquear o seu telefone usando o seu login do Google."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Você tentou desbloquear incorretamente o tablet <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas malsucedidas, o tablet será redefinido para o padrão de fábrica e todos os dados do usuário serão perdidos."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Você tentou desbloquear incorretamente o telefone <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas malsucedidas, o telefone será redefinido para o padrão de fábrica e todos os dados do usuário serão perdidos."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Você tentou desbloquear incorretamente o tablet <xliff:g id="NUMBER">%d</xliff:g> vezes. O tablet será redefinido para o padrão de fábrica."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Você tentou desbloquear incorretamente o telefone <xliff:g id="NUMBER">%d</xliff:g> vezes. O telefone será redefinido para o padrão de fábrica."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Tente novamente em <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Esqueceu o padrão?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Desbloqueio de conta"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permite que o aplicativo adicione mensagens a sua caixa de entrada de correio de voz."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifique as permissões de geolocalização do seu navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que um aplicativo modifique as permissões de geolocalização do navegador. Aplicativos maliciosos podem usar isso para permitir o envio de informações de localização a sites arbitrários."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verificar pacotes"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite que o aplicativo verifique se um pacote pode ser instalado."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"vincular a um verificador de pacote"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite que o titular faça solicitações de verificadores de pacote. Nunca deve ser necessário para aplicativos normais."</string>
<string name="save_password_message" msgid="767344687139195790">"Deseja que o navegador lembre desta senha?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Agora não"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Lembrar"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"excluir"</string>
<string name="search_go" msgid="8298016669822141719">"Pesquisar"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Pesquisar"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Consulta de pesquisa"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Limpar consulta"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Pesquisa por voz"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 mês atrás"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Antes de 1 mês atrás"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Recortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="replace" msgid="8333608224471746584">"Substituir"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Substituir"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Seleção de texto"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selecione um aplicativo para o dispositivo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Nenhum aplicativo pode realizar esta ação."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"O <xliff:g id="APPLICATION">%1$s</xliff:g> parou."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> parou."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"O <xliff:g id="APPLICATION">%2$s</xliff:g> não está respondendo. "\n\n" Gostaria de fechá-lo?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"A atividade <xliff:g id="ACTIVITY">%1$s</xliff:g> não está respondendo. "\n\n"Gostaria de fechá-la?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reativar em Configurações &gt; Aplicativos &gt; Gerenciar aplicativos."</string>
<string name="smv_application" msgid="295583804361236288">"O aplicativo <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode imposta automaticamente."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode imposta automaticamente."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"O Android está sendo atualizado..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Otimizando aplicativo <xliff:g id="NUMBER_0">%1$d</xliff:g> de <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Iniciando os aplicativos."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Concluindo a inicialização."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Selecionar para alternar para o aplicativo"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Alternar aplicativos?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volume do alarme"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volume da notificação"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume do Bluetooth. Toque para alternar para o modo silencioso."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque. Toque para alternar para o modo silencioso."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume das chamadas. Toque para alternar para o modo silencioso."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume da mídia. Toque para alternar para o modo silencioso."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume das notificações. Toque para alternar para o modo silencioso."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume de Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume do toque"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume de chamadas"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume da mídia"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume da notificação"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Toque padrão"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Toque padrão (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silencioso"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"tem uma conexão à Internet deficiente."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar a operação do Wi-Fi Direct. Isso desligará a operação do ponto de acesso/cliente Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Falha ao iniciar o Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Não foi possível iniciar o Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitação de configuração da conexão do Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Clique em OK para aceitar."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitação de configuração da conexão do Wi-Fi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Digite o PIN para prosseguir."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"É necessário inserir o PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> no dispositivo pareado <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para prosseguir com a configuração da conexão"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"A rede móvel estará indisponível até que você substitua o cartão SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"A rede móvel ficará indisponível até que você reinicie com um cartão SIM válido inserido."</string>
<string name="sim_done_button" msgid="827949989369963775">"Concluído"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Cartão SIM adicionado"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Reinicie o dispositivo para acessar a rede móvel."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Houve um problema ao desativar o armazenamento USB. Verifique se desconectou o host USB e tente novamente."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Ativar o armazenamento USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se você ativar o armazenamento USB, alguns aplicativos que estão em uso serão interrompidos e poderão não estar disponíveis até você desativar o armazenamento USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Falha de operação de USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Falha na operação do USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como um dispositivo de mídia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectadas como uma câmera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Desconectando cartão SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Apagando o armazenamento USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Apagando cartão SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Falha ao apagar o armazenamento USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Falha ao apagar o armazenamento USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Não foi possível apagar o armazenamento USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Não foi possível apagar o cartão SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"O cartão SD foi removido antes de ser desconectado."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"O armazenamento USB está sendo verificado no momento."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"O cartão SD está sendo verificado no momento."</string>
@@ -1114,11 +1109,19 @@
<string name="checkbox_checked" msgid="7222044992652711167">"verificado"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"não selecionado"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"selecionado"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"não selecionado"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"Não selecionado"</string>
<string name="switch_on" msgid="551417728476977311">"ativado"</string>
<string name="switch_off" msgid="7249798614327155088">"desativado"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"pressionado"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"não pressionado"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancelar"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Excluir"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Concluído"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Alteração do modo"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tecla. É necessário um fone de ouvido para ouvir as teclas durante a digitação de uma senha."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dados 2G e 3G desativados"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dados 4G desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dados móveis desativados"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"toque para ativar"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Limite de dados 2G/3G excedido"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Toque para ativar"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Limite de dados 2G-3G excedido"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Limite de dados 4G excedido"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Limite de dados do celular excedido"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> acima do limite especificado"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> acima do limite especificado"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dados de segundo plano restritos"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Toque para remover a restrição"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecionar atividade"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Compartilhar com..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index cc3499f..3c497ed 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -748,6 +748,14 @@
<!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
<skip />
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Vus avais dissegnà <xliff:g id="NUMBER_0">%d</xliff:g> giadas in schema da debloccaziun nuncorrect. Suenter <xliff:g id="NUMBER_1">%d</xliff:g> ulteriuras emprovas senza success As dumonda il sistem da debloccar il telefonin cun agid da Vossas infurmaziuns d\'annunzia da Google."\n\n"Empruvai per plaschair anc ina giada en <xliff:g id="NUMBER_2">%d</xliff:g> secundas."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Empruvar anc ina giada en <xliff:g id="NUMBER">%d</xliff:g> secundas."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Emblidà il schema?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Debloccaziun dal conto"</string>
@@ -959,7 +967,7 @@
<string name="cut" msgid="3092569408438626261">"Tagliar ora"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Encollar"</string>
- <!-- no translation found for replace (8333608224471746584) -->
+ <!-- no translation found for replace (5781686059063148930) -->
<skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecziunar text…"</string>
@@ -1015,6 +1023,14 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"L\'applicaziun <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) ha violà sia atgna directiva StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Il process <xliff:g id="PROCESS">%1$s</xliff:g> ha violà sia atgna directiva StrictMode."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> vegn exequida"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Tscherner per midar a l\'applicaziun"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Midar dad ina applicaziun a l\'autra?"</string>
@@ -1299,6 +1315,22 @@
<skip />
<!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
<skip />
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1323,6 +1355,8 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
<!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
@@ -1331,6 +1365,8 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
<skip />
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
<skip />
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index f074fb0..5c07301 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Autentificarea nu a reuşit."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Autentificarea prin intermediul serverului proxy nu a reuşit."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Conectarea la server nu a reuşit."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serverul nu a reuşit să comunice. Încercaţi din nou mai târziu."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Serverul nu a reuşit să comunice. Încercaţi din nou mai târziu."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Conexiunea la server a expirat."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Pagina conţine prea multe redirecţionări de server."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protocolul nu este acceptat."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Permite aplicaţiei să primească şi să proceseze mesajele difuzate de urgenţă. Această permisiune este disponibil numai pentru aplicaţiile sistemului."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"trimitere mesaje SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permite aplicaţiei să trimită mesaje SMS. Aplicaţiile rău-intenţionate ar putea să vă genereze costuri, deoarece trimit mesaje fără confirmarea dvs."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"trimitere mesaje SMS fără confirmare"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Permite aplicaţiei să trimită mesaje SMS. Aplicaţiile rău intenţionate ar putea să genereze costuri, deoarece trimit mesaje fără confirmarea dvs."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"citire mesaje SMS sau MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permite aplicaţiei să citească mesajele SMS stocate pe computerul tablet PC sau pe cardul SIM. Aplicaţiile rău-intenţionate ar putea să vă citească mesajele confidenţiale."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permite aplicaţiei să citească mesajele SMS stocate pe telefon sau pe cardul SIM. Aplicaţiile rău-intenţionate ar putea să vă citească mesajele confidenţiale."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"scriere date de contact"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permite unei aplicaţii să modifice datele de contact (adresele) stocate pe computerul tablet PC. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a şterge sau a modifica datele dvs. de contact."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permite unei aplicaţii să modifice datele de contact (adresele) stocate pe telefon. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a şterge sau a modifica datele dvs. de contact."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"citeşte datele de profil"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite unei aplicaţii să citească toate informaţiile din profilul dvs. personal. Aplicaţiile rău-intenţionate pot utiliza această permisiune pentru a vă identifica şi a trimite informaţiile dvs. personale altor persoane."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"scrie datele de profil"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite unei aplicaţii să modifice informaţiile din profilul dvs. personal. Aplicaţiile rău-intenţionate pot folosi această permisiune pentru a şterge sau a modifica datele de profil."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"citire date din prof. dvs."</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Permite aplicaţiei să citească informaţiile din profilul personal stocate pe dispozitivul dvs., cum ar fi numele şi informaţiile dvs. de contact. Aceasta înseamnă că aplicaţia vă poate identifica şi poate trimite informaţiile din profilul dvs. altor persoane."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"scriere date în prof. dvs."</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Permite aplicaţiei să schimbe sau să adauge conţinut în informaţiile din profilul personal stocate pe dispozitivul dvs., cum ar fi numele şi informaţiile dvs. de contact. Aceasta înseamnă că alte aplicaţii vă pot identifica şi pot trimite informaţiile din profilul dvs. altor persoane."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"citirea evenimentelor din calendar şi a informaţiilor confidenţiale"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe tableta dvs., inclusiv evenimentele prietenilor sau colegilor. O aplicaţie rău intenţionată care are această permisiune poate extrage informaţii cu caracter personal din aceste calendare fără ştirea proprietarului."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe telefonul dvs., inclusiv evenimentele prietenilor sau colegilor. O aplicaţie rău intenţionată care are această permisiune poate extrage informaţii cu caracter personal din aceste calendare fără ştirea proprietarului."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permite unei aplicaţii să vizualizeze starea tuturor reţelelor."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"acces complet la Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permite unei aplicaţii să creeze socluri de reţea."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"scriere setări pentru numele punctelor de acces"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite unei aplicaţii să modifice setările APN, cum ar fi proxy-ul sau portul oricărui APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"modificare/interceptare setări şi trafic de reţea"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Permite unei aplicaţii să schimbe setările de reţea, să intercepteze şi să inspecteze tot traficul de reţea, de exemplu, să schimbe proxy-ul şi portul pentru orice APN. Aplicaţiile rău intenţionate ar putea să monitorizeze, să redirecţioneze sau să modifice pachetele de reţea fără ştirea dvs."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"modificare conectivitate în reţea"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permite unei aplicaţii să modifice starea conectivităţii la reţea."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Modificare conectivitate tethering"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Aţi introdus în mod incorect codul PIN de <xliff:g id="NUMBER_0">%d</xliff:g> (de) ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> (de) ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi computerul tablet PC cu ajutorul datelor de conectare la Google."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> de ori. După <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi telefonul cu ajutorul datelor de conectare la Google."\n\n" Încercaţi din nou în <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Acesta va fi acum resetat la setările prestabilite din fabrică."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Încercaţi din nou peste <xliff:g id="NUMBER">%d</xliff:g> (de) secunde."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Aţi uitat modelul?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Deblocare cont"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Permite aplicaţiei să adauge mesaje în Mesaje primite în mesageria vocală."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificare permisiuni pentru locaţia geografică a browserului"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite unei aplicaţii să modifice permisiunile privind locaţia geografică a browserului. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a permite trimiterea informaţiilor privind locaţia către site-uri Web arbitrare."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verificare pachete"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite aplicaţiei să verifice dacă un pachet poate fi instalat."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"conectare la un verificator de pachete"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite deţinătorului să efectueze solicitări pentru verificatori de pachete. Nu ar trebui să fie necesare pentru aplicaţiile obişnuite."</string>
<string name="save_password_message" msgid="767344687139195790">"Doriţi ca browserul să reţină această parolă?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Nu acum"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Reţineţi"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"delete"</string>
<string name="search_go" msgid="8298016669822141719">"Căutaţi"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Căutaţi"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Interogare de căutare"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Ştergeţi interogarea"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Trimiteţi interogarea"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Căutare vocală"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"cu 1 lună în urmă"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Cu mai mult de 1 lună în urmă"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Decupaţi"</string>
<string name="copy" msgid="2681946229533511987">"Copiaţi"</string>
<string name="paste" msgid="5629880836805036433">"Inseraţi"</string>
- <string name="replace" msgid="8333608224471746584">"Înlocuiţi"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Înlocuiţi"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiaţi adresa URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selectaţi text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selectare text"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Selectaţi o aplicaţie pentru dispozitivul USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Această acţiune nu poate fi efectuată de nicio aplicaţie."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Din păcate, <xliff:g id="APPLICATION">%1$s</xliff:g> s-a oprit."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Din păcate, procesul <xliff:g id="PROCESS">%1$s</xliff:g> s-a oprit."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Aplicaţia <xliff:g id="APPLICATION">%2$s</xliff:g> nu răspunde."\n\n"Doriţi să o închideţi?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Activitatea <xliff:g id="ACTIVITY">%1$s</xliff:g> nu răspunde."\n\n"Doriţi să o închideţi?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reactivaţi această funcţie din Setări &gt; Aplicaţii &gt; Gestionaţi aplicaţii."</string>
<string name="smv_application" msgid="295583804361236288">"Aplicaţia <xliff:g id="APPLICATION">%1$s</xliff:g> (procesul <xliff:g id="PROCESS">%2$s</xliff:g>) a încălcat propria politică StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> a încălcat propria politică StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android trece la vers. superioară..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Se optimizează aplicaţia <xliff:g id="NUMBER_0">%1$d</xliff:g> din <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Se pornesc aplicaţiile."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Se finalizează pornirea."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Rulează <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Selectaţi comutarea aplicaţiei"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Comutaţi între aplicaţii?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volum alarmă"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volum notificare"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volum"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volumul Bluetooth. Apăsaţi pentru a comuta la modul Silenţios."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volumul soneriei. Apăsaţi pentru a comuta la modul Silenţios."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volumul apelului. Apăsaţi pentru a comuta la modul Silenţios."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volumul pentru conţinutul media. Apăsaţi pentru a comuta la modul Silenţios."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volumul notificării. Apăsaţi pentru a comuta la modul Silenţios."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volum Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volum ton de apel"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volum apel"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volum media"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volum notificare"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Ton de apel prestabilit"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Ton de apel prestabilit (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silenţios"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"are o conexiune la internet slabă."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Porniţi funcţionarea Wi-Fi Direct. Acest lucru va dezactiva funcţionarea clientului/hotspotului Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct nu a putut porni"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct nu a putut porni"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitare de configurare a conexiunii pentru Wi-Fi Direct de la <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Faceţi clic pe OK pentru a accepta."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitare de configurare a conexiunii Wi-Fi Direct de la <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Introduceţi codul PIN pentru a continua."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pentru a continua configurarea conexiunii, este necesar să introduceţi codul PIN WPS pentru <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> pe dispozitivul pereche <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Anulaţi"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Card SIM eliminat"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Reţea mobilă va fi indisponibilă până la înlocuirea cardului SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Reţeaua mobilă va fi indisponibilă până când reporniţi având introdusă o cartelă SIM validă."</string>
<string name="sim_done_button" msgid="827949989369963775">"Terminat"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Card SIM adăugat"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Trebuie să reporniţi dispozitivul pentru a accesa reţeaua de telefonie mobilă."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Problemă la dezactivarea stocării pe USB. Verificaţi pentru a vă asigura că aţi demontat dispozitivul gazdă USB, apoi încercaţi din nou."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activaţi stocarea USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Dacă activaţi stocarea USB, unele aplicaţii pe care le utilizaţi în prezent se vor opri şi ar putea să nu fie disponibile până când dezactivaţi stocarea USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operaţie USB nereuşită"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operaţie USB nereuşită"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectat ca dispozitiv media"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectat ca aparat foto"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Se demontează cardul SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Se şterge stocarea USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Se şterge cardul SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Ştergerea stocării USB a eşuat."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Ştergerea stocării USB a eşuat."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nu s-a putut şterge stocarea USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nu s-a putut şterge cardul SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Cardul SD a fost eliminat înainte de a fi demontat."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Stocarea USB este în curs de verificare."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Cardul SD este în curs de verificare."</string>
@@ -1116,9 +1111,17 @@
<string name="radiobutton_selected" msgid="8603599808486581511">"selectat"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"neselectat"</string>
<string name="switch_on" msgid="551417728476977311">"activat"</string>
- <string name="switch_off" msgid="7249798614327155088">"dezactivată"</string>
+ <string name="switch_off" msgid="7249798614327155088">"dezactivat"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"apăsat"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"neapăsat"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Anulaţi"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Ştergeţi"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Terminat"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Schimbarea modului"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Tastă. Setul căşti-microfon este necesar pentru ascultarea tastelor când introduceţi o parolă."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opţiuni"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Datele 2G-3G au fost dezactivate"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datele 4G au fost dezactivate"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datele mobile au fost dezactiv."</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"atingeţi pentru activare"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Atingeţi pentru activare"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"S-a depăşit limita de date 2G-3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"S-a depăşit limita de date 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Limită date mobile depăşită"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> peste limita specificată"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"S-a depăşit limit. date mobile"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> peste limita specificată"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Datele de fundal restricţionate"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Atingeţi pt. a elimina limita"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de securitate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certificatul este valid."</string>
<string name="issued_to" msgid="454239480274921032">"Emis către:"</string>
@@ -1156,8 +1161,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"Amprentă SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Afişaţi-le pe toate..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selectaţi o activitate"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"În colaborare cu..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Distribuiţi cu..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispozitiv blocat."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index bb2f567..6795e59 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Не удалось провести аутентификацию."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Не удалось выполнить аутентификацию через прокси-сервер."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Не удалось подключиться к серверу."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Сервер не отвечает. Повторите попытку позднее."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Сервер не отвечает. Повторите попытку позже."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Время ожидания соединения с сервером истекло."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Страница содержит слишком много перенаправлений сервера."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Этот протокол не поддерживается."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Позволяет приложению принимать и обрабатывать экстренные сообщения. Это разрешение доступно только для системных приложений."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"отправлять SMS-сообщения"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Позволяет приложению отправлять SMS-сообщения. Вредоносные приложения могут отправлять сообщения без уведомления, что приведет к непредвиденным расходам."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"отправка SMS без подтверждения"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Приложение сможет отправлять SMS. Вредоносные приложения могут отправлять сообщения без уведомления, что приведет к непредвиденным расходам."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"считывать SMS или MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Позволяет приложению считывать SMS-сообщения, сохраненные на планшетном ПК или на SIM-карте. Вредоносные приложения могут считывать конфиденциальные сообщения."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Позволяет приложению считывать SMS-сообщения, сохраненные на телефоне или SIM-карте. Вредоносные приложения могут считывать конфиденциальные сообщения."</string>
@@ -327,15 +325,15 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"перезаписывать данные контакта"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Позволяет приложению изменять данные (адрес) контакта, сохраненные в памяти планшетного ПК. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных контакта."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Позволяет приложению изменять данные (адрес) контакта, сохраненные в памяти телефона. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных контакта."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"получать данные профиля"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Разрешает приложению читать все личные данные вашего профиля. Вредоносные приложения могут использовать эту возможность, чтобы идентифицировать вас и отправить вашу личную информацию другим людям."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"записывать данные профиля"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Разрешает приложению изменять личную информацию вашего профиля. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных профиля."</string>
- <string name="permlab_readCalendar" msgid="5972727560257612398">"получать доступ к событиям календаря и конфиденциальной информации"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Разрешает приложению получать доступ ко всем сохраненным в планшетном ПК событиям календаря, включая мероприятия друзей и коллег. Вредоносное ПО с таким уровнем доступа может извлекать личную информацию из календарей без ведома владельцев."</string>
- <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Разрешает приложению получать доступ ко всем сохраненным в телефоне событиям календаря, включая мероприятия друзей и коллег. Вредоносное ПО с таким уровнем доступа может извлекать личную информацию из календарей без ведома владельцев."</string>
- <string name="permlab_writeCalendar" msgid="8438874755193825647">"добавлять или изменять события календаря и отправлять сообщения по электронной почте гостям, не оповещая владельцев"</string>
- <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Разрешает приложению отправлять приглашения от имени владельца календаря, а также добавлять, удалять и изменять события (включая мероприятия друзей и коллег), которые вы можете редактировать на своем устройстве. Вредоносное ПО с таким уровнем доступа может распространять спам от имени владельцев календарей, самовольно изменять события и добавлять поддельные."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"получать данные профиля"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Позволяет приложению получать доступ к хранящейся на вашем устройстве личной информации профиля, например к имени и контактным данным. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"запись в данные профиля"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Позволяет приложению изменять или добавлять в личный профиль хранящуюся на вашем устройстве информацию, например имя или контактные данные. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"просматривать в календаре мероприятия и конфиденциальную информацию"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Приложениe получит доступ ко всем данным календаря, сохраненным в вашем устройстве (в том числе к мероприятиям ваших друзей и коллег). Вредоносное ПО с таким уровнем доступа сможет извлекать личную информацию без ведома владельцев календарей."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Приложениe получит доступ ко всем данным календаря, сохраненным в вашем телефоне (в том числе к мероприятиям ваших друзей и коллег). Вредоносное ПО с таким уровнем доступа сможет извлекать личную информацию без ведома владельцев календарей."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"добавлять мероприятия и изменять их, а также отправлять гостям электронные сообщения, не предупреждая об этом владельца календаря"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Приложение получит возможность отправлять приглашения от имени владельца календаря, а также добавлять, удалять и изменять мероприятия (в том числе мероприятия ваших друзей и коллег), которые доступны для редактирования на вашем устройстве. Вредоносное ПО с таким уровнем доступа сможет рассылать письма, добавлять и изменять мероприятия без ведома владельцев календарей."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"копировать источники мест для проверки"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Создавать фиктивные источники данных о местоположении. Вредоносные приложения могут использовать эту возможность для перезаписи данных о местоположении или состоянии телефона, полученных от оператора связи или GPS-приемника."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"получать доступ к дополнительным командам источника данных о местоположении"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Позволяет приложению просматривать состояние всех сетей."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"неограниченный доступ в Интернет"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Позволяет приложению создавать сетевые сокеты."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"записывать настройки имени точки доступа"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Позволяет приложению изменять настройки APN, такие как прокси-сервер и порт любого APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"изменение/перехват сетевых настроек и трафика"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Позволяет приложению изменять настройки сети, перехватывать и проверять весь сетевой трафик, например, чтобы изменить прокси-сервер или порт APN. Вредоносное ПО может отслеживать, перенаправлять или изменять сетевые пакеты без вашего ведома."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"изменять настройки подключения к сети"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Позволяет программе изменять состояние сетевого канала."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Изменять подключение к компьютеру"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Количество неудачных попыток ввода PIN-кода: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторите попытку через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Количество неудачных попыток ввода графического ключа разблокировки: <xliff:g id="NUMBER_0">%d</xliff:g>. После нескольких неудачных попыток (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будет предложено разблокировать планшетный ПК с помощью учетных данных Google."\n\n" Повторите попытку через <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Количество неудачных попыток ввода графического ключа разблокировки: <xliff:g id="NUMBER_0">%d</xliff:g>. После <xliff:g id="NUMBER_1">%d</xliff:g> неудачных попыток вам будет предложено разблокировать телефон с помощью учетных данных Google. "\n\n" Повторите попытку через <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Количество неудачных попыток разблокировать планшетный ПК: <xliff:g id="NUMBER_0">%d</xliff:g>. Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого настройки будут сброшены до заводских, а данные пользователя потеряны."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Количество неудачных попыток разблокировать телефон: <xliff:g id="NUMBER_0">%d</xliff:g>. Осталось попыток: <xliff:g id="NUMBER_1">%d</xliff:g>. После этого настройки будут сброшены до заводских, а данные пользователя потеряны."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Количество неудачных попыток разблокировать планшетный ПК: <xliff:g id="NUMBER">%d</xliff:g>. Настройки будут сброшены до заводских."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Количество неудачных попыток разблокировать телефон: <xliff:g id="NUMBER">%d</xliff:g>. Настройки будут сброшены до заводских."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Повторите попытку через <xliff:g id="NUMBER">%d</xliff:g> с."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забыли графический ключ?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Снятие блокировки аккаунта"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Разрешает приложению добавлять сообщения в почтовый ящик голосовой почты."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Изменить разрешения браузера для доступа к географическому местоположению"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Позволяет программе изменять разрешения браузера для доступа к географическому положению. Вредоносные программы могут пользоваться этим для отправки информации о местоположении на некоторые сайты."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"проверять пакеты"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Позволяет приложению проверить, может ли пакет быть установлен."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"связываться с верификатором пакетов"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Позволяет приложению отправлять запросы на проверку пакетов. Не требуется для обычных приложений."</string>
<string name="save_password_message" msgid="767344687139195790">"Вы хотите, чтобы браузер запомнил этот пароль?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сейчас"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запомнить"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ввод"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"удалить"</string>
<string name="search_go" msgid="8298016669822141719">"Поиск"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Поиск"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Поисковый запрос"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Удалить запрос"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Отправить запрос"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Голосовой поиск"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц назад"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Более месяца назад"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Вырезать"</string>
<string name="copy" msgid="2681946229533511987">"Копировать"</string>
<string name="paste" msgid="5629880836805036433">"Вставить"</string>
- <string name="replace" msgid="8333608224471746584">"Заменить"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Заменить"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копировать URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Выбрать текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Выбор текста"</string>
@@ -885,15 +878,13 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Выбор приложения для USB-устройства"</string>
<string name="noApplications" msgid="1691104391758345586">"Это действие не может выполнять ни одно приложение."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> остановилось."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Процесс \"<xliff:g id="PROCESS">%1$s</xliff:g>\" остановился."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
- <string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> не отвечает."\n\n"Закрыть?"</string>
- <string name="anr_activity_process" msgid="7018289416670457797">"<xliff:g id="ACTIVITY">%1$s</xliff:g> не отвечает."\n\n"Закрыть?"</string>
- <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> не отвечает. Закрыть?"</string>
- <string name="anr_process" msgid="306819947562555821">"<xliff:g id="PROCESS">%1$s</xliff:g> не отвечает."\n\n"Закрыть?"</string>
+ <string name="anr_activity_application" msgid="8339738283149696827">"Приложение \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" не отвечает."\n\n"Закрыть его?"</string>
+ <string name="anr_activity_process" msgid="7018289416670457797">"Приложение \"<xliff:g id="ACTIVITY">%1$s</xliff:g>\" не отвечает."\n\n"Закрыть его?"</string>
+ <string name="anr_application_process" msgid="7208175830253210526">"Приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" не отвечает. Закрыть его?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Приложение \"<xliff:g id="PROCESS">%1$s</xliff:g>\" не отвечает."\n\n"Закрыть его?"</string>
<string name="force_close" msgid="8346072094521265605">"ОК"</string>
<string name="report" msgid="4060218260984795706">"Отзыв"</string>
<string name="wait" msgid="7147118217226317732">"Подождать"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Включите еще раз в меню \"Настройки &gt; Приложения &gt; Управление приложениями\"."</string>
<string name="smv_application" msgid="295583804361236288">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (процесс <xliff:g id="PROCESS">%2$s</xliff:g>) нарушило собственную политику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> нарушил собственную политику StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Обновление Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Оптимизация приложения <xliff:g id="NUMBER_0">%1$d</xliff:g> из <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Запуск приложений..."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Окончание загрузки..."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Приложение <xliff:g id="APP">%1$s</xliff:g> запущено"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Нажмите, чтобы перейти к приложению"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Переключить приложения?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Громкость сигнала предупреждения"</string>
<string name="volume_notification" msgid="2422265656744276715">"Громкость уведомления"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Громкость"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Громкость Bluetooth. Нажмите, чтобы перейти в режим без звука."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Громкость мелодии звонка. Нажмите, чтобы перейти в режим без звука."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Громкость вызова. Нажмите, чтобы перейти в режим без звука."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Громкость воспроизведения мультимедиа. Нажмите, чтобы перейти в режим без звука."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Громкость уведомлений. Нажмите, чтобы перейти в режим без звука."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Громкость Bluetooth-устройства"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Громкость мелодии звонка"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Громкости мелодии вызова"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Громкость мультимедиа"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Громкость мелодии оповещений"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Мелодия по умолчанию"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"По умолчанию (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Без звука"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">": плохое интернет-соединение."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Начать соединение через Wi-Fi Direct. Клиент Wi-Fi и точка доступа будут отключены."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Не удалось запустить Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Не удалось запустить Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Чтобы принять запрос от устройства <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> на соединение Wi-Fi Direct, нажмите кнопку \"ОК\"."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Чтобы продолжить настройку соединения с устройством <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> через Wi-Fi Direct, введите PIN-код."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Чтобы продолжить настройку подключения, введите PIN-код WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на обнаруженном устройстве <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"ОК"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Отмена"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта удалена"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Мобильная сеть будет недоступна, пока вы не замените SIM-карту."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Пока вы не вставите действующую SIM-карту, мобильная сеть будет недоступна."</string>
<string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-карта добавлена"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Для доступа к мобильной сети необходимо перезагрузить устройство."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"При выключении USB-накопителя произошла неполадка. Убедитесь, что USB-хост отключен, и повторите попытку."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Включение USB-накопителя"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"При включении USB-накопителя некоторые используемые приложения могут прекратить работу и оставаться недоступными до отключения USB-накопителя."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Сбой операции USB-подключения"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Сбой подключения USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ОК"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Подключен как устройство хранения данных"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Подключен как камера"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Отключение SD-карты..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Очистка USB-накопителя..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Очистка SD-карты..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Не удалось очистить USB-накопитель."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Не удалось очистить USB-накопитель."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Не удалось очистить USB-накопитель."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Не удалось очистить SD-карту."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-карта была извлечена до отключения."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-накопитель проверяется."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Выполняется проверка SD-карты."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"Выкл."</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"нажато"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"не нажато"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Клавиша Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Отмена"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Клавиша удаления"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Клавиша смены режима"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Клавиша смены регистра"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Клавиша ввода"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Необходима гарнитура, чтобы услышать нажатие клавиш при вводе пароля."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вверх"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Передача данных 2G/3G отключена"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Передача данных 4G отключена"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобильный Интернет отключен"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Нажмите, чтобы снова включить."</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Нажмите, чтобы включить"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Превышен лимита трафика 2G и 3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Превышен лимит на трафик 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Превышен лимит на моб. трафик"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> превышает установленный лимит"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> превышает установленный лимит"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Фоновый режим ограничен"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Нажмите, чтобы снять ограничение"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Сертификат безопасности"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Этот сертификат действителен."</string>
<string name="issued_to" msgid="454239480274921032">"Кому выдан:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Выбор действия"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Поделиться с..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Устройство заблокировано."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index a92d8df..3d450d6 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Overenie nebolo úspešné."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Overenie pomocou servera proxy bolo neúspešné."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Pripojenie k serveru bolo neúspešné."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Komunikácia so serverom zlyhala. Skúste to znova neskôr."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Komunikácia so serverom zlyhala. Skúste to znova neskôr."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Časový limit pripojenia na server vypršal."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Stránka obsahuje príliš veľa presmerovaní servera."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol nie je podporovaný."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Umožňuje aplikácii prijímať a spracúvať správy núdzového vysielania. Toto oprávnenie je k dispozícii iba pre systémové aplikácie."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"odosielať správy SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Umožňuje aplikácii odosielať správy SMS. Škodlivé aplikácie môžu bez vášho potvrdenia odosielať spoplatnené správy."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"posielať správy SMS bez potvrdenia"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Umožňuje aplikácii odosielať správy SMS. Škodlivé aplikácie môžu bez vášho potvrdenia odosielať spoplatnené správy."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"čítanie správ SMS a MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Umožňuje aplikácii čítať správy SMS uložené vo vašom tablete alebo na karte SIM. Škodlivé aplikácie môžu čítať vaše dôverné správy."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Umožňuje aplikácii čítať správy SMS uložené vo vašom telefóne alebo na karte SIM. Škodlivé aplikácie môžu čítať vaše dôverné správy."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"zápis údajov kontaktov"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Umožňuje aplikácii zmeniť kontaktné údaje (adresu) uložené v tablete. Škodlivé aplikácie môžu pomocou tohto nastavenia vymazať alebo pozmeniť kontaktné údaje."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Umožňuje aplikácii zmeniť kontaktné údaje (adresu) uložené v telefóne. Škodlivé aplikácie môžu pomocou tohto nastavenia vymazať alebo pozmeniť kontaktné údaje."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"čítať údaje profilu"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikácii čítať všetky informácie osobného profilu. Škodlivé aplikácie to môžu využiť na zistenie vašej totožnosti a odosielanie vašich osobných informácií iným osobám."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"písať údaje profilu"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikácii zmeniť vaše osobné informácie v profile. Škodlivé aplikácie môžu pomocou tohto nastavenia vymazať alebo upraviť údaje vo vašom profile."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"čítať údaje vášho profilu"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umožňuje aplikácii čítať osobné informácie profilu uložené v zariadení, ako sú vaše meno a kontaktné údaje. Aplikácia vás takto môže identifikovať a poslať informácie profilu ostatným používateľom."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovať do údajov profilu"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umožňuje aplikácii zmeniť alebo pridať osobné informácie profilu uložené v zariadení, ako sú vaše meno a kontaktné údaje. Iné aplikácie vás takto môžu identifikovať a poslať vaše informácie profilu ostatným používateľom."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"čítať udalosti v kalendári a dôverné informácie"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Umožňuje aplikácii načítať všetky udalosti v kalendári, ktoré sú uložené v tablete (vrátane udalostí priateľov alebo kolegov). Škodlivá aplikácia môže pomocou tohto oprávnenia získavať osobné údaje z týchto kalendárov bez vedomia vlastníka."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Umožňuje aplikácii načítať všetky udalosti v kalendári, ktoré sú uložené v telefóne (vrátane udalostí priateľov alebo kolegov). Škodlivá aplikácia môže pomocou tohto oprávnenia získavať osobné údaje z týchto kalendárov bez vedomia vlastníka."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Umožňuje aplikácii zobraziť stav všetkých sietí."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"úplný prístup na Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Umožňuje aplikácii vytvoriť sieťové sokety."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"zápis nastavení pre názov prístupového bodu (APN)"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Umožňuje aplikácii zmeniť nastavenia prístupového bodu (APN), ako je napríklad server proxy alebo port ktoréhokoľvek APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"meniť/zachytávať nastavenia siete a sieťové prenosy"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Umožňuje aplikácii meniť nastavenia siete a zachytiť a kontrolovať sieťové prenosy, napríklad zmeniť adresu proxy a port akéhokoľvek prístupového bodu APN. Škodlivé aplikácie môžu sledovať, presmerovať alebo upraviť sieťové pakety bez vášho vedomia."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"zmena sieťového pripojenia"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Umožňuje aplikácii zmeniť stav sieťového pripojenia."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Zmena dátového pripojenia zdieľaného pomocou tetheringu"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne zadali kód PIN. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších neúspešných pokusoch (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požiadaní o odblokovanie tabletu pomocou prihlásenia do služby Google."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> sekúnd."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších neúspešných pokusoch (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požiadaní o odblokovanie telefónu pomocou prihlásenia do služby Google."\n\n" Skúste to znova o niekoľko sekúnd (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Tablet ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER_0">%d</xliff:g>-krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa v tablete obnovia predvolené továrenské nastavenia a všetky používateľské údaje budú stratené."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER_0">%d</xliff:g>-krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa v telefóne obnovia predvolené továrenské nastavenia a všetky používateľské údaje budú stratené."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Tablet ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V tablete sa teraz obnovia predvolené továrenské nastavenia."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V telefóne sa teraz obnovia predvolené továrenské nastavenia."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Počet sekúnd zostávajúcich do ďalšieho pokusu: <xliff:g id="NUMBER">%d</xliff:g>."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Zabudli ste vzor?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Odomknutie účtu"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Umožní aplikácii pridávať správy do doručenej pošty hlasovej schránky."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Zmeniť oprávnenia prehliadača poskytovať informácie o zemepisnej polohe"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Umožňuje aplikácii zmeniť oprávnenie prehliadača poskytovať informácie o zemepisnej polohe. Škodlivé aplikácie môžu toto nastavenie použiť na odosielanie informácií o umiestnení na ľubovoľné webové stránky."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"overiť balíky"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Umožňuje aplikácii overiť, či sa dá balík nainštalovať."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"naviazať na overovateľa balíka"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Umožňuje držiteľovi podávať žiadosti o overenie balíkov. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
<string name="save_password_message" msgid="767344687139195790">"Chcete, aby si prehliadač zapamätal toto heslo?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Teraz nie"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Zapamätať"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"potvrdiť"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"odstrániť"</string>
<string name="search_go" msgid="8298016669822141719">"Hľadať"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Hľadať"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Vyhľadávací dopyt"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Jasný dopyt"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Odoslať dopyt"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Hlasové vyhľadávanie"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"pred 1 mesiacom"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Viac ako pred 1 mesiacom"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Vystrihnúť"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovať"</string>
<string name="paste" msgid="5629880836805036433">"Prilepiť"</string>
- <string name="replace" msgid="8333608224471746584">"Nahradiť"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Nahradiť"</string>
<string name="copyUrl" msgid="2538211579596067402">"Skopírovať adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrať text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výber textu"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Vyberte aplikáciu pre zariadenia USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Túto akciu nemôžu vykonávať žiadne aplikácie."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> bohužiaľ prestala pracovať."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> bohužiaľ prestal pracovať."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Aplikácia <xliff:g id="APPLICATION">%2$s</xliff:g> neodpovedá."\n\n"Chcete ju ukončiť?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktivita <xliff:g id="ACTIVITY">%1$s</xliff:g> neodpovedá."\n\n"Chcete ju ukončiť?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Toto nastavenie je možné znova povoliť v sekcii Nastavenia &gt; Aplikácie &gt; Správa aplikácií."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila svoje vlastné vynútené pravidlá StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil svoje vlastné vynútené pravidlá StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Prebieha inovácia systému Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Prebieha optimalizácia aplikácie <xliff:g id="NUMBER_0">%1$d</xliff:g> z <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Prebieha spustenie aplikácií."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Prebieha dokončovanie spúšťania."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Spustená aplikácia: <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Túto možnosť vyberte, ak chcete prepnúť na aplikáciu."</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Prepnúť medzi aplikáciami?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Hlasitosť budíka"</string>
<string name="volume_notification" msgid="2422265656744276715">"Hlasitosť upozornení"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Hlasitosť"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Hlasitosť rozhrania Bluetooth. Klepnutím prepnete na tichý režim."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Hlasitosť zvonenia. Klepnutím prepnete na tichý režim."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hlasitosť hovoru. Klepnutím prepnete na tichý režim."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Hlasitosť médií. Klepnutím prepnete na tichý režim."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Hlasitosť upozornení. Klepnutím prepnete na tichý režim."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Hlasitosť zariadenia Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Hlasitosť zvonenia"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Hlasitosť hovoru"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Hlasitosť médií"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Hlasitosť upozornení"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Predvolený vyzváňací tón"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Predvolený vyzváňací tón (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Tichý"</string>
@@ -945,8 +940,8 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"má slabé pripojenie k internetu."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Priame pripojenie Wi-Fi"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Spustiť prevádzku priameho pripojenia siete Wi-Fi. Táto možnosť vypne prevádzku siete Wi-Fi v režime klient alebo hotspot."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Priame pripojenie siete Wi-Fi sa nepodarilo spustiť"</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Žiadosť o nastavenie priameho pripojenia siete Wi-Fi zo zariadenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>.Prijmete kliknutím na tlačidlo OK."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Priame pripojenie siete Wi-Fi sa nepodarilo spustiť"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Žiadosť o nastavenie priameho pripojenia siete Wi-Fi zo zariadenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Prijmete kliknutím na tlačidlo OK."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Žiadosť o nastavenie priameho pripojenia siete Wi-Fi z adresy <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Pokračujte zadaním kódu PIN."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Aby mohlo nastavenie pripojenia pokračovať, je potrebné zadať kód PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> v zdieľanom zariadení <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
<string name="select_character" msgid="3365550120617701745">"Vkladanie znakov"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Zrušiť"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM bola odobraná"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilná sieť bude k dispozícii až keď vymeníte kartu SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilná sieť nebude k dispozícii, kým nevložíte platnú kartu SIM a zariadenie nereštartujete."</string>
<string name="sim_done_button" msgid="827949989369963775">"Hotovo"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Bola pridaná karta SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Ak chcete získať prístup k mobilnej sieti, musíte zariadenie reštartovať."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Pri vypínaní ukladacieho priestoru USB sa vyskytol problém. Skontrolujte, či bol hostiteľ USB odpojený, a skúste to znova."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Zapnúť ukladací priestor USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ak zapnete ukladací priestor USB, dôjde k zastaveniu niektorých používaných aplikácií. Tieto aplikácie pravdepodobne nebudú k dispozícii až do vypnutia ukladacieho priestoru USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Chyba operácie na rozhraní USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Operácia rozhrania USB bola neúspešná"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Pripojené ako mediálne zariadenie"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Pripojené ako fotoaparát"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Odpájanie karty SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Prebieha vymazávanie ukladacieho priestoru USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Prebieha vymazávanie karty SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Vymazanie ukladacieho priestoru USB zlyhalo."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Vymazanie ukladacieho priestoru USB zlyhalo."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nepodarilo sa vymazať ukladací priestor USB"</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Nepodarilo sa vymazať kartu SD"</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Karta SD nebola pred odstránením odpojená."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Prebieha kontrola ukladacieho priestoru USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Prebieha kontrola karty SD."</string>
@@ -1113,12 +1108,20 @@
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"začiarknuté"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"nezačiarknuté"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"vybraté"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"nevybraté"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"vybratý"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"nie je vybraté"</string>
<string name="switch_on" msgid="551417728476977311">"zapnuté"</string>
<string name="switch_off" msgid="7249798614327155088">"vypnuté"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"stlačené"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"nestlačené"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Zrušiť"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Odstrániť"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hotovo"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Zmena režimu"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Kláves. Pri zadávaní hesla je potrebné použiť náhlavnú súpravu."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Prejsť na"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Viac možností"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Dátové prenosy 2G a 3G zakázané"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dátové prenosy 4G zakázané"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilné dátové prenosy zakázané"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"klepnutím povolíte"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Prekročili ste limit dát 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Prekročili ste limit dát 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Bol prekročený limit mobilných dát"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad stanoveným limitom"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Dotykom povoľte"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G, 3G dátový limit prekročený"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Dátový limit 4G bol prekročený"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Prekroč. limit pre mobil. dáta"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad stanovenou hranicou"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Údaje na pozadí sú obmedzené"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Dotykom odstránite obmedzenie"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certifikát zabezpečenia"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikát je platný."</string>
<string name="issued_to" msgid="454239480274921032">"Vydané pre:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vybrať aktivitu"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Zdieľať s..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Zariadenie je zamknuté."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index a0677a1..14fa217 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Dovoli programu, da sprejme in obdela sporočila oddaj v sili. To dovoljenje je na voljo samo za sistemske programe."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"pošiljanje sporočil SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Programom dovoljuje pošiljanje sporočil SMS. Zlonamerni programi lahko pošiljajo sporočila brez vaše potrditve, kar vas lahko drago stane."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"pošiljanje SMS-ov brez potrditve"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Programu omogoča pošiljanje SMS-ov. Zlonamerni programi lahko pošiljajo SMS-e brez vaše potrditve, kar vas lahko drago stane."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"branje sporočil SMS ali MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Programu omogoča branje sporočil SMS, shranjenih v tabličnem računalniku ali na kartici SIM. Zlonamerni programi lahko preberejo vaša zaupna sporočila."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Programu dovoljuje branje sporočil SMS, shranjenih v telefonu ali na kartici SIM. Zlonamerni programi lahko berejo vaša zaupna sporočila."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"pisanje podatkov stika"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Programu omogoča spreminjanje podatkov (naslovov), shranjenih v tabličnem računalniku. Zlonamerni programi lahko s tem dovoljenjem izbrišejo ali spremenijo podatke o stikih."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Programu dovoljuje spreminjanje podatkov stika (naslov), shranjenih v telefonu. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje podatkov stika."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"branje podatkov profila"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Programu omogoča branje podatkov o osebnem profilu. Zlonamerni programi lahko to izkoristijo, da vas prepoznajo in drugim pošiljajo vaše osebne podatke."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje podatkov o profilu"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Programu omogoča spreminjanje podatkov o osebnem profilu. Zlonamerni programi lahko to izkoristijo za brisanje ali spreminjanje podatkov o profilu."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"branje podatkov v profilu"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Programu omogoča branje podatkov v osebnem profilu, shranjenih v napravi, na primer imen in podatkov za stik. To pomeni, da lahko program ugotovi, kdo ste, in pošlje podatke v profilu drugim."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje v podatke v profilu"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Programu omogoča spreminjanje in dodajanje podatkov med podatke v osebnem profilu, shranjene v napravi, na primer imena in podatke za stik. To pomeni, da lahko program ugotovi, kdo ste, in pošlje podatke v profilu drugim."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"branje dogodkov v koledarju in zaupnih podatkov"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Programu dovoli, da bere dogodke v koledarju, shranjene v tabličnem računalniku, vključno z dogodki prijateljev in sodelavcev. Zlonamerni program lahko iz njih dobi osebne podatke brez vednosti lastnika."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Programu dovoli branje vseh dogodkov koledarja, shranjenih v telefonu, vključno z dogodki prijateljev in sodelavcev. Zlonamerni program lahko iz njih pridobi osebne podatke brez vednosti lastnika."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Programu dovoljuje ogled stanja vseh omrežij."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"poln dostop do interneta"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Dovoljuje, da program ustvari vtičnice omrežja."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"pisanje nastavitev imena dostopne točke"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Programu dovoljuje spreminjanje nastavitev APN, kot je strežnik proxy in vrata poljubnega APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"spreminjanje/prestrezanje omrežnih nastavitev in prometa"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Programu omogoča spreminjanje omrežnih nastavitev ter prestrezanje in pregledovanje vsega omrežnega prometa, na primer spreminjanje proxyja in vrat katerega koli APN-ja. Zlonamerni programi lahko brez vaše vednosti nadzirajo, preusmerjajo ali spreminjajo omrežne pakete."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"spreminjanje povezljivosti omrežja"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Programu dovoljuje spreminjanje stanja povezljivosti omrežja."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Spreminjanje posredniške povezljivosti"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"<xliff:g id="NUMBER_0">%d</xliff:g>-krat ste vnesli napačen PIN. "\n\n"Poskusite znova čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g>-krat ste narisali napačen vzorec za odklepanje. Če vam tudi v <xliff:g id="NUMBER_1">%d</xliff:g>. ne uspe, boste tablični računalnik morali odkleniti s podatki za prijavo v Google."\n\n" Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Vzorec za odklepanje ste nepravilno vnesli <xliff:g id="NUMBER_0">%d</xliff:g>-krat. Po <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da odklenete telefon z Googlovimi podatki za prijavo."\n\n" Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> sekund."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Poskusite znova čez <xliff:g id="NUMBER">%d</xliff:g> sekund."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Ali ste pozabili vzorec?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Odklepanje računa"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Programu dovoljuje dodajanje sporočil prejetim sporočilom odzivnika."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Spreminjanje dovoljenj za geolokacijo brskalnika"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Programu dovoljuje spreminjanje dovoljenja brskalnika za geografske lokacije. Zlonamerni programi lahko s tem dovoljenjem dovolijo pošiljanje podatkov o lokaciji poljubnim spletnim mestom."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"preveri pakete"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Programu omogoča, da preveri, ali je paket mogoče namestiti."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"poveži s preverjanjem paketov"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Imetniku omogoča zahtevanje preverjanja paketov. Tega nikoli ni treba uporabiti za navadne programe."</string>
<string name="save_password_message" msgid="767344687139195790">"Ali želite, da si brskalnik zapomni to geslo?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ne zdaj"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Zapomni si"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"vnesi"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"izbriši"</string>
<string name="search_go" msgid="8298016669822141719">"Iskanje"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Iskanje"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Iskalna poizvedba"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Izbris poizvedbe"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Pošlji poizvedbo"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Glasovno iskanje"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Pred 1 mesecem"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Pred več kot 1 mesecem"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"Izreži"</string>
<string name="copy" msgid="2681946229533511987">"Kopiraj"</string>
<string name="paste" msgid="5629880836805036433">"Prilepi"</string>
- <string name="replace" msgid="8333608224471746584">"Zamenjaj"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Zamenjaj"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Izbiranje besedila ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Izbrano besedilo"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Znova omogočite pri možnosti Nastavitve &gt; Programi &gt; Upravljanje programov."</string>
<string name="smv_application" msgid="295583804361236288">"Program <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) krši svoj samoizvedljivi pravilnik o strogem načinu."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> krši svoj samoizvedljivi pravilnik o strogem načinu."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> se izvaja"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Izberite za preklop na program"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Ali želite preklopiti program?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Glasnost alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Glasnost obvestila"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Glasnost"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Glasnost Bluetootha. Tapnite, da preklopite na tihi način."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Glasnost zvonjenja. Tapnite, da preklopite na tihi način."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Glasnost klica. Tapnite, da preklopite na tihi način."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Glasnost medijev. Tapnite, da preklopite na tihi način."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Glasnost obvestil. Tapnite, da preklopite v tihi način."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Glasnost Bluetootha"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Glasnost zvonjenja"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Glasnost klica"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Glasnost predstavnosti"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Glasnost obvestila"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Privzeta melodija zvonjenja"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Privzeta melodija zvonjenja (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Tiho"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"V redu"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Prekliči"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kartica SIM odstranjena"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mobilno omrežje ne bo na voljo, dokler ne zamenjate kartice SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mobilno omrežje ne bo na voljo, dokler naprave vnovič ne zaženete z veljavno kartico SIM."</string>
<string name="sim_done_button" msgid="827949989369963775">"Dokončano"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Kartica SIM dodana"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Če želite dostopati do mobilnega omrežja, morate znova zagnati napravo."</string>
@@ -1117,8 +1122,24 @@
<string name="radiobutton_not_selected" msgid="2908760184307722393">"ni izbrano"</string>
<string name="switch_on" msgid="551417728476977311">"vklopljeno"</string>
<string name="switch_off" msgid="7249798614327155088">"izklopljeno"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"pritisnjen"</string>
- <string name="togglebutton_not_pressed" msgid="4495147725636134425">"ni pritisnjen"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"vklopljen"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"izklopljen"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Krmarjenje navzgor"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Več možnosti"</string>
@@ -1131,11 +1152,15 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Podatki 2G-3G so onemogočeni"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Podatki 4G so onemogočeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podatki so onemogočeni"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tapnite, če želite omogočiti"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Omejitev podatk. 2G-3G presežena"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Omejitev za podatke 4G je presežena"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Omejitev za podatke v mobilni napravi je presežena"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad določeno omejitvijo"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Omejit. za podat. 2G-3G presež."</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Omejitev za podat. 4G presež."</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Omej. za pod. v mob. n. presež."</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> nad določeno mejo"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
<!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index d72c15e..bc04af3 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Дозвољава апликацији да прима и обрађује поруке хитног преноса. Ова дозвола је доступна само за системске апликације."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"слање SMS порука"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Омогућава да апликација шаље SMS поруке. Злонамерне апликације могу да шаљу поруке без ваше потврде, што ће вам створити трошкове."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"слање SMS порука без потврде"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Дозвољава апликацији да шаље SMS поруке. Злонамерне апликације могу да шаљу поруке без ваше потврде, што вам може створити трошкове."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"читање SMS или MMS порука"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Омогућава апликацији да чита SMS поруке сачуване на таблету или SIM картици. Злонамерне апликације могу да читају ваше поверљиве поруке."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Омогућава да апликација чита SMS поруке сачуване на телефону или SIM картици. Злонамерне апликације могу да читају поверљиву преписку."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"уписивање података о контактима"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Омогућава апликацији да измени податке о контакту (адресу) сачуване на таблету. Злонамерне апликације на тај начин могу да избришу или измене податке о контакту."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Омогућава да апликација измени податке о контакту (адреси) сачуване на телефону. Злонамерне апликације могу то да злоупотребе и да избришу или измене податке о контакту."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"читање података о профилу"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Омогућава да апликација чита све личне податке о профилу. Злонамерне апликације могу то да искористе да би утврдиле ваш идентитет и послале личне информације другим људима."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"писање података о профилу"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Омогућава да апликација мења личне податке о профилу. Злонамерне апликације могу то да искористе да би избрисале или измениле податке о профилу."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"читање података о профилу"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Дозвољава апликацији да чита личне информације о профилу сачуване на уређају, као што су име и информације за контакт. То значи да апликација може да вас идентификује и шаље информације о профилу другима."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"уписивање у податке профила"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Дозвољава апликацији да мења личне информације о профилу сачуване на уређају, као што су име и информације за контакт, или им доприноси. То значи да друге апликације могу да вас идентификују и шаљу информације о профилу другима."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"читање календарских догађаја и поверљивих информација"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Дозвољава апликацији да чита све календарске догађаје сачуване на таблету, укључујући догађаје пријатеља или колега. Злонамерна апликација са овом дозволом може да издвоји личне информације из тих календара без знања власника."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Дозвољава апликацији да чита све календарске догађаје сачуване на телефону, укључујући догађаје пријатеља или колега. Злонамерна апликација са овом дозволом може да издвоји личне информације из тих календара без знања власника."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Омогућава да апликација види статус свих мрежа."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"потпуни приступ Интернету"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Омогућава да апликација прави мрежне прикључке."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"уписивање подешавања назива приступне тачке"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Омогућава да апликација мења подешавања назива приступне тачке, као што су прокси и порт било ког назива приступне тачке."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"промена/пресретање мрежних подешавања и саобраћаја"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Дозвољава апликацији да мења мрежна подешавања као и да пресреће и прегледа сав мрежни саобраћај, на пример, ради измене проксија и порта било ког назива приступне тачке. Злонамерне апликације могу да прате, преусмеравају или мењају мрежне пакете без вашег знања."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"промена везе са мрежом"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Омогућава да апликација мења статус везе са мрежом."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Промена повезивања са Интернетом преко мобилног уређаја"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Унели сте нетачни PIN <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"<xliff:g id="NUMBER_0">%d</xliff:g> пута сте унели нетачни шаблон за откључавање. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешних покушаја од вас ће бити затражено да откључате таблет помоћу Google података за пријављивање."\n\n" Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"<xliff:g id="NUMBER_0">%d</xliff:g> пута сте нетачно унели шаблон за откључавање. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу података за пријављивање на Google."\n\n" Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Покушајте поново за <xliff:g id="NUMBER">%d</xliff:g> секунде(и)."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Заборавили сте шаблон?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Откључавање налога"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Омогућава апликацији да додаје поруке у ваше пријемно сандуче говорне поште."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Измена дозвола за географске локације прегледача"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Омогућава да апликација измени дозволе за утврђивање географске локације у прегледачу. Злонамерне апликације то могу да злоупотребе и искористе за слање информација о локацији насумичним веб сајтовима."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"верификовање пакета"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Омогућава апликацији да верификује да ли је пакет могуће инсталирати."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"обавезивање на верификатор пакета"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Омогућава власнику да упућује захтеве верификаторима пакета. Не би требало да икада буде потребно за обичне апликације."</string>
<string name="save_password_message" msgid="767344687139195790">"Желите ли да прегледач запамти ову лозинку?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сада"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запамти"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"избриши"</string>
<string name="search_go" msgid="8298016669822141719">"Претражи"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Претражи"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Упит за претрагу"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Обриши упит"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Пошаљи упит"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Гласовна претрага"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Пре месец дана"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Пре месец дана"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"Исеци"</string>
<string name="copy" msgid="2681946229533511987">"Копирај"</string>
<string name="paste" msgid="5629880836805036433">"Налепи"</string>
- <string name="replace" msgid="8333608224471746584">"Замени"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Замени"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копирај URL адресу"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Изабери текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избор текста"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Поново ово омогућите у оквиру Подешавања &gt; Апликације &gt; Управљање апликацијама."</string>
<string name="smv_application" msgid="295583804361236288">"Апликација <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) је прекршила самонаметнуте StrictMode смернице."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> је прекршио самонаметнуте StrictMode смернице."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"Апликација <xliff:g id="APP">%1$s</xliff:g> је покренута"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Пребаците се на апликацију"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Желите ли да се пребаците са једне апликације на другу?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Јачина звука аларма"</string>
<string name="volume_notification" msgid="2422265656744276715">"Јачина звука за обавештења"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Јачина звука"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Јачина звука Bluetooth-а. Додирните да бисте укључили или искључили нечујни режим."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Јачина звука мелодије звона. Додирните да бисте укључили или искључили нечујни режим."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Јачина звука позива. Додирните да бисте укључили или искључили нечујни режим."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Јачина звука медија. Додирните да бисте укључили или искључили нечујни режим."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Јачина звука обавештења. Додирните да бисте укључили или искључили нечујни режим."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Јачина звука Bluetooth уређаја"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Јачина мелодије звона"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Јачина звука позива"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Јачина звука медија"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Јачина звука обавештења"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Подразумевани звук звона"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Подразумевани звук звона (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Нечујно"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"Потврди"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Откажи"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM картица је уклоњена"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Мобилна мрежа ће бити недоступна док не замените SIM картицу."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Мобилна мрежа неће бити доступна док не покренете систем поново уз уметање важеће SIM картице."</string>
<string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM картица је додата"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Морате поново да покренете уређај да бисте могли да приступите мобилној мрежи."</string>
@@ -1111,7 +1116,7 @@
<string name="choose_account_label" msgid="4191313562041125787">"Избор налога"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Повећање"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Смањење"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"потврђено"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"изабрано"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"није потврђено"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"изабрано"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"није изабрано"</string>
@@ -1119,6 +1124,22 @@
<string name="switch_off" msgid="7249798614327155088">"искључено"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"притиснуто"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"није притиснуто"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Кретање нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Још опција"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G подаци су онемогућени"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G подаци су онемогућени"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Подаци мобилне мреже су онемогућени"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"додирните да бисте омогућили"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Прекорачен пренос 2G-3G података"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Прекорачење преноса 4G података"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Прек. прен. под. за мобил. уређ."</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Прекорачено огранич. прен. под."</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> преко наведеног ограничења"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 38758ae..2e4087e 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Det gick inte att autentisera."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Det gick inte att autentisera via proxyservern."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Det gick inte att ansluta till servern."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Servern kommunicerade inte. Försök igen senare."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Servern kommunicerade inte. Försök igen senare."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Anslutningen till servern har kopplats ifrån."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Sidan innehåller för många serveromdirigeringar."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokollet stöds inte."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Tillåter att appen tar emot och bearbetar sändningar i nödsituationer. Behörigheten är bara tillgänglig för systemappar."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"skicka SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Tillåter att programmet skickar SMS-meddelanden. Skadliga program kan skicka meddelanden utan ditt godkännande vilket kan kosta pengar."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"skicka SMS utan bekräftelse"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Tillåter att appen skickar SMS. Skadliga appar kan skicka meddelanden utan ditt godkännande vilket kan kosta pengar."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"läsa SMS eller MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Tillåter att programmet läser SMS-meddelanden som sparats på pekdatorn eller SIM-kortet. Skadliga program kan läsa dina konfidentiella meddelanden."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Tillåter att program läser SMS-meddelanden som sparats på din telefon eller SIM-kort. Skadliga program kan läsa dina konfidentiella meddelanden."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"skriva kontaktuppgifter"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Tillåter att ett program ändrar kontaktuppgifter (adresser) som har lagrats på pekdatorn. Skadliga program kan använda detta för att radera eller ändra kontaktuppgifter."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Tillåter att ett program ändrar kontaktuppgifter (adress) som har lagrats på din telefon. Skadliga program kan använda detta för att radera eller ändra kontaktuppgifter."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"läsa profildata"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillåter att en app läser din personliga profilinformation. Skadliga program kan använda detta för att identifiera dig och skicka dina personuppgifter till andra personer."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"skriva profildata"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillåter att en app ändrar din personliga profilinformation. Skadliga program kan använda detta för att radera eller ändra dina profildata."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"läser din profilinformation"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Tillåter att appen läser personlig profilinformation som lagrats på enheten, t.ex. ditt namn och kontaktuppgifter. Det innebär att appen kan identifiera dig och skicka din profilinformation till andra."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"skriver till data för din profil"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Tillåter att appen ändrar eller lägger till personlig profilinformation som lagras på din enhet, t.ex. ditt namn och kontaktuppgifter. Det innebär att andra appar kan identifiera dig och skicka profilinformation till andra."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"läsa kalenderuppgifter plus konfidentiell information"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Tillåter att en app läser alla kalenderuppgifter som sparats på din pekdator, inklusive dina vänners eller kollegors uppgifter. Skadliga appar kan använda detta för att hämta personliga uppgifter från kalendrarna utan ägarens vetskap."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Tillåter att en app läser kalenderuppgifter som har lagrats på din telefon, även dina vänners eller kollegors uppgifter. Skadliga appar kan använda detta för att hämta personliga uppgifter från kalendrar utan ägarens vetskap."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Tillåter att ett program ser status för alla nätverk."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"fullständig Internetåtkomst"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Tillåter att ett program skapar nätverksuttag."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"skriva inställningar för åtkomstpunktens namn"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Tillåter att ett program ändrar APN-inställningarna, till exempel Proxy och Port för alla APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"ändra/spärra nätverksinställningar och trafik"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Tillåter att en app ändrar nätverksinställningar och spärrar och undersöker all nätverkstrafik, t.ex. ändrar proxyservern och porten till en APN. Skadliga appar kan övervaka, omdirigera eller ändra nätverkspaket utan din vetskap."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"ändra nätverksanslutning"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Tillåter att ett program ändrar statusens för en kopplad nätverksanslutning."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"ändra sammanlänkad anslutning"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Du har angett din PIN-kod fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> försök till kommer du att uppmanas att låsa upp pekdatorn med din inloggning på Google."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> försök till kommer du att uppmanas att låsa upp telefonen med din Google-inloggning."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Du har försökt låsa upp pekdatorn på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök till kommer pekdatorn att återställas till fabriksinställningarna. Du förlorar då alla användardata."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök till kommer mobilen att återställas till fabriksinställningarna. Du förlorar då alla användardata."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Du har försökt låsa upp pekdatorn på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Pekdatorn återställs nu till fabriksinställningarna."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Mobilen återställs nu till fabriksinställningarna."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Försök igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Glömt ditt grafiska lösenord?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Lås upp konto"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Gör att appen lägger till meddelanden i röstbrevlådans inkorg."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ändra geografisk plats för webbläsaren"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Tillåter att ett program ändrar webbläsarens behörigheter för geografisk plats. Skadliga program kan använda detta för att tillåta att platsinformation skickas till godtyckliga webbplatser."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"kontrollera paket"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Tillåter att appen kontrollerar om ett paket går att installera."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"binda till en paketverifierare"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Tillåter att innehavaren skickar förfrågningar till paketverifierare. Det ska inte behövas för vanliga appar."</string>
<string name="save_password_message" msgid="767344687139195790">"Vill du att webbläsaren ska komma ihåg lösenordet?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Inte nu"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Kom ihåg"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"retur"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"ta bort"</string>
<string name="search_go" msgid="8298016669822141719">"Sök"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Sök"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Sökfråga"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Ta bort frågan"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Skicka fråga"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Röstsökning"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"för 1 månad sedan"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"För mer än en månad sedan"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Klipp ut"</string>
<string name="copy" msgid="2681946229533511987">"Kopiera"</string>
<string name="paste" msgid="5629880836805036433">"Klistra in"</string>
- <string name="replace" msgid="8333608224471746584">"Ersätt"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Ersätt"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiera webbadress"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Markera text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textmarkering"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Välj ett program för USB-enheten"</string>
<string name="noApplications" msgid="1691104391758345586">"Inga appar kan utföra den här åtgärden."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"<xliff:g id="APPLICATION">%1$s</xliff:g> har tyvärr stoppats."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har tyvärr stoppats."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> svarar inte."\n\n"Vill du stänga den?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> svarar inte."\n" "\n"Vill du stänga den?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aktivera igen under Inställningar &gt; Appar &gt; Hantera appar."</string>
<string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (processen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutit mot sin egen StrictMode-policy."</string>
<string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har brutit mot sin egen StrictMode-policy."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android uppgraderas ..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimerar app <xliff:g id="NUMBER_0">%1$d</xliff:g> av <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Startar appar."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Uppgraderingen är klar."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> körs"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Välj om du vill växla till programmet"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Vill du byta app?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Larmvolym"</string>
<string name="volume_notification" msgid="2422265656744276715">"Aviseringsvolym"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volym"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volym. Knacka lätt om du vill aktivera/inaktivera tyst läge."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volym på ringsignal. Knacka lätt om du vill aktivera/inaktivera tyst läge."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Samtalsvolym. Knacka lätt om du vill aktivera/inaktivera tyst läge."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolym. Knacka lätt om du vill aktivera/inaktivera tyst läge."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Meddelandevolym. Knacka lätt om du vill aktivera/inaktivera tyst läge."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volym"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volym på ringsignal"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Samtalsvolym"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolym"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Meddelandevolym"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Standardringsignal"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standardringsignal (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Tyst"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"har en dålig Internetanslutning."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi direkt"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Starta direkt Wi-Fi-användning. Detta inaktiverar Wi-Fi-användning med klient/hotspot."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Det gick inte att starta Wi-Fi direkt"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Det gick inte att starta Wi-Fi direkt"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Begäran om direkt Wi-Fi-anslutning från <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klicka på OK om du vill acceptera."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Begäran om direkt Wi-Fi-anslutning från <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ange PIN-kod om du vill fortsätta."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS PIN-kod <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> måste anges i enheten <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> för att anslutningsprocessen ska kunna fortsätta"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Avbryt"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kortet togs bort"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Det mobila nätverket kommer inte bli tillgängligt förrän du byter SIM-kortet."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Det mobila nätverket kommer inte att vara tillgängligt förrän du startar om med ett giltigt SIM-kort."</string>
<string name="sim_done_button" msgid="827949989369963775">"Klar"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-kort lades till"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Du måste starta om enheten för att ansluta till mobilnätet."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ett problem uppstod när USB-lagringsplatsen skulle inaktiveras. Kontrollera att USB-värden har demonterats och försök igen."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Aktivera USB-lagring"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Om du aktiverar USB-lagring avbryts några av de appar som körs och de kanske inte blir tillgängliga igen förrän du inaktiverar USB-lagring."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-åtgärd misslyckades"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB-åtgärd misslyckades"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Ansluten som en mediaenhet"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Ansluten som en kamera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Demonterar SD-kort..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Raderar USB-lagring..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Raderar SD-kort..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Det gick inte att radera USB-lagring"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Det gick inte att radera USB-lagring"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Det gick inte att radera informationen på USB-enheten."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Det gick inte att radera informationen på SD-kortet."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD-kortet demonterades inte innan det togs bort."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-lagringsenheten kontrolleras."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD-kortet kontrolleras."</string>
@@ -1111,7 +1106,7 @@
<string name="choose_account_label" msgid="4191313562041125787">"Välj ett konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Öka"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Minska"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"markerad"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"markerat"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"inte markerat"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"markerade"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"ej vald"</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"av"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"intryckt"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"inte intryckt"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Avbryt"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Klar"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Funktionsändring"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Skift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retur"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Du behöver ett headset för att höra tangenterna när du skriver in ett lösenord."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigera uppåt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Fler alternativ"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data via 2G-3G har inaktiverats"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data via 4G har inaktiverats"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata har inaktiverats"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"knacka lätt om du vill aktivera"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Tryck om du vill aktivera"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Gränsen för data via 2G-3G har överskridits"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Gränsen för data via 4G har överskridits"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Gränsen för mobildata har överskridits"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> över angiven gräns"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> över angiven gräns"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Bakgrundsdata är begränsade"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Tryck om du vill ta bort begränsningen"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Säkerhetscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikatet är giltigt."</string>
<string name="issued_to" msgid="454239480274921032">"Utfärdad till:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Välj aktivitet"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Dela med..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Enheten är låst."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index bb3c304..6396ed4 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -166,8 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (4270874999047767599) -->
- <skip />
+ <string name="httpErrorIO" msgid="4270874999047767599">"Seva haikuweza kuwasiliana. Jaribu tena baadaye."</string>
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
<!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
@@ -291,10 +290,8 @@
<!-- no translation found for permlab_sendSms (5600830612147671529) -->
<skip />
<string name="permdesc_sendSms" msgid="1946540351763502120">"Huruhusu programu kutuma ujumbe wa SMS. Programu hasidi huenda zikakugharimu pesa kwa kutuma ujumbe bila uthibitisho wako."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"Tuma ujumbe wa SMS bila ya thibitisho"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Huruhusu programu kutuma ujumbe wa SMS. Programu hatari huenda zikagharimu pesa kwa kutuma ujumbe bila ya uthibitishaji wako."</string>
<!-- no translation found for permlab_readSms (4085333708122372256) -->
<skip />
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Huruhusu programu kusoma SMS zilizohifadhiwa kwenye kompyuta yako ndogo au kadi ya SIM. Huenda programu hasidi zikasoma SMS zako za siri."</string>
@@ -472,14 +469,10 @@
<skip />
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Huruhusu programu kurekebisha data ya anwani (anwani) iliyohifadhiwa kwenye kompyuta yako ndogo. Programu hasidi zinaweza kutumia hii ili kufuta au kurekebisha data yako ya anwani."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Huruhusu programu kurekebisha data ya anwani iliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya anwani yako."</string>
- <!-- no translation found for permlab_readProfile (6824681438529842282) -->
- <skip />
- <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
- <skip />
- <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
- <skip />
- <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
- <skip />
+ <string name="permlab_readProfile" msgid="6824681438529842282">"soma data ya maelezo yako mafupi"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Inaruhusu programu kusoma maelezo mafupi ya binafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na maelezo yako ya anwani. Hii ina maanisha programu inaweza kukutambua na kutuma habari maelezo yako mafupi kwa wengine."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"andika kwenye data ya maelezo yako mafupi"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Inaruhusu programu kubadilisha au kuongeza maelezo binafsi ya maelezo yako mafupi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na maelezo ya anwani. Hii ina maanisha programu nyingine ziweze kukutambua na kutuma maelezo ya maelezo yako mafupi kwa wengine."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"soma matukio ya kalenda pamoja na maelezo ya siri"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye kompyuta yako ndogo, pamoja na za marafiki au wafanyakazi wenza. Programu hasidi yenye kibali hiki kinaweza kuchukua maelezo ya kibinagsi kutoka kwa kalenda hizi bila ufahamu wa mmiliki."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako, pamoja na za marafiki au marafiki wenza. Programu hasidi yenye kibali hiki inaweza kuchukua maelezo ya kibinafsi kutoka kwa kalenda hizi bila ufahamu wa mmiliki."</string>
@@ -621,9 +614,8 @@
<!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
<skip />
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Huruhusu programu kuunda soketi za mtandao."</string>
- <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
- <skip />
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Huruhusu programu kurekebisha mipangilio ya APN, kama vile Mbadala na Kituo cha APN yoyote."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"mabadiliko / kuingilia mipangilio ya mtandao/msonmgamano"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Inaruhusu programu kubadilisha mipangilio ya mtandao na kukatiza na kukagua msongamano wa mtandao, kwa mfano ili kubadilisha proksi nakituo tayarishi chochote cha APN. Programu hatari zinaweza kuchunguza, kuonyesha upya, au kubadilisha pakiti za mtandao bila ya elimu yako."</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Huruhusu programu kubadilisha hali ya uunganishaji wa mtandao."</string>
@@ -891,6 +883,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Haujaingiza PIN yako kwa usahihi mara<xliff:g id="NUMBER_0">%d</xliff:g>tafadhali jaribu tena. "\n\n"baada ya sekunde<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Umechora mchoro wako wa kufungua vibaya mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofanikiwa, utaulizwa kufungua kompyuta yako ndogo kwa kutumia njia yako ya kuingia kwa Google."\n\n" Tafadhali jaribu tena kati ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Umechora vibaya ruwaza yako ya kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio zaidi yasiyofaulu <xliff:g id="NUMBER_1">%d</xliff:g>, utaulizwa kufungua simu yako kwa kutumia ingia yako kwenye Google."\n\n" Tafadhali jaribu tena kati ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya zaidi ya <xliff:g id="NUMBER_1">%d</xliff:g> majaribio yasiyofanikiwa, kompyuta ndogo itawekwa upya kwa kiwanda chaguo-msingi na data yote ya mtumiaji itapotea."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofanikiwa, simu itawekwa upya kwa kiwanda chaguo-msingi na data yote ya mtumiaji itapotea."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Kompyuta ndogo haitaweza kuwekwa upya kwa kiwanda chaguo-msingi."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Kompyuta ndogo haitaweza kuwekwa upya kwa kiwanda chaguo-msingi."</string>
<!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
<skip />
<!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
@@ -971,14 +967,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Huruhusu programu kuongeza ujumbe kwa kisanduku pokezi chako cha barua ya sauti."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Rekebisha vibali vya Kivinjari cha eneo la jiografia"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Huruhusu programu kwa kurekebisha vibali vya Kivinjari cha eneo la jeo. Programu hasidi zinaweza kutumia hii kwa kuruhusu utumaji wa habari ya eneo kwa tovuti mbadala."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"thibitisha furushi"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Inaruhusu programu kuthibitisha kuwa furushi linaweza kusakinishwa."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"Funga kwa kithibitishaji cha furushi"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Inaruhusu mmiliki kufanya maombi ya furushi la vibainishi. Kamwe hazitaitajika kwa programu za kawaida."</string>
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -1003,16 +995,11 @@
<skip />
<!-- no translation found for search_go (8298016669822141719) -->
<skip />
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Tafuta"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Hoja ya utafutaji"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Futa swali"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Wasilisha hoja"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Utafutaji wa sauti"</string>
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Kabla ya mwezi 1 uliopita"</string>
@@ -1134,7 +1121,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="replace" msgid="8333608224471746584">"Badilisha"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Badilisha"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
@@ -1172,10 +1159,8 @@
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Kwa bahati mbaya, <xliff:g id="APPLICATION">%1$s</xliff:g> imekoma."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Kwa bahati mbaya, mchakato <xliff:g id="PROCESS">%1$s</xliff:g> umekoma."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> haijibu. "\n" "\n" Je, ungependa kuifunga?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Shughuli <xliff:g id="ACTIVITY">%1$s</xliff:g>haijibu. "\n" "\n" Je, ungependa kuifunga?"</string>
@@ -1196,6 +1181,10 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"Shughuli ya <xliff:g id="APPLICATION">%1$s</xliff:g> (programu <xliff:g id="PROCESS">%2$s</xliff:g>) imeenda kinyume na sera yake ya StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Shughuli ya <xliff:g id="PROCESS">%1$s</xliff:g> imeenda kinyume na kulazimisha sera yake ya StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android inapandishwa gredi..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Inashughulikia programu <xliff:g id="NUMBER_0">%1$d</xliff:g> ya <xliff:g id="NUMBER_1">%2$d</xliff:g> ."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Programu za kuanza."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Inamaliza kuwasha."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> inaendelea"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Chagua ili kubadilisha kwa programu"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Badilisha programu?"</string>
@@ -1219,11 +1208,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Sauti ya notisi"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Sauti ya Bluetooth. Gusa ili kubadilisha kwa modi kimya."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Sauti ya toni ya mlio. Gusa ili kubadilisha kwa modi kimya."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Sauti ya simu. Gusa ili kubadilisha kwa modi kimya."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Sauti ya media. Gusa ili kubadilisha kwa modi kimya."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Sauti ya taarifa. Gusa ili kubadilisha kwa modi kimya."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Sauti ya Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Sauti ya toni mlio"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Sauti ya simu"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Sauti ya midia"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Sauti ya arifa"</string>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1247,8 +1236,7 @@
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
- <skip />
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Haikuweza kuanza Mtandao hewa Moja kwa moja"</string>
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
<!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
@@ -1267,8 +1255,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
+ <string name="sim_removed_message" msgid="2333164559970958645">"mtandao wa simu hutapatika hadi uanzishe upya na kadi ya SIM halali iliyoingizwa."</string>
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
@@ -1308,7 +1295,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Kulikuwa na tatizo la kuzima uhifadhi wa USB. angalia kwa kuhakikisha umeangua mpangishi wa USB, kisha jaribu tena."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Wezesha hifadhi ya USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ikiwa utawezesha hifadhi ya UsB, baadhi ya programu unazozitumia zitakoma na huenda zisipatikane hadi uzime hifadhi ya UsB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Uendeshi wa USB umeshindikana"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Uendeshaji wa USB hujafanikiwa"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Sawa"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1418,8 +1405,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Inaondoa kadi ya SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Inafuta hifadhi ya USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Inafuta kadi ya SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Imeshindwa kufuta hifadhi ya USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Imeshindwa kufuta hifadhi ya USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Haikuweza kufuta hifadhi ya USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Haikuweza kufuta kadi ya SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Kadi ya SD iliondolewa kabla ya kuondolewa."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Hifadhi ya USB inakaguliwa kwa sasa."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Kadi ya SD inakaguliwa kwa sasa."</string>
@@ -1454,6 +1441,14 @@
<string name="switch_off" msgid="7249798614327155088">"zima"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"iliyobonyezwa"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"Haijabonyezwa"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ghairi"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Futa"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Imefanyika"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modi ya mabadiliko"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingiza"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Muhimu. Kifaa cha kuskiza kilihitaji kusikiliza vichupo wakati wa kucharaza nenosiri."</string>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1478,16 +1473,17 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Gusa ili kuwezesha"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Kikomo cha data ya 2G-3G kimezidishwa"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Kikomo cha data cha 4G kimezidishwa"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Kikomo cha data ya ya kifaa cha mkononi kimezidishwa"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> juu ya kikomo kilichobainishwa"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> juu ya kikomo kilichobainishwa"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Data ya mandhari nyuma imezuiwa"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Gusa ili kuondoa kizuizi"</string>
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
@@ -1524,6 +1520,5 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 24d5d8d..792066e 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -45,13 +45,7 @@
<dimen name="keyguard_pattern_unlock_status_line_font_size">14sp</dimen>
<!-- Preference activity, vertical padding for the header list -->
- <dimen name="preference_screen_header_vertical_padding">16dp</dimen>
-
- <!-- Reduce the margin when using dual pane -->
- <!-- Preference activity side margins -->
- <dimen name="preference_screen_side_margin">0dp</dimen>
- <!-- Preference activity side margins negative-->
- <dimen name="preference_screen_side_margin_negative">-4dp</dimen>
+ <dimen name="preference_screen_header_vertical_padding">32dp</dimen>
</resources>
diff --git a/core/res/res/values-sw600dp/styles.xml b/core/res/res/values-sw600dp/styles.xml
index 7dea9b8..f9e95b7 100644
--- a/core/res/res/values-sw600dp/styles.xml
+++ b/core/res/res/values-sw600dp/styles.xml
@@ -25,4 +25,12 @@
<item name="android:measureWithLargestChild">true</item>
<item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
</style>
+
+ <style name="PreferencePanel">
+ <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
+ <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
+ <item name="android:layout_marginTop">@dimen/preference_screen_top_margin</item>
+ <item name="android:layout_marginBottom">@dimen/preference_screen_bottom_margin</item>
+ <item name="android:background">?attr/detailsElementBackground</item>
+ </style>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 48c42a1..a067e7b 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"การตรวจสอบสิทธิ์สำเร็จแล้ว"</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"การตรวจสอบสิทธิ์ทางพร็อกซีเซิร์ฟเวอร์ไม่สำเร็จ"</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"เชื่อมต่อไปยังเซิร์ฟเวอร์ไม่สำเร็จ"</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"เซิร์ฟเวอร์สื่อสารล้มเหลว โปรดลองใหม่อีกครั้งในภายหลัง"</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"เซิร์ฟเวอร์ไม่สามารถสื่อสาร โปรดลองอีกครั้งในภายหลัง"</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"หมดเวลาเชื่อมต่อกับเซิร์ฟเวอร์"</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"หน้าเว็บมีการเปลี่ยนเส้นทางเซิร์ฟเวอร์มากเกินไป"</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"โปรโตคอลไม่ได้รับการสนับสนุน"</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"อนุญาตให้แอปพลิเคชันรับและประมวลผลข้อความการกระจายฉุกเฉิน การอนุญาตนี้จะใช้ได้เฉพาะกับแอปพลิเคชันระบบ"</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"ส่งข้อความ SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"อนุญาตให้แอปพลิเคชันส่งข้อความ SMS แอปพลิเคชันที่เป็นอันตรายอาจทำให้คุณเสียค่าใช้จ่ายโดยการส่งข้อความโดยไม่ขอการยืนยันจากคุณ"</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"ส่งข้อความ SMS โดยไม่มีการยืนยัน"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"อนุญาตให้แอปพลิเคชันส่งข้อความ SMS แอปพลิเคชันที่เป็นอันตรายอาจทำให้คุณเสียค่าใช้จ่ายด้วยการส่งข้อความโดยไม่มีการยืนยันจากคุณ"</string>
<string name="permlab_readSms" msgid="4085333708122372256">"อ่าน SMS หรือ MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"อนุญาตให้แอปพลิเคชันอ่านข้อความ SMS ที่จัดเก็บอยู่บนแท็บเล็ตหรือซิมการ์ดของคุณ แอปพลิเคชันที่เป็นอันตรายอาจอ่านข้อความที่เป็นความลับของคุณได้"</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"อนุญาตให้แอปพลิเคชันอ่านข้อความ SMS ที่จัดเก็บในโทรศัพท์หรือซิมการ์ดของคุณ แอปพลิเคชันที่เป็นอันตรายอาจอ่านข้อความลับของคุณได้"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"เขียนข้อมูลที่อยู่ติดต่อ"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลรายชื่อติดต่อ (ที่อยู่) ที่จัดเก็บอยู่บนแท็บเล็ตของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ลบหรือแก้ไขข้อมูลรายชื่อติดต่อของคุณได้"</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลที่อยู่ติดต่อ (ที่อยู่) ที่จัดเก็บบนโทรศัพท์ของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ลบหรือแก้ไขข้อมูลที่อยู่ติดต่อของคุณได้"</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"อ่านข้อมูลโปรไฟล์"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลโปรไฟล์ส่วนบุคคลของคุณทั้งหมด ซึ่งอาจทำให้แอปพลิเคชันที่เป็นอันตรายสามารถระบุตัวคุณและส่งข้อมูลส่วนบุคคลของคุณให้กับบุคคลอื่นได้"</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"เขียนข้อมูลโปรไฟล์"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลโปรไฟล์ส่วนบุคคลของคุณ ซึ่งอาจทำให้แอปพลิเคชันที่เป็นอันตรายสามารถลบหรือแก้ไขข้อมูลโปรไฟล์ของคุณได้"</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"อ่านข้อมูลโปรไฟล์ของคุณ"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลโปรไฟล์ส่วนบุคคลที่จัดเก็บในอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลรายชื่อติดต่อของคุณ ซึ่งหมายความว่าแอปพลิเคชันจะสามารถระบุตัวคุณและส่งข้อมูลโปรไฟล์ของคุณไปให้ผู้อื่นได้"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"เขียนลงในข้อมูลโปรไฟล์ของคุณ"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงหรือเพิ่มลงในข้อมูลโปรไฟล์ส่วนบุคคลที่จัดเก็บในอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลรายชื่อติดต่อของคุณ ซึ่งหมายความว่าแอปพลิเคชันอื่นจะสามารถระบุตัวคุณและส่งข้อมูลโปรไฟล์ของคุณไปให้ผู้อื่นได้"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"อ่านกิจกรรมบนปฏิทินรวมถึงข้อมูลที่เป็นความลับ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมทั้งหมดบนปฏิทินที่จัดเก็บไว้ในแท็บเล็ตของคุณ รวมถึงกิจกรรมของเพื่อนและเพื่อนร่วมงานของคุณด้วย แอปพลิเคชันที่เป็นอันตรายซึ่งได้รับอนุญาตจะสามารถดึงข้อมูลส่วนบุคคลจากกิจกรรมบนปฏิทินเหล่านี้ได้โดยที่เจ้าของไม่ทราบ"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมทั้งหมดบนปฏิทินที่จัดเก็บไว้ในโทรศัพท์ของคุณ รวมถึงกิจกรรมของเพื่อนและเพื่อนร่วมงานของคุณด้วย แอปพลิเคชันที่เป็นอันตรายซึ่งได้รับอนุญาตจะสามารถดึงข้อมูลส่วนบุคคลจากกิจกรรมบนปฏิทินเหล่านี้ได้โดยที่เจ้าของไม่ทราบ"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"อนุญาตให้แอปพลิเคชันดูสถานะของเครือข่ายทั้งหมด"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"การเข้าถึงอินเทอร์เน็ตเต็มรูปแบบ"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"อนุญาตให้แอปพลิเคชันสร้างซ็อคเก็ตเครือข่าย"</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"เขียนการตั้งค่าจุดเข้าใช้งาน"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"อนุญาตให้แอปพลิเคชันแก้ไขการตั้งค่า APN เช่น พร็อกซีและพอร์ตของ APN"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"เปลี่ยน/ขัดขวางการตั้งค่าเครือข่ายและการเข้าชม"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"อนุญาตให้แอปพลิเคชันเปลี่ยนการตั้งค่าเครือข่ายและขัดขวางและตรวจสอบการเข้าชมในเครือข่าย ตัวอย่างเช่น การเปลี่ยนพร็อกซีและพอร์ตของ APN แอปพลิเคชันที่เป็นอันตรายอาจตรวจสอบ เปลี่ยนเส้นทาง หรือปรับเปลี่ยนแพ็คเก็ตเครือข่ายโดยที่คุณไม่ทราบ"</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"เปลี่ยนการเชื่อมต่อเครือข่าย"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"อนุญาตให้แอปพลิเคชันเปลี่ยนสถานะการเชื่อมต่อเครือข่าย"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"เปลี่ยนการเชื่อมต่อที่ปล่อยสัญญาณไว้"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"คุณป้อน PIN ไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกแท็บเล็ตโดยใช้การลงชื่อเข้าใช้ Google ของคุณ"\n\n" โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งหากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้การลงชื่อเข้าใช้ Google"\n\n"โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"คุณพยายามปลดล็อกแท็บเล็ตอย่างไม่ถูกต้องแล้ว <xliff:g id="NUMBER_0">%d</xliff:g> ครั้ง หากการพยายามไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง แท็บเล็ตจะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้อมูลทั้งหมดของผู้ใช้จะหายไป"</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"คุณพยายามปลดล็อกโทรศัพท์อย่างไม่ถูกต้องแล้ว <xliff:g id="NUMBER_0">%d</xliff:g> ครั้ง หากการพยายามไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง โทรศัพท์จะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้อมูลทั้งหมดของผู้ใช้จะหายไป"</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"คุณพยายามปลดล็อกแท็บเล็ตอย่างไม่ถูกต้องแล้ว <xliff:g id="NUMBER">%d</xliff:g> ครั้ง ขณะนี้แท็บเล็ตจะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน"</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"คุณพยายามปลดล็อกโทรศัพท์อย่างไม่ถูกต้องแล้ว <xliff:g id="NUMBER">%d</xliff:g> ครั้ง ขณะนี้โทรศัพท์จะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน"</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"ลองใหม่อีกครั้งใน <xliff:g id="NUMBER">%d</xliff:g> วินาที"</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"ลืมรูปแบบหรือ"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"ปลดล็อกบัญชี"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"อนุญาตให้แอปพลิเคชันเพิ่มข้อความลงในกล่องข้อความเสียงของคุณ"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"แก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"อนุญาตให้แอปพลิเคชันแก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้อนุญาตให้ส่งข้อมูลตำแหน่งไปที่เว็บไซต์อื่นได้โดยพลการ"</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ยืนยันแพคเกจ"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"อนุญาตให้แอปพลิเคชันยืนยันว่าแพคเกจสามารถติดตั้งได้หรือไม่"</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"เชื่อมโยงกับการยืนยันแพคเกจ"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"อนุญาตให้ผู้ใช้ส่งคำขอให้มีการยืนยันแพคเกจ ไม่จำเป็นสำหรับแอปพลิเคชันโดยทั่วไป"</string>
<string name="save_password_message" msgid="767344687139195790">"คุณต้องการให้เบราว์เซอร์จำรหัสผ่านนี้หรือไม่"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"ยังไม่ใช้งานขณะนี้"</string>
<string name="save_password_remember" msgid="6491879678996749466">"จำไว้"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"ลบ"</string>
<string name="search_go" msgid="8298016669822141719">"ค้นหา"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"ค้นหา"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"คำค้นหา"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"ล้างข้อความค้นหา"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"ส่งข้อความค้นหา"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"ค้นหาด้วยเสียง"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 เดือนที่ผ่านมา"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ก่อน 1 เดือนที่แล้ว"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"ตัด"</string>
<string name="copy" msgid="2681946229533511987">"คัดลอก"</string>
<string name="paste" msgid="5629880836805036433">"วาง"</string>
- <string name="replace" msgid="8333608224471746584">"แทนที่"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"แทนที่"</string>
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"การเลือกข้อความ"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"เลือกแอปพลิเคชันสำหรับอุปกรณ์ USB"</string>
<string name="noApplications" msgid="1691104391758345586">"ไม่มีแอปพลิเคชันใดทำงานนี้ได้"</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"ขออภัย <xliff:g id="APPLICATION">%1$s</xliff:g> หยุดการทำงานแล้ว"</string>
+ <string name="aerr_process" msgid="4507058997035697579">"ขออภัย กระบวนการ <xliff:g id="PROCESS">%1$s</xliff:g> หยุดการทำงานแล้ว"</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> ไม่ตอบสนอง"\n\n"คุณต้องการปิดหรือไม่"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"กิจกรรม <xliff:g id="ACTIVITY">%1$s</xliff:g> ไม่ตอบสนอง"\n\n"คุณต้องการปิดหรือไม่"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"เปิดใช้งานอีกครั้งด้วยการไปที่การตั้งค่า &gt; แอปพลิเคชัน &gt; จัดการแอปพลิเคชัน"</string>
<string name="smv_application" msgid="295583804361236288">"แอปพลิเคชัน <xliff:g id="APPLICATION">%1$s</xliff:g> (กระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g>) ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
<string name="smv_process" msgid="5120397012047462446">"กระบวนการ <xliff:g id="PROCESS">%1$s</xliff:g> ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android กำลังอัปเกรด..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"กำลังเพิ่มประสิทธิภาพแอปพลิเคชัน <xliff:g id="NUMBER_0">%1$d</xliff:g> จาก <xliff:g id="NUMBER_1">%2$d</xliff:g> รายการ"</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"กำลังเริ่มแอปพลิเคชัน"</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"เสร็จสิ้นการบูต"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> กำลังทำงาน"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"เลือกเพื่อสลับแอปพลิเคชัน"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"สลับแอปพลิเคชันหรือไม่"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"ระดับเสียงปลุก"</string>
<string name="volume_notification" msgid="2422265656744276715">"ระดับเสียงของการแจ้งเตือน"</string>
<string name="volume_unknown" msgid="1400219669770445902">"ระดับเสียง"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"ระดับเสียงบลูทูธ แตะเพื่อเปลี่ยนเป็นปิดเสียง"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"ระดับเสียงเรียกเข้า แตะเพื่อเปลี่ยนเป็นปิดเสียง"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"ระดับเสียงขณะโทร แตะเพื่อเปลี่ยนเป็นปิดเสียง"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"ระดับเสียงสื่อ แตะเพื่อเปลี่ยนเป็นปิดเสียง"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"ระดับเสียงการแจ้งเตือน แตะเพื่อเปลี่ยนเป็นปิดเสียง"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"ปริมาณของบลูทูธ"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"ระดับเสียงเรียกเข้า"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"ปริมาณการโทร"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"ระดับเสียงของสื่อ"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"ระดับเสียงของการแจ้งเตือน"</string>
<string name="ringtone_default" msgid="3789758980357696936">"เสียงเรียกเข้าเริ่มต้น"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"เสียงเรียกเข้าเริ่มต้น (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"ปิดเสียง"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"มีสัญญาณการเชื่อมต่ออินเทอร์เน็ตที่ไม่ดี"</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"เริ่มการทำงาน Wi-Fi Direct ซึ่งจะเป็นการปิดการทำงาน Wi-Fi ไคลเอ็นต์/ฮอตสปอต"</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"ไม่สามารถเริ่ม Wi-Fi Direct ได้"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"ไม่สามารถเริ่ม Wi-Fi Direct ได้"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"คำขอการตั้งค่าการเชื่อมต่อ Wi-Fi Direct จาก <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> คลิก \"ตกลง\" เพื่อยอมรับ"</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"คำขอการตั้งค่าการเชื่อมต่อ Wi-Fi Direct จาก <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> ป้อน PIN เพื่อดำเนินการต่อ"</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"ต้องป้อน PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> บนอุปกรณ์เพียร์ <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> เพื่อให้การตั้งค่าการเชื่อมต่อดำเนินการต่อ"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"ตกลง"</string>
<string name="sms_control_no" msgid="1715320703137199869">"ยกเลิก"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"นำซิมการ์ดออกแล้ว"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"ไม่สามารถใช้เครือข่ายมือถือได้จนกว่าคุณจะเปลี่ยนซิมการ์ด"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"เครือข่ายมือถือจะไม่สามารถใช้งานได้จนกว่าคุณจะรีสตาร์ทโดยใส่ซิมการ์ดที่ถูกต้องแล้ว"</string>
<string name="sim_done_button" msgid="827949989369963775">"เสร็จสิ้น"</string>
<string name="sim_added_title" msgid="3719670512889674693">"เพิ่มซิมการ์ดแล้ว"</string>
<string name="sim_added_message" msgid="1209265974048554242">"คุณต้องรีสตาร์ทอุปกรณ์ของคุณเพื่อเข้าถึงเครือข่ายมือถือ"</string>
@@ -986,12 +981,12 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"พบปัญหาในการปิดที่เก็บข้อมูล USB ตรวจสอบให้แน่ใจว่าคุณได้ยกเลิกการต่อเชื่อมโฮสต์ USB แล้ว จากนั้นลองใหม่อีกครั้ง"</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"เปิดที่เก็บข้อมูล USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"หากคุณเปิดที่จัดเก็บข้อมูล USB แอปพลิเคชันบางอย่างที่คุณใช้อยู่จะหยุดและอาจใช้งานไม่ได้จนกว่าคุณจะปิดที่จัดเก็บข้อมูล USB"</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"การปฏิบัติงานของ USB ล้มเหลว"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"การทำงานของ USB ไม่สำเร็จ"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ตกลง"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"เชื่อมต่อเป็นอุปกรณ์สื่อ"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"เชื่อมต่อเป็นกล้องถ่ายรูป"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"เชื่อมต่อเป็นตัวติดตั้ง"</string>
- <string name="usb_accessory_notification_title" msgid="7848236974087653666">"เชื่อมต่อกับอุปกรณ์ USB"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"เชื่อมต่อกับอุปกรณ์เสริม USB แล้ว"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"แตะสำหรับตัวเลือก USB อื่นๆ"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"ฟอร์แมตที่เก็บข้อมูล USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"ฟอร์แมตการ์ด SD"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"กำลังยกเลิกการต่อเชื่อมการ์ด SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"กำลังลบที่เก็บข้อมูล USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"กำลังลบการ์ด SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"ลบที่เก็บข้อมูล USB ไม่สำเร็จ"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"ลบที่เก็บข้อมูล USB ไม่สำเร็จ"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"ไม่สามารถลบที่เก็บข้อมูล USB"</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"ไม่สามารถลบการ์ด SD"</string>
<string name="media_bad_removal" msgid="7960864061016603281">"การ์ด SD ถูกนำออกก่อนที่จะยกเลิกการต่อเชื่อม"</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"กำลังตรวจสอบที่เก็บข้อมูล USB อยู่ในขณะนี้"</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"กำลังตรวจสอบการ์ด SD อยู่ในขณะนี้"</string>
@@ -1112,13 +1107,21 @@
<string name="number_picker_increment_button" msgid="4830170763103463443">"การเพิ่ม"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"การลด"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"เลือกไว้"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"ไม่ได้เลือก"</string>
- <string name="radiobutton_selected" msgid="8603599808486581511">"เลือกไว้"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"ไม่ได้ตรวจสอบ"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"เลือกแล้ว"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"ไม่ได้เลือก"</string>
<string name="switch_on" msgid="551417728476977311">"เปิด"</string>
<string name="switch_off" msgid="7249798614327155088">"ปิด"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"กดแล้ว"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"ไม่ได้กด"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ยกเลิก"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ลบ"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"เสร็จสิ้น"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"เปลี่ยนโหมด"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ป้อน"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"แป้นพิมพ์ จำเป็นต้องใช้ชุดหูฟังในการฟังเสียงแป้นพิมพ์ขณะพิมพ์รหัสผ่าน"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"นำทางขึ้น"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ตัวเลือกเพิ่มเติม"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"ปิดใช้งานข้อมูล 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"ปิดใช้งานข้อมูล 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"ปิดใช้งานข้อมูลมือถือ"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"แตะเพื่อเปิดใช้งาน"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"เกินขีดจำกัดข้อมูล 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"เกินขีดจำกัดของข้อมูล 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"เกินจำนวนสูงสุดของข้อมูลมือถือ"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> เกินขีดจำกัดที่ระบุไว้"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"แตะเพื่อเปิดใช้งาน"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"เกินขีดจำกัดข้อมูล 2G - 3G"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"เกินขีดจำกัดของข้อมูล 4G"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"เกินขีดจำกัดข้อมูลมือถือ"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> เกินขีดจำกัดที่ระบุไว้"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"จำกัดข้อมูลแบ็กกราวด์"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"แตะเพื่อนำข้อจำกัดออก"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"ใบรับรองความปลอดภัย"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"ใบรับรองนี้ใช้งานได้"</string>
<string name="issued_to" msgid="454239480274921032">"ออกให้แก่:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"เลือกกิจกรรม"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"แบ่งปันกับ..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"ล็อกอุปกรณ์อยู่"</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 7e2cf21..63228d6 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Hindi tagumpay ang pagpapatotoo."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Hindi matagumpay ang pagpapatotoo sa pamamagitan ng proxy server."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Hindi matagumpay ang koneksyon sa server."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Nabigong makipag-ugnay ang server. Subukang muli sa ibang pagkakataon."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Hindi magawang makipag-ugnay ng server. Subukang muli sa ibang pagkakataon."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Na-time out ang koneksyon sa server."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Naglalaman ang pahinang ito ng masyadong maraming pag-redirect ng server."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Hindi suportado ang protocol."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Pinapayagan ang application na mabawi at iproseso ang mga mensahe ng emergency broadcast. Available lang ang pahintulot na ito sa mga system application."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"magpadala ng mga SMS na mensahe"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Pinapayagan ang application na magpadala ng mga SMS na mensahe. Maaaring mapagastos ka ng mga nakakahamak na application sa pamamagitan ng pagpapadala ng mga mensahe nang wala ng iyong kumpirmasyon."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"magpadala ng mga SMS na mensahe nang walang pagkumpirma"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Pinapayagan ang application na magpadala ng mga SMS na mensahe. Maaari kang magastusan ng pera ng mga nakakahamak na application sa pagpapadala ng mga mensahe nang wala ang iyong pagkumpirma."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"magbasa ng SMS o MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Pinapayagan ang application na basahin ang mga mensaheng SMS na nakaimbak sa iyong tablet o SIM card. Maaaring basahin ng mga nakapanghahamak na application ang iyong mga mensahe."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Pinapayagan ang application na basahin ang mga SMS na mensaheng nakaimbak sa iyong telepono o SIM card. Maaaring basahin ng mga nakakahamak na application ang iyong mga kumpidensyal na mensahe."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"sumulat ng data ng pakikipag-ugnay"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Pinapayagan ang application na baguhin ang data ng contact (address) na nakaimbak sa iyong tablet. Maaari itong gamitin ng mga nakapanghahamak na application upang burahin o baguhin ang data ng iyong contact."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Pinapayagan ang isang application na baguhin ang data ng pakikipag-ugny (address) na nakaimbak sa iyong telepono. Magagamit ito ng mga nakakahamak na application upang burahin o baguhin ang iyong data ng pakikipag-ugnay."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"basahin ang data ng profile"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Pinapayagan ang isang application upang basahin ang lahat ng iyong mga personal na impormasyon sa profile. Magagamit ito ng mga kahina-hinalang application upang makilala ka at ipadala ang iyong personal na impormasyon sa iba pang tao."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"magsulat ng data ng profile"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Pinapayagan ang isang application upang baguhin ang iyong personal na impormasyon sa profile. Magagamit ito ng mga kahina-hinalang application upang burahin o baguhin ang iyong data ng profile."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"basahin ang iyong data ng profile"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Pinapayagan ang application na bumasa ng personal na impormasyon ng profile na nakaimbak sa iyong device, tulad ng iyong pangalan at impormasyon ng contact. Nangangahulugan ito na makikilala ka ng application at maipapadala ang iyong impormasyon ng profile sa iba."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"i-write sa iyong data ng profile"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Pinapayagan ang application na baguhin o magdagdag sa personal na impormasyon ng profile na nakaimbak sa iyong device, tulad ng iyong pangalan at impormasyon ng contact. Nangangahulugan ito na makikilala ka ng iba pang mga application at maipapadala ang iyong impormasyon ng profile sa iba."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"magbasa ng mga kaganapan sa kalendaryo kasama ang kumpedensyal na impormasyon"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Pinapayagan ang isang application na basahin ang lahat ng kaganapan sa kalendaryong naka-imbak sa iyong tablet, kasama ang mga nasa kaibigan o katrabaho. Ang isang nakapanghahamak na application na may ganitong pahintulot ay maaaring kumuha ng personal na impormasyon mula sa mga kalendaryong ito nang hindi nalalaman ng mga may-ari."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Pinapayagan ang isang application na basahin ang lahat ng kaganapan sa kalendaryong naka-imbak sa iyong telepono, kasama ang mga nasa kaibigan o katrabaho. Ang isang nakapanghahamak na application na may ganitong pahintulot ay maaaring kumuha ng personal na impormasyon mula sa mga kalendaryong ito nang hindi nalalaman ng mga may-ari."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Pinapayagan ang isang application na tingnan ang katayuan ng lahat ng mga network."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"ganap na access sa Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Pinapayagan ang isang application na lumikha ng mga socket ng network."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"isulat ang mga setting ng Pangalan ng Lugar ng Access"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Pinapayagan ang isang application na baguhin ang mga setting ng APN, gaya ng Proxy at Port ng anumang APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"baguhin/harangin ang mga setting ng network at trapiko"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Pinapayagan ang isang application na baguhin ang mga setting ng network at upang harangin at suriin ang lahat ng trapiko ng network, bilang halimbawa, upang baguhin ang proxy at port ng anumang APN. Ang mga nakakahamak na application ay maaaring sumubaybay, mag-redirect, o magbago ng mga packet ng network nang hindi mo nalalaman."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"baguhin ang pagkakakonekta ng network"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Pinapayagan ang isang application na baguhin ang katayuan ng pagkakakonekta ng network."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Baguhin ang pinagsamang pagkakakonekta"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Naipasok mo nang hindi tama ang iyong PIN ng <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Pakisubukang muli pagkalipas ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Naiguhit mo nang hindi tama ang iyong pattern sa pag-unlock ng <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagsubok, hihilingin sa iyong i-unlock ang iyong tablet gamit ang iyong pag-sign-in sa Google."\n\n" Pakisubukang muli pagkalipas ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Naguhit mo nang mali ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> higit pang hindi matagumpay na pagtatangka, hihingin sa iyong i-unlock ang iyong telepono gamit ang iyong pag-sign-in sa Google."\n\n" Pakisubukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Mali mong tinangkang ma-unlock ang tablet nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang mga hindi matagumpay na pagtatangka, mare-reset ang tablet sa factory default at mawawala ang lahat ng data ng user."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Mali mong tinangkang ma-unlock ang telepono nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang mga hindi matagumpay na pagtatangka, mare-reset ang telepono sa factory default at mawawala ang lahat ng data ng user."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Mali mong tinangkang ma-unlock ang tablet nang <xliff:g id="NUMBER">%d</xliff:g> (na) beses. Mare-reset na ngayon ang tablet sa factory default."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Mali mong tinangkang ma-unlock ang telepono nang <xliff:g id="NUMBER">%d</xliff:g> (na) beses. Mare-reset na ang telepono sa factory default."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Subukang muli sa loob ng <xliff:g id="NUMBER">%d</xliff:g> (na) segundo."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Nakalimutan ang pattern?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Pag-unlock sa account"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Binibigyang-daan ang application na magdagdag ng mga mensahe sa iyong inbox ng voicemail."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Baguhin ang mga pahintulot ng Browser geolocation"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Pinapayagan ang isang application na baguhin ang mga pahintulot sa geolocation ng Browser. Magagamit ito ng mga nakakahamak na application upang payagan ang pagpapadala ng impormasyon ng lokasyon sa mga hindi saklaw na web site."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"i-verify ang mga package"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Binibigyang-daan ang application na i-verify kung ang isang package ay maaaring i-install."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"sumailalim sa taga-verify ng package"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Nagbibigay-daan sa may-ari na gumawa ng mga kahilingan ng mga taga-verify ng package. Hindi kailanman dapat na kailanganin para sa karaniwang mga application."</string>
<string name="save_password_message" msgid="767344687139195790">"Gusto mo bang tandaan ng browser ang password na ito?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Hindi ngayon"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Tandaan"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ipasok"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"tanggalin"</string>
<string name="search_go" msgid="8298016669822141719">"Paghahanap"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Paghahanap"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Query sa paghahanap"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"I-clear ang query"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Isumite ang query"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Paghahanap gamit ang boses"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 buwan ang nakalipas"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Bago ang nakalipas na 1 buwan"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"I-cut"</string>
<string name="copy" msgid="2681946229533511987">"Kopyahin"</string>
<string name="paste" msgid="5629880836805036433">"I-paste"</string>
- <string name="replace" msgid="8333608224471746584">"Palitan"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Palitan"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopyahin ang URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pumili ng teksto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pagpili ng teksto"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Pumili ng application para sa USB device"</string>
<string name="noApplications" msgid="1691104391758345586">"Walang mga application ang makakapagsagawa ng pagkilos na ito."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Sa kasamaang palad, huminto ang <xliff:g id="APPLICATION">%1$s</xliff:g>."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Sa kasamaang palad, nahinto ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g>."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Hindi tumutugon ang <xliff:g id="APPLICATION">%2$s</xliff:g>."\n\n"Gusto mo ba itong isara?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Hindi tumutugon ang aktibidad na <xliff:g id="ACTIVITY">%1$s</xliff:g>."\n\n"Gusto mo ba itong isara?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Muling paganahin ang Mga Setting &gt; Mga Application &gt; Pamahalaan ang mga application."</string>
<string name="smv_application" msgid="295583804361236288">"Ang application na <xliff:g id="APPLICATION">%1$s</xliff:g> (prosesong <xliff:g id="PROCESS">%2$s</xliff:g>) ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g> ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Nag-a-upgrade ang Android..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Pag-optimize ng application <xliff:g id="NUMBER_0">%1$d</xliff:g> ng <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Sinisimulan ang mga application."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Pagtatapos ng pag-boot."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Tumatakbo ang <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Piliin upang lumipat ng application"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Maglipat ng mga application?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Lakas ng tunog ng alarm"</string>
<string name="volume_notification" msgid="2422265656744276715">"Lakas ng tunog ng notification"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Lakas ng Tunog"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume ng Bluetooth. Tapikin upang lumipat sa mode na tahimik."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume ng ringtone. Tapikin upang lumipat sa mode na tahimik."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume ng tawag. Tapikin upang lumipat sa mode na tahimik."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume ng media. Tapikin upang lumipat sa mode na tahimik."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume ng notification. Tapikin upang lumipat sa mode na tahimik."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume ng bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume ng ringtone"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume ng tawag"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume ng media"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume ng notification"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Default na ringtone"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Default na ringtone (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Tahimik"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ay may mahinang koneksyon sa internet."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Simulan ang pagpapatakbo ng Wi-Fi Direct. I-o-off nito ang pagpapatakbo ng client/hotspot ng Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nabigong simulan ang Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Hindi masimulan ang Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Kahilingan sa pag-setup ng koneksyon ng Wi-Fi Direct mula sa <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. I-click ang OK upang tanggapin."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Kahilingan sa pag-setup ng koneksyon ng Wi-Fi Direct mula sa <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ilagay ang pin upang magpatuloy."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Kailangang mailagay ang pin ng WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sa device ng kaibigan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para magpatuloy ang pag-setup ng koneksyon"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Kanselahin"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Naalis ang SIM card"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Hindi magiging available ang mobile network hanggang palitan mo ang SIM card."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Hindi magiging available ang mobile network hanggang mag-restart ka gamit ang isang may-bisang SIM card"</string>
<string name="sim_done_button" msgid="827949989369963775">"Tapos na"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Idinagdag ang SIM card"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Dapat mong i-restart ang iyong device upang ma-access ang mobile network."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Nagkaproblema sa pag-off ng USB storage. Tingnan upang matiyak na na-unmount mo ang host ng USB, pagkatapos ay subukan muli."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"I-on ang USB storage"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Kung io-on mo ang USB storage, titigil ang ilang application na ginagamit mo at maaaring maging hindi available hanggang sa i-off mo ang USB storage."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Nabigo ang pagpapatakbo ng USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Hindi matagumpay ang USB operation"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Nakakonekta bilang isang media device"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Nakakonekta bilang isang camera"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Ina-unmount ang SD card..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Binubura ang imbakan na USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Binubura ang SD card..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Nabigong burahin ang imbakan na USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Nabigong burahin ang imbakan na USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Hindi mabura ang USB storage."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Hindi mabura ang SD card."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Inalis ang SD card bago na-unmount."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Kasalukuyang sinusuri ang imbakan na USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Kasalukuyang sinusuri ang SD card."</string>
@@ -1114,11 +1109,19 @@
<string name="checkbox_checked" msgid="7222044992652711167">"nilagyan ng check"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"hindi nilagyan ng check"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"pinili"</string>
- <string name="radiobutton_not_selected" msgid="2908760184307722393">"hindi napili"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"Hindi pinili"</string>
<string name="switch_on" msgid="551417728476977311">"naka-on"</string>
<string name="switch_off" msgid="7249798614327155088">"naka-off"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"pinindot"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"hindi pinindot"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Kanselahin"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Tanggalin"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Tapos na"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Pagbabago ng Mode"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Key. Kinakailangan ng headset upang marinig ang mga key habang nata-type ng password."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Magnabiga pataas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Higit pang mga pagpipilian"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Di pinagana ang data ng 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Di pinagana ang data ng 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Di pinagana ang data ng mobile"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tapikin upang paganahin"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Lumampas sa limitasyon ng data na 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Lumampas sa limitasyon ng data na 4G"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Lumampas sa limitasyon ng data ng mobile"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"lampas ng <xliff:g id="SIZE">%s</xliff:g> sa tinukoy na limitasyon"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Pindutin upang paganahin"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"lumampas sa 2G-3G na limitasyon ng data"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Lumampas sa 4G na limitasyon ng data"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Lumampas sa limitasyon ng data sa mobile"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"Ang <xliff:g id="SIZE">%s</xliff:g> ay lumalampas sa tinukoy na limitasyon"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Pinaghihigpitan ang data ng background"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Pindutin upang alisin ang paghihigpit"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificate ng seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"May-bisa ang certificate na ito."</string>
<string name="issued_to" msgid="454239480274921032">"Ibinigay kay:"</string>
@@ -1156,8 +1161,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 na fingerprint:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tingnan lahat..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pumili ng aktibidad"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Ibahagi sa..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Ibahagi kay..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Naka-lock ang device."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index bff19cf..33a893f 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Uygulamanın acil durum yayını mesajlarını alıp işlemesine izin verir. Bu izin yalnızca sistem uygulamaları için geçerlidir."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"SMS mesajları gönder"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Uygulamaların SMS mesajları göndermesine izin verir. Kötü amaçlı uygulamalar, onayınızı almadan mesaj göndererek size maliyet çıkarabilir."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"SMS mesajlarını onaysız gönder"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Uygulamaya, SMS mesajları gönderme izni verir. Kötü amaçlı uygulamalar, onayınızı almadan mesaj göndererek size maliyet çıkarabilir."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS veya MMS oku"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Uygulamaya, tabletinizde veya SIM kartta depolanan SMS mesajlarını okuma izni verir. Kötü amaçlı uygulamalar gizli mesajlarınızı okuyabilir."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Uygulamaların, telefonunuzda veya SIM kartta depolanan SMS mesajlarını okumasına izin verir. Kötü amaçlı uygulamalar gizli mesajlarınızı okuyabilir."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"kişi verileri yaz"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Uygulamaya, tabletinizde depolanan kişi (adres) verilerini değiştirme izni verir. Kötü amaçlı uygulamalar bu işlevi kişi verilerinizi silmek veya değiştirmek için kullanabilir."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Uygulamaların telefonunuzda depolanan kişi (adres) verilerini değiştirmesine izin verir. Kötü amaçlı uygulamalar bu işlevi kişi verilerinizi silmek veya değiştirmek için kullanabilir."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"profil verilerini oku"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Uygulamaya tüm kişisel profil bilgilerinizi okuma izni verir. Kötü amaçlı uygulamalar bunu sizin kimliğinizi belirlemek ve kişisel bilgilerinizi başkalarına göndermek için kullanabilir."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"profil verilerini yaz"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Uygulamaya kişisel profil bilgilerinizi değiştirme izni verir. Kötü amaçlı uygulamalar bu işlevi profil verilerinizi silmek veya değiştirmek için kullanabilir."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"profil verilerimi oku"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Uygulamaya, adınız ve iletişim bilgileriniz gibi, cihazınızda saklı kişisel profil bilgilerinizi okuma izni verir. Bu, uygulamanın sizi tanımlayabilmesi ve profil bilgilerinizi başkalarına gönderebilmesi anlamına gelir."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"profil verilerime yaz"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Uygulamaya, adınız ve iletişim bilgileriniz gibi, cihazınızda saklı kişisel profil bilgilerinizi değiştirme veya ekleme izni verir. Bu, diğer uygulamaların sizi tanımlayabileceği ve profil bilgilerinizi başkalarına gönderebileceği anlamına gelir."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"takvim etkinliklerini ve gizli bilgileri oku"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Uygulamaya, tabletinizde saklı takvim etkinliklerini (özel veya iş arkadaşlarınızınkiler dahil) okuma izni verir. Kötü amaçlı bir uygulama bu izni kullanarak, sahibin bilgisi olmadan bu takvimlerden kişisel bilgileri alabilir."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Uygulamaya, telefonunuzda saklı takvim etkinliklerini (özel veya iş arkadaşlarınızınkiler dahil) okuma izni verir. Kötü amaçlı bir uygulama bu izni kullanarak, sahibin bilgisi olmadan bu takvimlerden kişisel bilgileri alabilir."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Uygulamaların, tüm ağların durumunu görmesine izin verir."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"tam İnternet erişimi"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Uygulamaların ağ yuvaları oluşturmasına izin verir."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"Erişim Noktası Adı ayarlarını yaz"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Uygulamaların herhangi bir APN\'nin Proxy ve Bağlantı Noktası gibi APN ayarlarını değiştirmesine izin verir."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"ağ ayarlarını ve trafiği değiştir/müdahale et"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Uygulamaya, ağ ayarlarını değiştirme ve örneğin, herhangi bir APN\'nin proxy ve bağlantı noktasını değiştirmek amacıyla, tüm ağ trafiğine müdahale etme ve trafiği inceleme izni verir. Kötü amaçlı uygulamalar sizin bilginiz olmadan ağ paketlerini izleyebilir, yönlendirebilir veya değiştirebilir."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"ağ bağlantısını değiştir"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Bir uygulamanın ağ bağlantı durumunu değiştirmesine izin verir."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Kullanılan bağlantıyı değiştir"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"PIN\'inizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış girdiniz. "\n\n"Lütfen <xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde yeniden deneyin."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra tabletinizi Google oturum açma bilgilerinizi kullanarak açmanız istenir."\n\n" Lütfen <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde yeniden deneyin."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra telefonunuzu Google oturum açma bilgilerinizi kullanarak açmanız istenir."\n\n" Lütfen <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde yeniden deneyin."</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> saniye içinde yeniden deneyin."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Deseni unuttunuz mu?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Hesap kilidini açma"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Uygulamanın sesli mesaj gelen kutunuza mesaj eklemesine olanak verir."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Tarayıcı\'nın coğrafi konum izinlerini değiştir"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Bir uygulamanın, Tarayıcı\'nın coğrafi konum izinlerini değiştirmesine izin verir. Kötü amaçlı uygulamalar, bu özelliği konum bilgilerini rastgele web sitelerine göndermek için kullanabilir."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"paketleri doğrula"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Uygulamaya, bir paketin yüklenebilir olduğunu doğrulama izni verir."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"paket doğrulayıcıya bağlan"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"İzin sahibinin, paket doğrulayıcı isteklerinde bulunmasına izin verir. Normal uygulamalar için asla gerekli olmaz."</string>
<string name="save_password_message" msgid="767344687139195790">"Tarayıcının bu şifreyi anımsamasını istiyor musunuz?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Şimdi değil"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Anımsa"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"gir"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"sil"</string>
<string name="search_go" msgid="8298016669822141719">"Ara"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Ara"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Arama sorgusu"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Sorguyu temizle"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Sorguyu gönder"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Sesli arama"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ay önce"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 ay önce"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"Kes"</string>
<string name="copy" msgid="2681946229533511987">"Kopyala"</string>
<string name="paste" msgid="5629880836805036433">"Yapıştır"</string>
- <string name="replace" msgid="8333608224471746584">"Değiştir"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Değiştir"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL\'yi kopyala"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Metin seç..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Metin seçimi"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Bunu Ayarlar &gt; Uygulamalar &gt; Uygulamaları yönet bölümünden yeniden etkinleştirebilirsiniz."</string>
<string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışıyor"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Uygulama değiştirmeyi seçin"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Uygulamaların arasında geçiş yapılsın mı?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Alarm ses düzeyi"</string>
<string name="volume_notification" msgid="2422265656744276715">"Bildirim ses düzeyi"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Ses"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth sesi ayarı. Sessiz modu açıp kapatmak için dokunun."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zil sesi ayarı. Sessiz modu açıp kapatmak için dokunun."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Çağrı sesi ayarı. Sessiz modu açıp kapatmak için dokunun."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Medya ses ayarı. Sessiz modu açıp kapatmak için dokunun."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Bildirim sesi ayarı. Sessiz modu açıp kapatmak için dokunun."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth ses düzeyi"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zil sesi düzeyi"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Çağrı ses düzeyi"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Medya ses düzeyi"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Bildirim ses düzeyi"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Varsayılan zil sesi"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Varsayılan zil sesi (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Sessiz"</string>
@@ -955,8 +960,8 @@
<string name="sms_control_message" msgid="1289331457999236205">"Çok sayıda SMS mesajı gönderiliyor. Devam etmek için \"Tamam\"ı, göndermeyi durdurmak için \"İptal\"i seçin."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Tamam"</string>
<string name="sms_control_no" msgid="1715320703137199869">"İptal"</string>
- <string name="sim_removed_title" msgid="6227712319223226185">"SIM card çıkarıldı"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"SIM kartı değiştirinceye kadar mobil ağ kullanılamayacak."</string>
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM kart çıkarıldı"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Geçerli bir SIM kart yerleştirilmiş olarak yeniden başlatana kadar mobil ağ kullanılamayacak."</string>
<string name="sim_done_button" msgid="827949989369963775">"Tamamlandı"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM kart eklendi"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Mobil ağa erişmek için cihazınızı yeniden başlatmanız gerekir."</string>
@@ -1119,6 +1124,22 @@
<string name="switch_off" msgid="7249798614327155088">"kapalı"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"basıldı"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"basılmadı"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Yukarı git"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Diğer seçenekler"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G verileri devre dışı"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G verileri devre dışı"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil veriler devre dışı"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"etkinleştirmek içn hafifçe vurun"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G veri limiti aşıldı"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G veri limiti aşıldı"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobil veri limiti aşıldı"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> belirlenen limitin üzerinde"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
@@ -1156,7 +1181,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 parmak izi:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tümünü göster..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Etkinlik seçin"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Şu kişilerle paylaş:"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Şununla paylaş..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilitli."</string>
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 8adeb05..de40022 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Автентифікація не вдалася."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Автентифікація через проксі-сервер не вдалася."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Не вдалося з\'єднатися із сервером."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Не вдалося зв\'язатися із сервером. Спробуйте пізніше."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Немає зв’язку із сервером. Повторіть спробу пізніше."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Час підключення до сервера минув."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Стор. містить забагато переадресацій сервером."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Протокол не підтримується."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Дозволяє програмі отримувати й обробляти повідомлення екстрених служб. Цей дозвіл доступний лише для системних програм."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"надсил. SMS повідом."</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Дозволяє програмі надсил. SMS повідомл. Шкідливі програми можуть спричин. збитки, надсилаючи повідомлення без вашого підтвердження."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"надсилати SMS-повідомлення без підтвердження"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Дозволяє програмі надсилати SMS повідомлення. Шкідливі програми можуть надсилати повідомлення без вашого підтвердження, заставляючи вас платити."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"читати SMS або MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Дозволяє програмі читати SMS повідомлення, збережені в пристрої чи SIM-карті. Шкідливі програми можуть читати ваші конфіденц. повідомл."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Дозволяє програмі зчитувати SMS повідомлення, збереж. у вашому тел. чи SIM-карті. Шкідливі прогр. можуть зчит. ваші конфіденційні повід."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"запис. контактні дані"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Дозволяє програмі змінювати контактні дані (адреси), збереж. в пристрої. Шкідливі програми можуть використ. це для видалення чи зміни ваших контактних даних."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Дозволяє програмі змінювати контактні дані (адресу), збереж. в телефоні. Шкідливі програми можуть використ. це для видалення чи зміни ваших контактних даних."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"читання даних профілю"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Дозволяє програмі читати всю особисту інформацію профілю. Шкідливі програми можуть використовувати це для вашої ідентифікації та надсилання особистої інформації іншим людям."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"записувати дані профілю"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Дозволяє програмі змінювати особисту інформацію профілю. Шкідливі програми можуть використовувати це для видалення чи зміни даних вашого профілю."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"читати дані вашого профілю"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Дозволяє програмі читати особисту інформацію профілю, збережену на вашому пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що така програма може ідентифікувати вашу особу та надсилати інформацію вашого профілю іншим."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"записувати в дані профілю"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Дозволяє програмі змінювати чи додавати особисту інформацію профілю, збережену на вашому пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що інші програми можуть ідентифікувати вашу особу та надсилати інформацію вашого профілю іншим."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"читати події календаря, а також конфіденційну інформацію"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Дозволяє програмі читати всі події календаря, збережені в планшетному ПК, включно з подіями друзів або співробітників. Шкідлива програма з таким дозволом може отримувати особисту інформацію з цих календарів без відома власників."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Дозволяє програмі читати всі події календаря, збережені в телефоні, включно з подіями друзів або співробітників. Шкідлива програма з таким дозволом може отримувати особисту інформацію з цих календарів без відома власників."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Дозволяє програмі переглядати стани всіх мереж."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"повний дост. до Інтерн."</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Дозволяє програмі створювати сокети мережі."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"запис. налашт. імені точки доступу"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Дозволяє програмі змінювати налаштування APN, такі як проксі чи порт будь-якого APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"змінювати/перехоплювати налаштування та трафік мережі"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Дозволяє програмі змінювати налаштування мережі, а також перехоплювати та перевіряти весь мережевий трафік, наприклад, змінювати проксі-сервер і порт будь-якої точки APN. Шкідливі програми можуть контролювати, переадресовувати чи змінювати мережеві пакети без вашого відома."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"змінюв. підключення до мережі"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Дозволяє програмі змінювати стан підключення до мережі."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Змінити з\'єднання прив\'язки"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Неправильно введено PIN-код стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Спробуйте ще через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Неправильно намал. ключ розблокування стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. Ваш пристрій потрібно буде розблок-ти за допомогою входу в Google після стількох додатк. неуспішних спроб: <xliff:g id="NUMBER_1">%d</xliff:g>."\n\n" Спробуйте ще через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Неправильно намал. ключ розблокування стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. Ваш телефон потрібно буде розблок-ти за допомогою входу в Google після стількох додатк. неуспішних спроб: <xliff:g id="NUMBER_1">%d</xliff:g>."\n\n" Спробуйте ще через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Кількість невдалих спроб розблокувати пристрій: <xliff:g id="NUMBER_0">%d</xliff:g>. Налаштування пристрою буде змінено на заводські за умовчанням, а всі дані користувача буде втрачено після ще стількох невдалих спроб: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER_0">%d</xliff:g>. Налаштування телефона буде змінено на заводські за умовчанням, а всі дані користувача буде втрачено після ще стількох невдалих спроб: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Кількість невдалих спроб розблокувати пристрій: <xliff:g id="NUMBER">%d</xliff:g>. Налаштування пристрою буде змінено на заводські за умовчанням."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER">%d</xliff:g>. Налаштування телефону буде змінено на заводські за умовчанням."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Спробуйте ще через <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забули ключ?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Обл. зап. розбл."</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Дозволяє програмі додавати повідомлення в папку \"Вхідні\" голосової пошти."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Змін. дозволи геогр. місцезн. перегладача"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Дозволяє програмі змін. дозволи географ. місцезн. переглядача. Шкідливі програми можуть використ. це, щоб дозволяти надсилати інф-ю про місцезн. випадковим веб-сайтам."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"перевіряти пакети"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Дозволяє програмі перевіряти, чи можливо встановити пакет."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"прив’язуватися до програми перевірки пакетів"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Дозволяє власникові робити запити на програми перевірки пакетів. Ніколи не застосовується для звичайних програм."</string>
<string name="save_password_message" msgid="767344687139195790">"Хочете, щоб переглядач запам\'ятав цей пароль?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не зараз"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запам\'ятати"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"delete"</string>
<string name="search_go" msgid="8298016669822141719">"Пошук"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Пошук"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Пошуковий запит"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Очистити запит"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Наіслати запит"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Голосовий пошук"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 міс. тому"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Раніше 1 місяця тому"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Виріз."</string>
<string name="copy" msgid="2681946229533511987">"Копіюв."</string>
<string name="paste" msgid="5629880836805036433">"Вставити"</string>
- <string name="replace" msgid="8333608224471746584">"Замінити"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Замінити"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копіюв. URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Вибрати текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вибір тексту"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Виберіть програму для пристрою USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Жодна програма не може виконати цю дію."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"На жаль, програма <xliff:g id="APPLICATION">%1$s</xliff:g> припинила роботу."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"На жаль, процес <xliff:g id="PROCESS">%1$s</xliff:g> припинився."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"Програма <xliff:g id="APPLICATION">%2$s</xliff:g> не відповідає. "\n\n"Закрити її?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Дія <xliff:g id="ACTIVITY">%1$s</xliff:g> не відповідає."\n\n"Закінчити її?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Знову ввімкнути це в розділі Налаштування &gt; Програми &gt; Керування програмами."</string>
<string name="smv_application" msgid="295583804361236288">"Програма <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) порушила свою самозастосовну політику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> порушив свою самозастосовну політику StrictMode."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android оновлюється..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Оптимізація програми <xliff:g id="NUMBER_0">%1$d</xliff:g> з <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Запуск програм."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Завершення завантаження."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Працює <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Виберіть, щоб перейти до програми"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Переключ. між прогр.?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Гучн. сповіщ."</string>
<string name="volume_notification" msgid="2422265656744276715">"Гучність сповіщень"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Гучність"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Гучність Bluetooth. Торкніться, щоб перейти в беззвучний режим."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Гучність мелодії. Торкніться, щоб перейти в беззвучний режим."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Гучність сигналу виклику. Торкніться, щоб перейти в беззвучний режим."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Гучність мультимедіа. Торкніться, щоб перейти в беззвучний режим."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Гучність сповіщення. Торкніться, щоб перейти в беззвучний режим."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Гучність Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Гучність мелодії"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Гучність сигналу виклику"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Гучність медіа"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Гучність сповіщення"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Мелодія за умовч."</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Мелодія за умовч. (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Без звуку"</string>
@@ -945,10 +940,10 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"має погане з’єднання з Інтернетом."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Почати операцію Wi-Fi Direct. Це вимкне Wi-Fi-операцію клієнт/точка доступу."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Не вдалося запустити Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Не вдалося запустити Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Запит на налаштування з’єднання Wi-Fi Direct від пристрою <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Натисніть ОК, щоб прийняти."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Запит на налаштування з’єднання Wi-Fi Direct від пристрою <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Введіть PIN-код, щоб продовжити."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Щоб продовжити процес налаштування з’днання, потрібно ввести PIN-код WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на пристрої однорангової мережі <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Щоб продовжити процес налаштування з’єднання, потрібно ввести PIN-код WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на пристрої однорангової мережі <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Вставл-ня символу"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Невідома програма"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Надсил. SMS повідомлень"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Скасувати"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карту вилучено"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Мобільна мережа буде недоступною, поки ви не заміните SIM-карту."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Мобільна мережа буде недоступна, поки ви не здійсните перезапуск, вставивши дійсну SIM-карту."</string>
<string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM-карту додано"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Щоб отримати доступ до мобільної мережі, потрібно перезапустити пристрій."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Під час вимкнення носія USB виникла проблема. Перевірте, чи ви відключили USB-хост, після чого спробуйте знову."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Увімкнути носій USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Якщо ввімкнути носій USB, деякі програми, які викор., припинять свою роботу та можуть бути недоступними до вимкнення носія USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Помилка операції з USB"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Помилка операції з USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Під’єднано як носій"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Під’єднано як камеру"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Відключення карти SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Очищення носія USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Очищення карти SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Помилка очищення носія USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Помилка очищення носія USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Не вдалось очистити носій USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Не вдалось очистити карту SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Карту SD вилучено раніше ніж її було відключено."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Носій USB наразі перевіряється."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Карта SD наразі перевіряється."</string>
@@ -1119,6 +1114,14 @@
<string name="switch_off" msgid="7249798614327155088">"вимкн."</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"натиснуто"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"не натиснуто"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Скасувати"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Готово"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Зміна режиму"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Клавіша. Гарнітура має чути звук клавіш під час введення пароля."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вгору"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Інші варіанти"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Дані 2G–3G вимкнено"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Дані 4G вимкнено"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобільне передав. даних вимкнено"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"торкніться, щоб увімкнути"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Торкніться, щоб увімкнути"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Перевищено ліміт даних 2G–3G"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Перевищено ліміт даних 4G"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Перевищено ліміт мобільних даних"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> понад указаний ліміт."</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> понад указаний ліміт."</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Викор-ня фонових даних обмежено"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Торкн., щоб видалити обмеження"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Сертифікат безпеки"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Цей сертифікат дійсний."</string>
<string name="issued_to" msgid="454239480274921032">"Кому видано:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Вибрати дію"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Надіслати..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Пристрій заблоковано."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 30b7aad..60be266 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -113,7 +113,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"Xác thực không thành công."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Xác thực qua máy chủ proxy không thành công."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Kết nối đến máy chủ không thành công."</string>
- <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Máy chủ không thể liên lạc. Vui lòng thử lại sau."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"Máy chủ không thể kết nối. Hãy thử lại sau."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Kết nối đến máy chủ đã hết thời gian chờ."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Trang chứa quá nhiều chuyển hướng máy chủ."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Không hỗ trợ giao thức này."</string>
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Cho phép ứng dụng truy xuất và xử lý các thư phát khẩn cấp. Quyền này chỉ khả dụng đối với các ứng dụng hệ thống."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"gửi tin nhắn SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Cho phép ứng dụng gửi tin nhắn SMS. Các ứng dụng độc hại có thể khiến bạn tốn tiền bằng cách gửi tin nhắn mà không cần xác nhận của bạn."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"gửi tin nhắn SMS mà không cần xác nhận"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Cho phép ứng dụng gửi tin nhắn SMS. Các ứng dụng độc hại có thể khiến bạn tốn tiền bằng cách gửi tin nhắn mà không cần xác nhận của bạn."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"đọc SMS hoặc MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Cho phép ứng dụng đọc tin nhắn SMS được lưu trữ trên máy tính bảng hoặc thẻ SIM của bạn. Các ứng dụng độc hại có thể đọc tin nhắn bí mật của bạn."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Cho phép ứng dụng đọc tin nhắn SMS được lưu trữ trên điện thoại hoặc thẻ SIM của bạn. Các ứng dụng độc hại có thể đọc tin nhắn bí mật của bạn."</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"ghi dữ liệu liên hệ"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Cho phép ứng dụng sửa đổi dữ liệu (địa chỉ) liên hệ được lưu trữ trên máy tính bảng của bạn. Các ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu liên hệ của bạn."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Cho phép ứng dụng sửa đổi dữ liệu liên hệ (địa chỉ) được lưu trữ trên điện thoại của bạn. Các ứng dụng độc hại có thể sử dụng quyền này để xoá hoặc sửa đổi dữ liệu liên hệ của bạn."</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"đọc dữ liệu tiểu sử"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Cho phép ứng dụng đọc tất cả các thông tin tiểu sử cá nhân của bạn. Các ứng dụng độc hại có thể lợi dụng quyền này để nhận dạng bạn và gửi thông tin cá nhân của bạn cho người khác."</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"ghi dữ liệu tiểu sử"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Cho phép ứng dụng sửa đổi thông tin tiểu sử cá nhân của bạn. Các ứng dụng độc hại có thể lợi dụng quyền này để xóa hoặc sửa đổi dữ liệu tiểu sử của bạn."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"đọc d.liệu t.sử của bạn"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Cho phép ứng dụng đọc thông tin tiểu sử cá nhân được lưu trên thiết bị của bạn, ví dụ như tên và thông tin liên hệ của bạn. Điều này nghĩa là ứng dụng có thể nhận dạng bạn và gửi thông tin tiểu sử của bạn cho những người khác."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"ghi dữ liệu t.sử của bạn"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Cho phép ứng dụng thay đổi hoặc thêm vào thông tin tiểu sử cá nhân được lưu trữ trên thiết bị của bạn, ví dụ như tên và thông tin liên hệ của bạn. Điều này nghĩa là các ứng dụng khác có thể nhận dạng bạn và gửi thông tin tiểu sử của bạn cho những người khác."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"đọc các sự kiện lịch và thông tin bí mật"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Cho phép ứng dụng đọc tất cả các sự kiện lịch được lưu trữ trên máy tính bảng của bạn, bao gồm các sự kiện của bạn bè hoặc đồng nghiệp. Ứng dụng độc hại có quyền này có thể trích xuất thông tin cá nhân từ những lịch này mà chủ sở hữu không hề biết."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Cho phép ứng dụng đọc tất cả các sự kiện lịch được lưu trữ trên điện thoại của bạn, bao gồm các sự kiện của bạn bè hoặc đồng nghiệp. Ứng dụng độc hại có quyền này có thể trích xuất thông tin cá nhân từ những lịch này mà chủ sở hữu không hề biết."</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Cho phép ứng dụng xem trạng thái của tất cả các mạng."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"quyền truy cập Internet đầy đủ"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Cho phép ứng dụng tạo các cổng mạng."</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"ghi cài đặt Tên Điểm Truy cập"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Cho phép ứng dụng sửa đổi cài đặt APN, chẳng hạn như Proxy và Cổng của bất kỳ APN nào."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"thay đổi/chặn cài đặt và lưu lượng truy cập mạng"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Cho phép ứng dụng thay đổi cài đặt mạng đồng thời chặn và kiểm tra tất cả lưu lượng truy cập mạng, chẳng hạn như thay đổi proxy và cổng của mọi APN. Các ứng dụng độc hại có thể theo dõi, chuyển hướng hoặc sửa đổi các gói mạng mà bạn không biết."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"thay đổi kết nối mạng"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Cho phép ứng dụng thay đổi trạng thái kết nối mạng."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Thay đổi kết nối được dùng làm điểm truy cập Internet"</string>
@@ -673,6 +671,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Bạn đã nhập sai PIN <xliff:g id="NUMBER_0">%d</xliff:g> lần. "\n\n"Vui lòng thử lại trong <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Bạn đã vẽ không chính xác hình mở khóa của mình <xliff:g id="NUMBER_0">%d</xliff:g> lần. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công khác, bạn sẽ được yêu cầu mở khóa máy tính bảng bằng thông tin đăng nhập Google của mình."\n\n" Vui lòng thử lại trong <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Bạn đã vẽ không chính xác hình mở khoá của mình <xliff:g id="NUMBER_0">%d</xliff:g> lần. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công khác, bạn sẽ được yêu cầu mở khoá điện thoại bằng thông tin đăng nhập Google của mình."\n\n" Vui lòng thử lại trong <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Bạn đã mở khóa máy tính bảng không đúng cách <xliff:g id="NUMBER_0">%d</xliff:g> lần. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần mở khóa không thành công nữa, máy tính bảng sẽ được đặt lại về mặc định ban đầu và tất cả dữ liệu người dùng sẽ bị mất."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Bạn đã mở khóa điện thoại không đúng cách <xliff:g id="NUMBER_0">%d</xliff:g> lần. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần mở khóa không thành công nữa, điện thoại sẽ được đặt lại về mặc định ban đầu và tất cả dữ liệu người dùng sẽ bị mất."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Bạn đã mở khóa máy tính bảng không đúng cách <xliff:g id="NUMBER">%d</xliff:g> lần. Bây giờ, máy tính bảng sẽ được đặt lại về mặc định ban đầu."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Bạn đã mở khóa điện thoại không đúng cách <xliff:g id="NUMBER">%d</xliff:g> lần. Bây giờ, điện thoại sẽ được đặt lại về mặc định ban đầu."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Hãy thử lại sau <xliff:g id="NUMBER">%d</xliff:g> giây."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Đã quên hình?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Mở khoá tài khoản"</string>
@@ -730,14 +732,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Cho phép ứng dụng thêm thông báo vào hộp thư thoại đến của bạn."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Sửa đổi quyền về vị trí địa lý của Trình duyệt"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Cho phép ứng dụng sửa đổi các quyền về vị trí địa lý của Trình duyệt. Các ứng dụng độc hại có thể sử dụng quyền này để cho phép gửi thông tin vị trí đến trang web bất kỳ."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"xác minh gói"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Cho phép ứng dụng xác minh gói có thể cài đặt."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"liên kết với trình xác minh gói"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Cho phép chủ nhân yêu cầu trình xác minh gói. Không cần cho ứng dụng thông thường."</string>
<string name="save_password_message" msgid="767344687139195790">"Bạn có muốn trình duyệt nhớ mật khẩu này không?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Không phải bây giờ"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Nhớ"</string>
@@ -750,16 +748,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"nhập"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"xoá"</string>
<string name="search_go" msgid="8298016669822141719">"Tìm kiếm"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Tìm kiếm"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Truy vấn tìm kiếm"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Xóa truy vấn"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Gửi truy vấn"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Tìm kiếm bằng giọng nói"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 tháng trước"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Trước 1 tháng trước"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +854,7 @@
<string name="cut" msgid="3092569408438626261">"Cắt"</string>
<string name="copy" msgid="2681946229533511987">"Sao chép"</string>
<string name="paste" msgid="5629880836805036433">"Dán"</string>
- <string name="replace" msgid="8333608224471746584">"Thay thế"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Thay thế"</string>
<string name="copyUrl" msgid="2538211579596067402">"Sao chép URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chọn văn bản..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Lựa chọn văn bản"</string>
@@ -885,10 +878,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Chọn ứng dụng cho thiết bị USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Không ứng dụng nào có thể thực hiện tác vụ này."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Rất tiếc, <xliff:g id="APPLICATION">%1$s</xliff:g> đã dừng lại."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Rất tiếc, quá trình <xliff:g id="PROCESS">%1$s</xliff:g> đã dừng lại."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> không phản hồi."\n\n"Bạn có muốn đóng ứng dụng này không?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Hoạt động <xliff:g id="ACTIVITY">%1$s</xliff:g> không phản hồi."\n\n"Bạn có muốn đóng hoạt động này không?"</string>
@@ -905,6 +896,10 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"Bật lại hộp thoại này bằng Cài đặt &gt; Ứng dụng &gt; Quản lý ứng dụng."</string>
<string name="smv_application" msgid="295583804361236288">"Ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> (quá trình <xliff:g id="PROCESS">%2$s</xliff:g>) đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
<string name="smv_process" msgid="5120397012047462446">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android đang nâng cấp..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Đang tối ưu hóa ứng dụng <xliff:g id="NUMBER_0">%1$d</xliff:g> của <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Đang khởi động ứng dụng."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Hoàn tất khởi động."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> đang hoạt động"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Chọn để chuyển sang ứng dụng"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Chuyển ứng dụng?"</string>
@@ -923,11 +918,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Âm lượng báo thức"</string>
<string name="volume_notification" msgid="2422265656744276715">"Âm lượng thông báo"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Âm lượng"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Âm lượng Bluetooth. Bấm để chuyển sang chế độ im lặng."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Âm lượng nhạc chuông. Bấm để chuyển sang chế độ im lặng."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Âm lượng cuộc gọi. Bấm để chuyển sang chế độ im lặng."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Âm lượng phương tiện. Bấm để chuyển sang chế độ im lặng."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Âm lượng thông báo. Bấm để chuyển sang chế độ im lặng."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Âm lượng bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Âm lượng nhạc chuông"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Âm lượng cuộc gọi"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Âm lượng phương tiện"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Âm lượng thông báo"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Nhạc chuông mặc định"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nhạc chuông mặc định (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Im lặng"</string>
@@ -945,7 +940,7 @@
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"có kết nối internet kém."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Bắt đầu hoạt động Wi-Fi Direct. Điều này sẽ tắt hoạt động của ứng dụng khách/điểm phát sóng Wi-Fi."</string>
- <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Không thể khởi động Wi-Fi Direct"</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Không thể khởi động Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Yêu cầu thiết lập kết nối Wi-Fi Direct từ <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Nhấp vào OK để chấp nhận."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Yêu cầu thiết lập Wi-Fi Direct từ <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Nhập pin để tiếp tục."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Cần nhập pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> vào thiết bị ngang hàng <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> để tiếp tục thiết lập kết nối"</string>
@@ -956,7 +951,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Hủy"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Đã xóa thẻ SIM"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"Mạng di động sẽ không khả dụng cho đến khi bạn thay thế thẻ SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Mạng di động sẽ không khả dụng cho đến khi bạn khởi động lại với thẻ SIM hợp lệ được lắp."</string>
<string name="sim_done_button" msgid="827949989369963775">"Xong"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Đã thêm thẻ SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Bạn phải khởi động lại thiết bị của mình để truy cập mạng di động."</string>
@@ -986,7 +981,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Đã xảy ra sự cố khi tắt bộ lưu trữ USB. Hãy kiểm tra để đảm bảo bạn đã tháo trình điều khiển chủ USB rồi thử lại."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Bật bộ lưu trữ USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Nếu bạn bật bộ lưu trữ USB, một số ứng dụng bạn đang sử dụng sẽ dừng và có thể không khả dụng cho tới khi bạn tắt bộ lưu trữ USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Thao tác USB không thành công"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Thao tác USB không thành công"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Đã kết nối là thiết bị truyền thông"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Đã kết nối như máy ảnh"</string>
@@ -1086,8 +1081,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Đang ngắt kết nối thẻ SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Đang xóa bộ nhớ USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Đang xóa thẻ SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Không thể xóa bộ nhớ USB."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Không thể xóa bộ nhớ USB."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Không thể xóa bộ nhớ USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Không thể xóa thẻ SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Thẻ SD bị tháo trước khi được ngắt kết nối."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Bộ nhớ USB hiện đang được kiểm tra."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Thẻ SD hiện đang được kiểm tra."</string>
@@ -1111,14 +1106,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Chọn tài khoản"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Tăng dần"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Giảm dần"</string>
- <string name="checkbox_checked" msgid="7222044992652711167">"đã chọn"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"đã kiểm tra"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"chưa chọn"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"đã chọn"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"chưa được chọn"</string>
<string name="switch_on" msgid="551417728476977311">"bật"</string>
<string name="switch_off" msgid="7249798614327155088">"tắt"</string>
- <string name="togglebutton_pressed" msgid="4180411746647422233">"đã nhấn"</string>
- <string name="togglebutton_not_pressed" msgid="4495147725636134425">"chưa được nhấn"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"đã bấm"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"chưa được bấm"</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Hủy"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Xóa"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Xong"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Thay đổi chế độ"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Phím. Yêu cầu phải có tai nghe để nghe phím khi nhập mật khẩu."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Điều hướng lên trên"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Tùy chọn khác"</string>
@@ -1131,15 +1134,17 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Đã tắt dữ liệu 2G-3G"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dữ liệu bị vô hiệu hóa"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dữ liệu di động bị vô hiệu hóa"</string>
- <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"chạm để bật"</string>
- <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Đã vượt quá g.hạn dữ liệu 2G-3G"</string>
- <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Đã vượt quá giới hạn 4G dữ liệu"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Đã vượt quá giới hạn dữ liệu di động"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> vượt quá giới hạn chỉ định"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Chạm để bật"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Đã vượt quá g.hạn dữ liệu 2G-3G"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Đã vượt quá giới hạn dữ liệu 4G"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Đã vượt quá g.hạn d.liệu d.động"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> vượt quá g.hạn đc chỉ định"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dữ liệu nền bị giới hạn"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Chạm để xóa giới hạn"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Chứng chỉ bảo mật"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Chứng chỉ này hợp lệ."</string>
<string name="issued_to" msgid="454239480274921032">"Cấp cho:"</string>
@@ -1158,6 +1163,5 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Chọn hoạt động"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Chia sẻ với..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Thiết bị đã bị khóa."</string>
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 239ba96..7b879ad 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"允许应用程序接收和处理紧急广播消息。此权限只适用于系统应用程序。"</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"发送短信"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"允许应用程序发送短信。恶意应用程序可能会不经您的确认就发送信息,给您带来费用。"</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"不经确认直接发送短信"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"允许应用程序发送短信。恶意应用程序可能会不经您的确认就发送讯息,从而产生费用。"</string>
<string name="permlab_readSms" msgid="4085333708122372256">"读取短信或彩信"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"允许应用程序读取您的平板电脑或 SIM 卡中存储的短信。恶意应用程序可借此读取您的机密信息。"</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"允许应用程序读取您的手机或 SIM 卡中存储的短信。恶意应用程序可借此读取您的机密信息。"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"写入联系数据"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"允许应用程序修改您平板电脑上存储的联系人(地址)数据。恶意应用程序可借此清除或修改您的联系人数据。"</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"允许应用程序修改您手机上存储的联系人(地址)数据。恶意应用程序可借此清除或修改您的联系人数据。"</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"读取个人资料数据"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允许应用程序读取您的所有个人资料信息。恶意应用程序可能会利用此权限识别您的身份,并向他人发送您的个人信息。"</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"写入个人资料数据"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允许应用程序修改您的个人资料信息。恶意应用程序可能会利用此权限清除或修改您的个人资料数据。"</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"读取您的个人资料数据"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允许应用程序读取您设备上存储的个人资料信息(如您的姓名和联系人信息)。这意味着应用程序可以识别您的身份并将您的个人资料发送给他人。"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"写入到您的个人资料数据"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允许应用程序更改您设备上存储的个人资料信息(如您的姓名和联系人信息),或者向其中添加信息。这意味着其他应用程序可以识别您的身份并将您的个人资料发送给他人。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"读取日历活动和机密信息"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"允许应用程序读取您平板电脑上存储的所有日历活动(包括朋友或同事的活动)。拥有此权限的恶意应用程序可在所有者不知情的情况下,从这些日历中提取个人信息。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"允许应用程序读取您手机上存储的所有日历活动(包括朋友或同事的活动)。拥有此权限的恶意应用程序可在所有者不知情的情况下,从这些日历中提取个人信息。"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"允许应用程序查看所有网络的状态。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"完全的互联网访问权限"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"允许应用程序创建网络套接字。"</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"写入“接入点名称”设置"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"允许应用程序修改 APN 设置,例如任何 APN 的代理和端口。"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"更改/拦截网络设置和流量"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"允许应用程序更改网络设置、拦截和检查所有网络流量,例如,更改任何 APN 的代理和端口。恶意应用程序可以监视、重定向,或在您不知情的情况下修改网络数据包。"</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"更改网络连接性"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"允许应用程序更改网络连接的状态。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"更改绑定的连接"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地输入了 PIN。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的 Google 登录信息解锁平板电脑。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次绘错了自己的解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统会要求您使用自己的 Google 登录信息解锁手机。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> 秒后重试。"</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"忘记了图案?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"帐户解锁"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"允许应用程序向您的语音信箱收件箱添加讯息。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"修改浏览器的地理位置权限"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"允许应用程序修改浏览器的地理位置权限。恶意应用程序会利用这一点将位置信息发送到任意网站。"</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"验证软件包"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"允许应用程序验证软件包是否可以安装。"</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"绑定到软件包验证程序"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"允许手机用户请求使用软件包验证程序。普通应用程序无需获取此权限。"</string>
<string name="save_password_message" msgid="767344687139195790">"是否希望浏览器记住此密码?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"暂不保存"</string>
<string name="save_password_remember" msgid="6491879678996749466">"记住"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"Enter 键"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"删除"</string>
<string name="search_go" msgid="8298016669822141719">"搜索"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"搜索"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"搜索查询"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"清除查询"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"提交查询"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"语音搜索"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 个月前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 个月前"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"剪切"</string>
<string name="copy" msgid="2681946229533511987">"复制"</string>
<string name="paste" msgid="5629880836805036433">"粘贴"</string>
- <string name="replace" msgid="8333608224471746584">"替换"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"替换"</string>
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
@@ -900,11 +897,19 @@
<string name="launch_warning_title" msgid="8323761616052121936">"应用程序已重定向"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>目前正在运行。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g>已启动。"</string>
- <string name="screen_compat_mode_scale" msgid="3202955667675944499">"范围"</string>
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"缩放"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"始终显示"</string>
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"您可以在“设置” &gt; “应用程序” &gt; “管理应用程序”下重新启用此模式。"</string>
<string name="smv_application" msgid="295583804361236288">"应用程序<xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g> 进程)违反了自我强制执行的严格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"进程 <xliff:g id="PROCESS">%1$s</xliff:g> 违反了自我强制执行的严格模式 (StrictMode) 政策。"</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>正在运行"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"选择以切换到该应用程序"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"要切换应用程序吗?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"闹钟音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"蓝牙音量。点按切换静音模式。"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"铃声音量。点按切换静音模式。"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"通话音量。点按切换静音模式。"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"媒体音量。点按切换静音模式。"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知音量。点按切换静音模式。"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"蓝牙音量"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"铃声音量"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"通话音量"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"媒体音量"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知音量"</string>
<string name="ringtone_default" msgid="3789758980357696936">"默认铃声"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"默认铃声(<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"静音"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"确定"</string>
<string name="sms_control_no" msgid="1715320703137199869">"取消"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"已移除 SIM 卡"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"在替换 SIM 卡前,您将无法访问移动网络。"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"移动网络不可用。请插入有效的 SIM 卡并重新启动。"</string>
<string name="sim_done_button" msgid="827949989369963775">"完成"</string>
<string name="sim_added_title" msgid="3719670512889674693">"已添加 SIM 卡"</string>
<string name="sim_added_message" msgid="1209265974048554242">"您必须重新启动设备才能访问移动网络。"</string>
@@ -1119,6 +1124,22 @@
<string name="switch_off" msgid="7249798614327155088">"关闭"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"已按"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"未按"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多选项"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G 数据已停用"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 数据已停用"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"移动数据已停用"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"点按即可启用"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"超出 2G-3G 数据流量限制"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"已超出 4G 数据流量上限"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"已超出移动数据流量上限"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"超出规定上限 <xliff:g id="SIZE">%s</xliff:g>"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
@@ -1156,7 +1181,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 指纹:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"查看全部..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"选择活动"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"分享途径…"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"分享方式..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"设备已锁定。"</string>
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index e07c293..8f84cfb 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -195,10 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"允許應用程式接收並處理緊急廣播訊息,只有系統應用程式可以具備這項權限。"</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"傳送 SMS 簡訊"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"允許應用程式傳送 SMS 簡訊。請注意:惡意程式可能會擅自傳送簡訊,增加您的支出。"</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"傳送 SMS 簡訊而不需經過確認"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"允許應用程式傳送 SMS 簡訊。惡意應用程式可能會藉此擅自傳送簡訊,導致您的支出增加。"</string>
<string name="permlab_readSms" msgid="4085333708122372256">"讀取 SMS 或 MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"允許應用程式讀取平板電腦或 SIM 卡上儲存的簡訊。惡意應用程式可藉此讀取您的機密簡訊。"</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"允許應用程式讀取手機或 SIM 卡上的 SMS 簡訊。請注意:惡意程式可能會利用此功能讀取您的機密簡訊。"</string>
@@ -327,10 +325,10 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"輸入聯絡人資料"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"允許應用程式修改平板電腦上儲存的聯絡人 (地址) 資料。請注意,惡意應用程式可能會利用這項功能清除或修改您的聯絡人資料。"</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"允許應用程式修改手機上儲存的聯絡人 (地址) 資料。請注意,惡意應用程式可能會利用這項功能清除或修改您的聯絡人資料。"</string>
- <!-- outdated translation 2211941946684590103 --> <string name="permlab_readProfile" msgid="6824681438529842282">"讀取個人資料"</string>
- <!-- outdated translation 4732942280141331352 --> <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允許應用程式讀取您的所有個人資訊。惡意應用程式可能會藉此識別您的身分,並將您的個人資訊傳送給其他人。"</string>
- <!-- outdated translation 6561668046361989220 --> <string name="permlab_writeProfile" msgid="4679878325177177400">"寫入個人資料"</string>
- <!-- outdated translation 8040643023682531996 --> <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允許應用程式修改您的個人資訊。惡意應用程式可能會藉此清除或修改您的個人資料。"</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"讀取您的個人資料"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允許應用程式讀取儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示該應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"寫入您的個人資料"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允許應用程式新增或變更儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示其他應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"讀取日曆活動與機密資訊"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"允許應用程式讀取所有儲存在您平板電腦上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"允許應用程式讀取所有儲存在您手機上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
@@ -445,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"允許應用程式檢視網路狀態。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"網際網路完整存取"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"允許應用程式建立網路設定。"</string>
- <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"輸入存取點名稱設定"</string>
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"允許應用程式修改 APN 設定,例如:Proxy 及 APN 的連接埠。"</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"變更/攔截網路設定與流量"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"允許應用程式變更網路設定,並且攔截和檢查所有網路流量,例如更改任一 APN 的 Proxy 及通訊埠。請注意,惡意應用程式會在您不知情的情況下,藉此監控、重新導向或修改網路套件。"</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"變更網路連線"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"允許應用程式變更網路連線狀態。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"變更網路共用設定"</string>
@@ -673,6 +671,14 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"您已 <xliff:g id="NUMBER_0">%d</xliff:g> 次輸入不正確的 PIN。"\n\n"請於 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您使用您的 Google 登入程序解除平板電腦的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒之內再試一次。"</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"畫出解鎖圖形已錯誤 <xliff:g id="NUMBER_0">%d</xliff:g> 次。再錯誤 <xliff:g id="NUMBER_1">%d</xliff:g> 次後,系統會要求使用 Google 登入來解鎖。"\n\n" 請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"忘記解鎖圖形?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"解除封鎖帳戶"</string>
@@ -730,14 +736,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"允許應用程式將訊息新增至您的語音信箱收件匣。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"修改瀏覽器地理資訊的權限"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"允許應用程式修改瀏覽器的地理位置權限,惡意應用程式可能會透過此方式允許將您的位置資訊任意傳送給某些網站。"</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"驗證套件"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"允許應用程式驗證是否可安裝特定套件。"</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"繫結至套件驗證程序"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"允許應用程式要求驗證套件,一般應用程式不需使用這個選項。"</string>
<string name="save_password_message" msgid="767344687139195790">"是否記住此密碼?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"現在不要"</string>
<string name="save_password_remember" msgid="6491879678996749466">"記住"</string>
@@ -750,16 +752,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"輸入"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"刪除"</string>
<string name="search_go" msgid="8298016669822141719">"搜尋"</string>
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"搜尋"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"搜尋查詢"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"清除查詢"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"提交查詢"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"語音搜尋"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 個月以前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 個月前"</string>
<plurals name="num_seconds_ago">
@@ -861,7 +858,7 @@
<string name="cut" msgid="3092569408438626261">"剪下"</string>
<string name="copy" msgid="2681946229533511987">"複製"</string>
<string name="paste" msgid="5629880836805036433">"貼上"</string>
- <string name="replace" msgid="8333608224471746584">"取代"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"取代"</string>
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"選取文字"</string>
@@ -905,6 +902,14 @@
<string name="screen_compat_mode_hint" msgid="2953716574198046484">"如要重新啟用這個模式,請至 [設定] &gt; [應用程式] &gt; [管理應用程式]。"</string>
<string name="smv_application" msgid="295583804361236288">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
+ <!-- no translation found for android_upgrading_title (378740715658358071) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (274409861603566003) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (7959542881906488763) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 執行中"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"選取以切換到該應用程式"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"切換應用程式?"</string>
@@ -923,11 +928,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"鬧鐘音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"藍牙音量,輕按即可切換靜音模式。"</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"鈴聲音量,輕按即可切換靜音模式。"</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"來電音量,輕按即可切換靜音模式。"</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"媒體音量,輕按即可切換靜音模式。"</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知音量,輕按即可切換靜音模式。"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"藍牙音量"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"鈴聲音量"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"通話音量"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"媒體音量"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"通知音量"</string>
<string name="ringtone_default" msgid="3789758980357696936">"預設鈴聲"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"預設鈴聲 (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"靜音"</string>
@@ -944,7 +949,7 @@
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"無法連線至 Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"網路連線狀況不佳。"</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"啟動 Wi-Fi Direct 作業,即將關閉 Wi-Fi 用戶端/無線基地台作業。"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"啟動 Wi-Fi Direct 作業,這會關閉 Wi-Fi 用戶端/無線基地台作業。"</string>
<!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"無法啟動 Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"收到來自 <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> 的 Wi-Fi Direct 連線設定要求,按一下 [確定] 即可接受。"</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"收到來自 <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> 的 Wi-Fi Direct 連線設定要求。輸入 PIN 即可繼續進行。"</string>
@@ -956,7 +961,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"確定"</string>
<string name="sms_control_no" msgid="1715320703137199869">"取消"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM 卡已移除"</string>
- <!-- outdated translation 2064255102770489459 --> <string name="sim_removed_message" msgid="2333164559970958645">"您必須更換 SIM 卡,否則無法使用行動網路。"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"您必須先插入有效的 SIM 卡再重新啟動手機,才能使用行動網路。"</string>
<string name="sim_done_button" msgid="827949989369963775">"完成"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM 卡已新增"</string>
<string name="sim_added_message" msgid="1209265974048554242">"您必須重新啟動裝置,才能使用行動網路。"</string>
@@ -1112,13 +1117,29 @@
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減少"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"已勾選"</string>
- <string name="checkbox_not_checked" msgid="5174639551134444056">"未勾選"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"尚未勾選"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"已選取"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"未選取"</string>
<string name="switch_on" msgid="551417728476977311">"開啟"</string>
<string name="switch_off" msgid="7249798614327155088">"關閉"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"已按下"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"未按下"</string>
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (4407722573911224960) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上瀏覽"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多選項"</string>
@@ -1131,10 +1152,14 @@
<string name="data_usage_3g_limit_title" msgid="7093334419518706686">"已停用 2G-3G 數據"</string>
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"已停用 4G 數據"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"已停用行動數據"</string>
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
+ <skip />
<!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"輕按一下即可啟用"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"已超過 2G-3G 數據上限"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"已超過 4G 數據上限"</string>
- <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"已達行動數據上限"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"已超過行動數據上限"</string>
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> 超過規定上限"</string>
<!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 15dee48..38e61ae 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -166,8 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (4270874999047767599) -->
- <skip />
+ <string name="httpErrorIO" msgid="4270874999047767599">"Iseva ayikwazanga ukwenza isithombe sakho. Sicela uzame futhi emuva kwesikhathi."</string>
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
<!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
@@ -291,10 +290,8 @@
<!-- no translation found for permlab_sendSms (5600830612147671529) -->
<skip />
<string name="permdesc_sendSms" msgid="1946540351763502120">"Ivumela uhlelo lokusebenza ukuthumela imiyalezo ye-SMS. Izinhlelo zokusebenza ezinonya zingakubiza imali ngokukuthumela imiyalezo ngaphandle kwesiqinisekiso."</string>
- <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
- <skip />
- <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
- <skip />
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"thumela i-SMS engenakuqinisekiswa"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Ivumela uhlelo lokusebenza ukuthumela imilayezo ye-SMS. Izinhlelo zokusebenza ezinonya zingakubiza imali ngokukuthumela imiyalezo ngaphandle kwesiqinisekiso."</string>
<!-- no translation found for permlab_readSms (4085333708122372256) -->
<skip />
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ivumela uhlelo lokusebena ukufunda imiyalezo ye-SMS egcinwe kwithebhulethi yakho noma ekhadini le-SIM. Izinhlelo ezi-malicious zingase zifunde imiyalezo eyimfihlo."</string>
@@ -472,14 +469,10 @@
<skip />
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Ivumela uhlelo lokusebenza ukuguqula idatha yothintana naye (ikheli) egcinwe kwithebhulethi yakho. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula idatha yakho yothintana naye."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Ivumela uhlelo lokusebenza ukuguqula idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula idatha yakho yothintana naye."</string>
- <!-- no translation found for permlab_readProfile (6824681438529842282) -->
- <skip />
- <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
- <skip />
- <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
- <skip />
- <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
- <skip />
+ <string name="permlab_readProfile" msgid="6824681438529842282">"bhala imininingo yemininingwane yakho"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Ivumela isisetshenziswa ukuthi sifunde imininingwane yakho egcinwe kwi-device yakho, efana igama lakho kanye nemininingwane yokuxhumana. Lokhu kuchaza ukuthi isisetshenziswa singakwazi ukubona ukuthi nguwe bese sithumela imininingwane yakho kwabanye."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"bhala imininingwane yemininingo yakho"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Ivumela isisetshenziswa ukuthi sifunde imininingwane yakho egcinwe kwi-device yakho, efana igama lakho kanye nemininingwane yokuxhumana. Lokhu kuchaza ukuthi isisetshenziswa singakwazi ukubona ukuthi nguwe bese sithumela imininingwane yakho kwabanye."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"funda izenzakalo zekhalenda kanye nokwaziswa okuyimfihlo"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezilondolozwe kwithebhulethi yakho, kuhlanganise ezabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthathe ukwaziswa komuntu siqu kulamakhalenda ngaphandle kolwazi lomnikazi."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezilondolozwe efonini yakho, kuhlanganise ezabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthathe ukwaziswa komuntu siqu kulamakhalenda ngaphandle kolwazi lomnikazi."</string>
@@ -621,9 +614,8 @@
<!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
<skip />
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ivumela uhlelo lokusebenza ukwenza izimbobo zenethiwekhi."</string>
- <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
- <skip />
- <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo ze-APN, njengemmeleli Nembobo yanoma iyiphi i-APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"shintsha/ngenelela izilungiselelo kanye nokuhamba kuhleloxhumano"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ivumela isisetshenziswa ukuthi sishintshe okulungiselelwe kohleloxhumano kanye nokungenelela kanye nokuhlola konke okuhamba ngohleloxhumano, isibonelo ukushintsha imvume noma ukufaka noma eyiphi i-APN. Izisetshenziswa ezingafanele zingaqapha, zihambise kwenye indawo, noma zishintshe amaphakethe ohleloxhumano ngaphandle kokwazi kwakho."</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi."</string>
@@ -891,6 +883,10 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Ufake ngokungalungile i-PIN yakho izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g> kweminye imizamo engaphumelelanga, uzocelwa ukuvula ithebhulethi yakho usebenzisa ukungena ngemvume kwi-Google."\n\n" Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu <xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g>kweminye imizamo engaphumelelanga, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume e-Google."\n\n" Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Uzame ngokusebenzisa indlela engafanele ukuvula izikhathi <xliff:g id="NUMBER_0">%d</xliff:g> ze-tablet. Ngemuva <xliff:g id="NUMBER_1">%d</xliff:g> kokuzama kaningana okuyimpumelelo i-tablet izobuyela kwizimo zasembonini futhi yonke imininingo yomsebenzisi izolahleka."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Uzame ngokusebenzisa indlela engafanele ukuvula izikhathi <xliff:g id="NUMBER_0">%d</xliff:g> zocingo. Ngemuva <xliff:g id="NUMBER_1">%d</xliff:g> kokuzama kaningana ngaphandle kwempumelelo, ucingo luzobiyiselwa kwizimiso zasembonini futhi yonke imininingo yomsebenzisi izolahleka."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> ze-tablet. I-tablet manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> zocingo. Ucingo manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
<!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
<skip />
<!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
@@ -971,14 +967,10 @@
<string name="permdesc_addVoicemail" msgid="4828507394878206682">"Ivumela uhlelo lokusebenza ukwengeza imiyalezo kwibhokisi lakho lemeyili yezwi."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Gugula izimvume zendawo Yesiphequluli"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ivumela uhlelo lokusebenza ukuguqula izimvume zendawo Yesiphequluli. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvumela ukuthumela ukwaziswa kwendawo kwamanye amasayithi ewebhu."</string>
- <!-- no translation found for permlab_packageVerificationAgent (5568139100645829117) -->
- <skip />
- <!-- no translation found for permdesc_packageVerificationAgent (6033195477325381106) -->
- <skip />
- <!-- no translation found for permlab_bindPackageVerifier (4187786793360326654) -->
- <skip />
- <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
- <skip />
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"qinisekisa amaphakheji"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Vumela ukuthi isisetshenziswa siqinisekise ukuthi ngabe iphakheji iyafakeka."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bopha okokuqinisekisa iphakheji"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Ivumela umnikazi ukuthi enze izicelo zezinsiza eziqinisekisa iphakheji. Akumele kudingeke ekusetshenzisweni okujwayelekile."</string>
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -1003,16 +995,11 @@
<skip />
<!-- no translation found for search_go (8298016669822141719) -->
<skip />
- <!-- no translation found for searchview_description_search (6749826639098512120) -->
- <skip />
- <!-- no translation found for searchview_description_query (5911778593125355124) -->
- <skip />
- <!-- no translation found for searchview_description_clear (1330281990951833033) -->
- <skip />
- <!-- no translation found for searchview_description_submit (2688450133297983542) -->
- <skip />
- <!-- no translation found for searchview_description_voice (2453203695674994440) -->
- <skip />
+ <string name="searchview_description_search" msgid="6749826639098512120">"Cinga"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Cinga umbuzo"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"xazulula umbuzo"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Thumela umbuzo"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Ukucinga ngezwi"</string>
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string>
@@ -1134,7 +1121,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="replace" msgid="8333608224471746584">"Buyisela"</string>
+ <!-- outdated translation 8333608224471746584 --> <string name="replace" msgid="5781686059063148930">"Buyisela"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
@@ -1172,10 +1159,8 @@
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
<string name="aerr_title" msgid="1905800560317137752"></string>
- <!-- no translation found for aerr_application (932628488013092776) -->
- <skip />
- <!-- no translation found for aerr_process (4507058997035697579) -->
- <skip />
+ <string name="aerr_application" msgid="932628488013092776">"Ngeshwa, <xliff:g id="APPLICATION">%1$s</xliff:g> kumile."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Ngeshwa, uhlelo <xliff:g id="PROCESS">%1$s</xliff:g> luvele lwama."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> ayisabeli."\n\n"Ungathanda ukuyivala?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"Umsebenzi <xliff:g id="ACTIVITY">%1$s</xliff:g> awusabeli."\n\n"Ungathanda ukuwuvala?"</string>
@@ -1196,6 +1181,10 @@
<skip />
<string name="smv_application" msgid="295583804361236288">"Inqubo <xliff:g id="APPLICATION">%1$s</xliff:g> (yohlelo lokusebenza <xliff:g id="PROCESS">%2$s</xliff:g>) iphule inqubomgomo oziphoqelela yona Yemodi Ebukhali."</string>
<string name="smv_process" msgid="5120397012047462446">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> yephule inqubomgomo yokuziphoqelela Yemodi Ebukhali."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"I-Android ifaka ezakamuva..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Ukubeka ezingeni eliphezulu izisetshenziswa <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Iqala uhlelo lokusebenza."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"Qedela ukuqala kabusha."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> iyasebenza"</string>
<string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Khetha ukushintshela kuhlelo lokusebenza"</string>
<string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Shintsha izinhlelo zokusebenza?"</string>
@@ -1219,11 +1208,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Ivolumu yesaziso"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- outdated translation 1903463583678473070 --> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Ivolumu ye-Bluetooth. Thepha ukuguqulela kwimodi ethulile."</string>
- <!-- outdated translation 4730973146425102943 --> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ivolumu yeringithoni. Thepha ukuguqulela kwimodi ethulile."</string>
- <!-- outdated translation 4245391921367914422 --> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Ivolumu yekholi. Thepha ukuguqulela kwimodi ethulile."</string>
- <!-- outdated translation 5376060645294131085 --> <string name="volume_icon_description_media" msgid="4217311719665194215">"Ivolumu yemidiya. Thepha ukuguqulela kwimodi ethulile."</string>
- <!-- outdated translation 373288343560012393 --> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ivolumu yesaziso. Thepha ukuguqulela kwimodi ethulile."</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Ivolumu ye-Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ivolumu yethoni yokukhala"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Ivolumi yocingo"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Ivolumu yemidiya"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Ivolumu yesaziso"</string>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1247,8 +1236,7 @@
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
- <skip />
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Yehlulekile ukuqala i-Wi-Fi Ngqo"</string>
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
<!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
@@ -1267,8 +1255,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2333164559970958645) -->
- <skip />
+ <string name="sim_removed_message" msgid="2333164559970958645">"Uhleloxhumano lweselula aluzutholakala kuwena kuze kube uqala kabusha ufake i-SIM card efanele."</string>
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
<!-- no translation found for sim_added_title (3719670512889674693) -->
@@ -1308,7 +1295,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Kube nenkinga yokuvala isitoreji se-USB. Hlola ukuqiniseka ukuthi wehlise isikhungo se-USB, bese uzama futhi."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Vula isitoreji se-USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Uma uvula isitoreji se-USB, ezinye izinhlelo zokusebenza ozisebenzisayo zizoma futhi zingase zingatholakali kuze kube yilapho uvala isitoreji se-USB."</string>
- <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Umsebenzi we-USB wehlulekile"</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"Ukusebenza kwe-USB kwehlulekile"</string>
<string name="dlg_ok" msgid="7376953167039865701">"KULUNGILE"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1418,8 +1405,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Yehlisa ikhadi le-SD..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Isula isitoreji se-USB."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Isula ikhadi le-SD..."</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Yehlulekile ukusula isitoreji se-USB"</string>
- <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Yehlulekile ukusula isitoreji se-USB"</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Yehlulekile ukusula indawo yokugcina i-USB."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"Yehlulekile ukwesula ikhadi le-SD."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Ikhadi le-SD likhishwe ngaphambi kokuba lehliswe."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Isitoreji se-USB sisahlolwa."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Ikhadi le-SD okwamanje liyahlolwa."</string>
@@ -1454,6 +1441,14 @@
<string name="switch_off" msgid="7249798614327155088">"valiwe"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"kucindezelwe."</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"akucindezelwe."</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"i-ALT"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Khansela"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Susa"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Kwenziwe"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ukushintsha kwendlela esetshenziswayo"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Beka kwenye indawo"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Faka"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Izinkinobho. I-Headset edingeka ukuze kuzwakale izinkinobho ngesikhathi uthayipha i-password."</string>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1478,16 +1473,17 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
+ <!-- no translation found for data_usage_wifi_limit_title (8992154736441284865) -->
<skip />
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"Cindezela ukuze isebenze"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"umkhawulo wedatha ye-2G-3G ufinyelelwe"</string>
<string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Umkhawulo wedatha ye-4G ufinyelelwe"</string>
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Umkhawulo wedatha yefoni ufinyelelwe"</string>
- <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ngaphezu komkhawulo ocacisiwe"</string>
- <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
- <skip />
- <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
<skip />
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ngaphezu komkhawulo ocacisiwe"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Imininingo egciniwe ivinjelwe"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"Cindezela ukuze ususe izivimbelo"</string>
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
@@ -1524,6 +1520,5 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
- <!-- no translation found for list_delimeter (3975117572185494152) -->
- <skip />
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 04e510b..57e9bbf 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -163,6 +163,8 @@
<item>@drawable/list_selector_holo_light</item>
<item>@drawable/menu_background</item>
<item>@drawable/menu_background_fill_parent_width</item>
+ <item>@drawable/menu_hardkey_panel_holo_dark</item>
+ <item>@drawable/menu_hardkey_panel_holo_light</item>
<item>@drawable/menu_submenu_background</item>
<item>@drawable/menu_selector</item>
<item>@drawable/overscroll_edge</item>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index bb61c72..dae9f70 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -881,10 +881,6 @@
Default value is false. EditText content is always selectable. -->
<attr name="textIsSelectable" format="boolean" />
- <!-- When true, IME suggestions will be displayed when the user double taps on editable text.
- The default value is true. -->
- <attr name="suggestionsEnabled" format="boolean" />
-
<!-- Where to ellipsize text. -->
<attr name="ellipsize">
<enum name="none" value="0" />
@@ -3148,8 +3144,6 @@
<!-- Indicates that the content of a non-editable text can be selected. -->
<attr name="textIsSelectable" />
- <!-- Suggestions will be displayed when the user double taps on editable text. -->
- <attr name="suggestionsEnabled" />
<!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
<attr name="textAllCaps" />
</declare-styleable>
@@ -5116,6 +5110,10 @@
Defaults to false.
-->
<attr name="isAlwaysSyncable" format="boolean"/>
+ <!-- If provided, specifies the action of the settings
+ activity for this SyncAdapter.
+ -->
+ <attr name="settingsActivity"/>
</declare-styleable>
<!-- =============================== -->
@@ -5320,9 +5318,9 @@
<declare-styleable name="Switch">
<!-- Drawable to use as the "thumb" that switches back and forth. -->
- <attr name="switchThumb" format="reference" />
+ <attr name="thumb" />
<!-- Drawable to use as the "track" that the switch thumb slides within. -->
- <attr name="switchTrack" format="reference" />
+ <attr name="track" format="reference" />
<!-- Text to use when the switch is in the checked/"on" state. -->
<attr name="textOn" />
<!-- Text to use when the switch is in the unchecked/"off" state. -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 738ef0d..051ed14 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -585,21 +585,6 @@
If false, Content-disposition fragments are ignored -->
<bool name="config_mms_content_disposition_support">true</bool>
- <!-- If this value is true, the carrier supports sms delivery reports.
- If false, sms delivery reports are not supported and the preference
- option to enable/disable delivery reports is removed in the Messaging app. -->
- <bool name="config_sms_delivery_reports_support">true</bool>
-
- <!-- If this value is true, the carrier supports mms delivery reports.
- If false, mms delivery reports are not supported and the preference
- option to enable/disable delivery reports is removed in the Messaging app. -->
- <bool name="config_mms_delivery_reports_support">true</bool>
-
- <!-- If this value is true, the carrier supports mms read reports.
- If false, mms read reports are not supported and the preference
- option to enable/disable read reports is removed in the Messaging app. -->
- <bool name="config_mms_read_reports_support">true</bool>
-
<!-- National Language Identifier codes for the following two config items.
(from 3GPP TS 23.038 V9.1.1 Table 6.2.1.2.4.1):
0 - reserved
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index c522c1e..62a2187 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -78,7 +78,7 @@
<!-- Preference activity side margins -->
<dimen name="preference_screen_side_margin">0dp</dimen>
<!-- Preference activity side margins negative-->
- <dimen name="preference_screen_side_margin_negative">0dp</dimen>
+ <dimen name="preference_screen_side_margin_negative">-4dp</dimen>
<!-- Preference activity top margin -->
<dimen name="preference_screen_top_margin">0dp</dimen>
<!-- Preference activity bottom margin -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index a6bf1e0..fcd3bba 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1713,12 +1713,15 @@
<public type="attr" name="switchTextOn" />
<public type="attr" name="switchTextOff" />
<public type="attr" name="switchPreferenceStyle" />
+ <public type="attr" name="switchTextAppearance" />
+ <public type="attr" name="track" />
+ <public type="attr" name="switchMinWidth" />
+ <public type="attr" name="switchPadding" />
+ <public type="attr" name="thumbTextPadding" />
<public type="attr" name="textSuggestionsWindowStyle" />
<public type="attr" name="textEditSuggestionItemLayout" />
- <public type="attr" name="suggestionsEnabled" />
-
<public type="attr" name="rowCount" />
<public type="attr" name="rowOrderPreserved" />
<public type="attr" name="columnCount" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 8eaac8c..8e0f300 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1789,7 +1789,7 @@
<!-- When the lock screen is showing and the phone plugged in, and the battery
is not fully charged, show the current charge %. -->
- <string name="lockscreen_plugged_in">Charging (<xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g>)</string>
+ <string name="lockscreen_plugged_in">Charging, <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g></string>
<!-- When the lock screen is showing, the phone is plugged in and the battery is fully
charged, say that it is charged. -->
<string name="lockscreen_charged">Charged.</string>
@@ -2470,7 +2470,7 @@
<string name="paste">Paste</string>
<!-- Item on EditText context menu. This action is used to replace the current word by other suggested words, suggested by the IME or the spell checker -->
- <string name="replace">Replace</string>
+ <string name="replace">Replace\u2026</string>
<!-- Item on EditText context menu. This action is used to copy a URL from the edit field into the clipboard. -->
<string name="copyUrl">Copy URL</string>
@@ -2665,8 +2665,8 @@
<!-- A notification is shown when a user's selected SSID is later disabled due to connectivity problems. This is the notification's title / ticker. -->
<string name="wifi_watchdog_network_disabled">Couldn\'t connect to Wi-Fi</string>
- <!-- A notification is shown when a user's selected SSID is later disabled due to connectivity problems. This is a partial string of the message, which will also include the (possibly truncated) hotspot name. -->
- <string name="wifi_watchdog_network_disabled_detailed"> has a poor internet connection.</string>
+ <!-- A notification is shown when a user's selected SSID is later disabled due to connectivity problems. The complete alert msg is: <hotspot name> + this string, i.e. "Linksys has a poor internet connection" -->
+ <string name="wifi_watchdog_network_disabled_detailed">\u0020has a poor internet connection.</string>
<!-- Do not translate. Default access point SSID used for tethering -->
<string name="wifi_tether_configure_ssid_default" translatable="false">AndroidAP</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 94c6e41..052a040 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -448,7 +448,7 @@ please see styles_device_defaults.xml.
<item name="android:textColor">?textColorSecondary</item>
<item name="android:textSize">14sp</item>
<item name="android:gravity">center_vertical</item>
- <item name="android:paddingLeft">5sp</item>
+ <item name="android:paddingLeft">8dip</item>
</style>
<style name="Widget.TextView.ListSeparator.White">
@@ -725,6 +725,11 @@ please see styles_device_defaults.xml.
<item name="android:quickContactWindowSize">modeLarge</item>
</style>
+ <style name="Widget.CompoundButton.Switch">
+ <item name="android:textOn">@android:string/capital_on</item>
+ <item name="android:textOff">@android:string/capital_off</item>
+ </style>
+
<!-- Text Appearances -->
<eat-comment />
@@ -885,11 +890,9 @@ please see styles_device_defaults.xml.
<item name="android:textSize">30sp</item>
</style>
- <!-- @hide -->
<style name="TextAppearance.SuggestionHighlight">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@android:color/suggestion_highlight_text</item>
- <item name="android:textStyle">bold</item>
</style>
<!-- Preference Styles -->
@@ -1073,8 +1076,8 @@ please see styles_device_defaults.xml.
<!-- Style for animating text selection handles. -->
<style name="Animation.TextSelectHandle">
- <item name="windowEnterAnimation">@android:anim/fade_in</item>
- <item name="windowExitAnimation">@android:anim/fade_out</item>
+ <item name="windowEnterAnimation">@android:anim/fast_fade_in</item>
+ <item name="windowExitAnimation">@android:anim/fast_fade_out</item>
</style>
<!-- Style for the popup window that contains text suggestions. -->
@@ -1854,7 +1857,7 @@ please see styles_device_defaults.xml.
<style name="Widget.Holo.ActionButton.Overflow">
<item name="android:src">@android:drawable/ic_menu_moreoverflow_holo_dark</item>
- <item name="android:background">?android:attr/selectableItemBackground</item>
+ <item name="android:background">?android:attr/actionBarItemBackground</item>
<item name="android:contentDescription">@string/action_menu_overflow_description</item>
</style>
@@ -1919,8 +1922,8 @@ please see styles_device_defaults.xml.
</style>
<style name="Widget.Holo.CompoundButton.Switch">
- <item name="android:switchTrack">@android:drawable/switch_track_holo_dark</item>
- <item name="android:switchThumb">@android:drawable/switch_inner_holo_dark</item>
+ <item name="android:track">@android:drawable/switch_track_holo_dark</item>
+ <item name="android:thumb">@android:drawable/switch_inner_holo_dark</item>
<item name="android:switchTextAppearance">@android:style/TextAppearance.Holo.Widget.Switch</item>
<item name="android:textOn">@android:string/capital_on</item>
<item name="android:textOff">@android:string/capital_off</item>
@@ -2293,6 +2296,17 @@ please see styles_device_defaults.xml.
<item name="android:itemPadding">8dip</item>
</style>
+ <style name="Widget.Holo.Light.CompoundButton.Switch" parent="Widget.CompoundButton.Switch">
+ <item name="android:track">@android:drawable/switch_track_holo_light</item>
+ <item name="android:thumb">@android:drawable/switch_inner_holo_light</item>
+ <item name="android:switchTextAppearance">@android:style/TextAppearance.Holo.Widget.Switch</item>
+ <item name="android:textOn">@android:string/capital_on</item>
+ <item name="android:textOff">@android:string/capital_off</item>
+ <item name="android:thumbTextPadding">12dip</item>
+ <item name="android:switchMinWidth">96dip</item>
+ <item name="android:switchPadding">16dip</item>
+ </style>
+
<!-- Animation Styles -->
<style name="Animation.Holo" parent="Animation">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 903fc04..f434ce8 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -980,7 +980,7 @@ please see themes_device_defaults.xml.
<item name="toastFrameBackground">@android:drawable/toast_frame_holo</item>
<!-- Panel attributes -->
- <item name="panelBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>
+ <item name="panelBackground">@android:drawable/menu_hardkey_panel_holo_dark</item>
<item name="panelFullBackground">@android:drawable/menu_background_fill_parent_width</item>
<!-- These three attributes do not seems to be used by the framework. Declared public though -->
<item name="panelColorBackground">#000</item>
@@ -1215,6 +1215,7 @@ please see themes_device_defaults.xml.
<item name="buttonStyleInset">@android:style/Widget.Holo.Light.Button.Inset</item>
<item name="buttonStyleToggle">@android:style/Widget.Holo.Light.Button.Toggle</item>
+ <item name="switchStyle">@android:style/Widget.Holo.Light.CompoundButton.Switch</item>
<item name="selectableItemBackground">@android:drawable/item_background_holo_light</item>
<item name="borderlessButtonStyle">@android:style/Widget.Holo.Light.Button.Borderless</item>
@@ -1283,7 +1284,7 @@ please see themes_device_defaults.xml.
<item name="toastFrameBackground">@android:drawable/toast_frame_holo</item>
<!-- Panel attributes -->
- <item name="panelBackground">@android:drawable/menu_dropdown_panel_holo_light</item>
+ <item name="panelBackground">@android:drawable/menu_hardkey_panel_holo_light</item>
<item name="panelFullBackground">@android:drawable/menu_background_fill_parent_width</item>
<!-- These three attributes do not seems to be used by the framework. Declared public though -->
<item name="panelColorBackground">#000</item>
diff --git a/core/tests/coretests/res/layout/interrogation_activity.xml b/core/tests/coretests/res/layout/interrogation_activity.xml
index 28d965b..44ed75c 100644
--- a/core/tests/coretests/res/layout/interrogation_activity.xml
+++ b/core/tests/coretests/res/layout/interrogation_activity.xml
@@ -30,20 +30,20 @@
>
<Button
android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button1"
/>
<Button
android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button2"
/>
<Button
android:id="@+id/button3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button3"
/>
</LinearLayout>
@@ -55,20 +55,20 @@
>
<Button
android:id="@+id/button4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button4"
/>
<Button
android:id="@+id/button5"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button5"
/>
<Button
android:id="@+id/button6"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button6"
/>
</LinearLayout>
@@ -80,20 +80,20 @@
>
<Button
android:id="@+id/button7"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button7"
/>
<Button
android:id="@+id/button8"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button8"
/>
<Button
android:id="@+id/button9"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="160px"
+ android:layout_height="100px"
android:text="@string/button9"
/>
</LinearLayout>
diff --git a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
index 99d534c..a542a1b 100644
--- a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
+++ b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
@@ -31,6 +31,7 @@ import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityInteractionClient;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.IAccessibilityManager;
@@ -81,8 +82,8 @@ public class InterrogationActivityTest
// bring up the activity
getActivity();
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertNotNull(button);
assertEquals(0, button.getChildCount());
@@ -91,8 +92,8 @@ public class InterrogationActivityTest
button.getBoundsInParent(bounds);
assertEquals(0, bounds.left);
assertEquals(0, bounds.top);
- assertEquals(73, bounds.right);
- assertEquals(48, bounds.bottom);
+ assertEquals(160, bounds.right);
+ assertEquals(100, bounds.bottom);
// char sequence attributes
assertEquals("com.android.frameworks.coretests", button.getPackageName());
@@ -133,8 +134,8 @@ public class InterrogationActivityTest
getActivity();
// find a view by text
- List<AccessibilityNodeInfo> buttons =
- getConnection().findAccessibilityNodeInfosByViewTextInActiveWindow("butto");
+ List<AccessibilityNodeInfo> buttons = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfosByViewTextInActiveWindow(getConnection(), "butto");
assertEquals(9, buttons.size());
} finally {
afterClassIfNeeded();
@@ -170,8 +171,8 @@ public class InterrogationActivityTest
classNameAndTextList.add("android.widget.ButtonButton8");
classNameAndTextList.add("android.widget.ButtonButton9");
- AccessibilityNodeInfo root =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.root);
+ AccessibilityNodeInfo root = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.root);
assertNotNull("We must find the existing root.", root);
Queue<AccessibilityNodeInfo> fringe = new LinkedList<AccessibilityNodeInfo>();
@@ -214,15 +215,16 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not focused
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isFocused());
// focus the view
assertTrue(button.performAction(ACTION_FOCUS));
// find the view again and make sure it is focused
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertTrue(button.isFocused());
} finally {
afterClassIfNeeded();
@@ -242,22 +244,24 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not focused
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isFocused());
// focus the view
assertTrue(button.performAction(ACTION_FOCUS));
// find the view again and make sure it is focused
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertTrue(button.isFocused());
// unfocus the view
assertTrue(button.performAction(ACTION_CLEAR_FOCUS));
// find the view again and make sure it is not focused
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isFocused());
} finally {
afterClassIfNeeded();
@@ -278,15 +282,16 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not selected
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isSelected());
// select the view
assertTrue(button.performAction(ACTION_SELECT));
// find the view again and make sure it is selected
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertTrue(button.isSelected());
} finally {
afterClassIfNeeded();
@@ -306,22 +311,24 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not selected
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isSelected());
// select the view
assertTrue(button.performAction(ACTION_SELECT));
// find the view again and make sure it is selected
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertTrue(button.isSelected());
// unselect the view
assertTrue(button.performAction(ACTION_CLEAR_SELECTION));
// find the view again and make sure it is not selected
- button = getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isSelected());
} finally {
afterClassIfNeeded();
@@ -342,8 +349,8 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not focused
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
assertFalse(button.isSelected());
// focus the view
@@ -406,8 +413,8 @@ public class InterrogationActivityTest
getActivity();
// find a view and make sure it is not focused
- AccessibilityNodeInfo button =
- getConnection().findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
+ AccessibilityNodeInfo button = AccessibilityInteractionClient.getInstance()
+ .findAccessibilityNodeInfoByViewIdInActiveWindow(getConnection(), R.id.button5);
AccessibilityNodeInfo parent = button.getParent();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
diff --git a/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java b/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java
index 4db4ea5..b888d9a 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java
@@ -99,7 +99,7 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L));
assertEquals(1, stats.size());
- assertValues(stats, 0, 1024L, 10L, 2048L, 20L, 2L);
+ assertValues(stats, 0, SECOND_IN_MILLIS, 1024L, 10L, 2048L, 20L, 2L);
}
public void testRecordEqualBuckets() throws Exception {
@@ -112,8 +112,8 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
new NetworkStats.Entry(1024L, 10L, 128L, 2L, 2L));
assertEquals(2, stats.size());
- assertValues(stats, 0, 512L, 5L, 64L, 1L, 1L);
- assertValues(stats, 1, 512L, 5L, 64L, 1L, 1L);
+ assertValues(stats, 0, HOUR_IN_MILLIS / 2, 512L, 5L, 64L, 1L, 1L);
+ assertValues(stats, 1, HOUR_IN_MILLIS / 2, 512L, 5L, 64L, 1L, 1L);
}
public void testRecordTouchingBuckets() throws Exception {
@@ -129,11 +129,11 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
assertEquals(3, stats.size());
// first bucket should have (1/20 of value)
- assertValues(stats, 0, 50L, 100L, 250L, 500L, 5L);
+ assertValues(stats, 0, MINUTE_IN_MILLIS, 50L, 100L, 250L, 500L, 5L);
// second bucket should have (15/20 of value)
- assertValues(stats, 1, 750L, 1500L, 3750L, 7500L, 75L);
+ assertValues(stats, 1, 15 * MINUTE_IN_MILLIS, 750L, 1500L, 3750L, 7500L, 75L);
// final bucket should have (4/20 of value)
- assertValues(stats, 2, 200L, 400L, 1000L, 2000L, 20L);
+ assertValues(stats, 2, 4 * MINUTE_IN_MILLIS, 200L, 400L, 1000L, 2000L, 20L);
}
public void testRecordGapBuckets() throws Exception {
@@ -150,8 +150,8 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
// we should have two buckets, far apart from each other
assertEquals(2, stats.size());
- assertValues(stats, 0, 128L, 2L, 256L, 4L, 1L);
- assertValues(stats, 1, 64L, 1L, 512L, 8L, 2L);
+ assertValues(stats, 0, SECOND_IN_MILLIS, 128L, 2L, 256L, 4L, 1L);
+ assertValues(stats, 1, SECOND_IN_MILLIS, 64L, 1L, 512L, 8L, 2L);
// now record something in middle, spread across two buckets
final long middleStart = TEST_START + DAY_IN_MILLIS;
@@ -161,10 +161,10 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
// now should have four buckets, with new record in middle two buckets
assertEquals(4, stats.size());
- assertValues(stats, 0, 128L, 2L, 256L, 4L, 1L);
- assertValues(stats, 1, 1024L, 2L, 1024L, 2L, 1L);
- assertValues(stats, 2, 1024L, 2L, 1024L, 2L, 1L);
- assertValues(stats, 3, 64L, 1L, 512L, 8L, 2L);
+ assertValues(stats, 0, SECOND_IN_MILLIS, 128L, 2L, 256L, 4L, 1L);
+ assertValues(stats, 1, HOUR_IN_MILLIS, 1024L, 2L, 1024L, 2L, 1L);
+ assertValues(stats, 2, HOUR_IN_MILLIS, 1024L, 2L, 1024L, 2L, 1L);
+ assertValues(stats, 3, SECOND_IN_MILLIS, 64L, 1L, 512L, 8L, 2L);
}
public void testRecordOverlapBuckets() throws Exception {
@@ -180,8 +180,8 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
// should have two buckets, with some data mixed together
assertEquals(2, stats.size());
- assertValues(stats, 0, 768L, 7L, 768L, 7L, 6L);
- assertValues(stats, 1, 512L, 5L, 512L, 5L, 5L);
+ assertValues(stats, 0, SECOND_IN_MILLIS + (HOUR_IN_MILLIS / 2), 768L, 7L, 768L, 7L, 6L);
+ assertValues(stats, 1, (HOUR_IN_MILLIS / 2), 512L, 5L, 512L, 5L, 5L);
}
public void testRecordEntireGapIdentical() throws Exception {
@@ -345,11 +345,10 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
history.recordData(0, MINUTE_IN_MILLIS,
new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 4L));
- history.recordData(0, MINUTE_IN_MILLIS * 2,
+ history.recordData(0, 2 * MINUTE_IN_MILLIS,
new NetworkStats.Entry(2L, 2L, 2L, 2L, 2L));
- assertValues(
- history, Long.MIN_VALUE, Long.MAX_VALUE, 1026L, UNKNOWN, 2050L, UNKNOWN, UNKNOWN);
+ assertFullValues(history, UNKNOWN, 1026L, UNKNOWN, 2050L, UNKNOWN, UNKNOWN);
}
public void testIgnoreFieldsRecordIn() throws Exception {
@@ -361,7 +360,7 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 4L));
partial.recordEntireHistory(full);
- assertValues(partial, Long.MIN_VALUE, Long.MAX_VALUE, UNKNOWN, 10L, UNKNOWN, UNKNOWN, 4L);
+ assertFullValues(partial, UNKNOWN, UNKNOWN, 10L, UNKNOWN, UNKNOWN, 4L);
}
public void testIgnoreFieldsRecordOut() throws Exception {
@@ -373,12 +372,12 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 4L));
full.recordEntireHistory(partial);
- assertValues(full, Long.MIN_VALUE, Long.MAX_VALUE, 0L, 10L, 0L, 0L, 4L);
+ assertFullValues(full, MINUTE_IN_MILLIS, 0L, 10L, 0L, 0L, 4L);
}
public void testSerialize() throws Exception {
final NetworkStatsHistory before = new NetworkStatsHistory(MINUTE_IN_MILLIS, 40, FIELD_ALL);
- before.recordData(0, MINUTE_IN_MILLIS * 4,
+ before.recordData(0, 4 * MINUTE_IN_MILLIS,
new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 4L));
before.recordData(DAY_IN_MILLIS, DAY_IN_MILLIS + MINUTE_IN_MILLIS,
new NetworkStats.Entry(10L, 20L, 30L, 40L, 50L));
@@ -391,8 +390,8 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
final NetworkStatsHistory after = new NetworkStatsHistory(new DataInputStream(in));
// must have identical totals before and after
- assertValues(before, Long.MIN_VALUE, Long.MAX_VALUE, 1034L, 30L, 2078L, 60L, 54L);
- assertValues(after, Long.MIN_VALUE, Long.MAX_VALUE, 1034L, 30L, 2078L, 60L, 54L);
+ assertFullValues(before, 5 * MINUTE_IN_MILLIS, 1034L, 30L, 2078L, 60L, 54L);
+ assertFullValues(after, 5 * MINUTE_IN_MILLIS, 1034L, 30L, 2078L, 60L, 54L);
}
public void testVarLong() throws Exception {
@@ -441,9 +440,10 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
}
- private static void assertValues(NetworkStatsHistory stats, int index, long rxBytes,
- long rxPackets, long txBytes, long txPackets, long operations) {
+ private static void assertValues(NetworkStatsHistory stats, int index, long activeTime,
+ long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) {
final NetworkStatsHistory.Entry entry = stats.getValues(index, null);
+ assertEquals("unexpected activeTime", activeTime, entry.activeTime);
assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
@@ -451,9 +451,17 @@ public class NetworkStatsHistoryTest extends AndroidTestCase {
assertEquals("unexpected operations", operations, entry.operations);
}
- private static void assertValues(NetworkStatsHistory stats, long start, long end, long rxBytes,
+ private static void assertFullValues(NetworkStatsHistory stats, long activeTime, long rxBytes,
long rxPackets, long txBytes, long txPackets, long operations) {
+ assertValues(stats, Long.MIN_VALUE, Long.MAX_VALUE, activeTime, rxBytes, rxPackets, txBytes,
+ txPackets, operations);
+ }
+
+ private static void assertValues(NetworkStatsHistory stats, long start, long end,
+ long activeTime, long rxBytes, long rxPackets, long txBytes, long txPackets,
+ long operations) {
final NetworkStatsHistory.Entry entry = stats.getValues(start, end, null);
+ assertEquals("unexpected activeTime", activeTime, entry.activeTime);
assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java
index 47ba88a..c36685d 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java
@@ -17,7 +17,9 @@
package android.net;
import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.SET_FOREGROUND;
import static android.net.NetworkStats.TAG_NONE;
+import static android.net.NetworkStats.UID_ALL;
import android.test.suitebuilder.annotation.SmallTest;
@@ -27,6 +29,7 @@ import junit.framework.TestCase;
public class NetworkStatsTest extends TestCase {
private static final String TEST_IFACE = "test0";
+ private static final String TEST_IFACE2 = "test2";
private static final int TEST_UID = 1001;
private static final long TEST_START = 1194220800000L;
@@ -135,6 +138,44 @@ public class NetworkStatsTest extends TestCase {
assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
}
+ public void testSubtractMissingRows() throws Exception {
+ final NetworkStats before = new NetworkStats(TEST_START, 2)
+ .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 0L, 0L, 0L, 0)
+ .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2048L, 0L, 0L, 0L, 0);
+
+ final NetworkStats after = new NetworkStats(TEST_START, 1)
+ .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2049L, 2L, 3L, 4L, 0);
+
+ final NetworkStats result = after.subtract(before);
+
+ // should silently drop omitted rows
+ assertEquals(1, result.size());
+ assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 1L, 2L, 3L, 4L, 0);
+ assertEquals(4L, result.getTotalBytes());
+ }
+
+ public void testTotalBytes() throws Exception {
+ final NetworkStats iface = new NetworkStats(TEST_START, 2)
+ .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 128L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 256L, 0L, 0L, 0L, 0L);
+ assertEquals(384L, iface.getTotalBytes());
+
+ final NetworkStats uidSet = new NetworkStats(TEST_START, 3)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
+ assertEquals(96L, uidSet.getTotalBytes());
+
+ final NetworkStats uidTag = new NetworkStats(TEST_START, 3)
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L);
+ assertEquals(64L, uidTag.getTotalBytes());
+ }
+
private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
final NetworkStats.Entry entry = stats.getValues(index, null);
diff --git a/core/tests/coretests/src/android/util/LocaleUtilTest.java b/core/tests/coretests/src/android/util/LocaleUtilTest.java
index 203781f..ff3d539 100644
--- a/core/tests/coretests/src/android/util/LocaleUtilTest.java
+++ b/core/tests/coretests/src/android/util/LocaleUtilTest.java
@@ -23,7 +23,6 @@ import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import static android.util.LocaleUtil.TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE;
-import static android.util.LocaleUtil.TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE;
public class LocaleUtilTest extends AndroidTestCase {
@@ -33,7 +32,7 @@ public class LocaleUtilTest extends AndroidTestCase {
args = {Locale.class}
)
public void testGetLayoutDirectionFromLocale() {
- assertEquals(TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE,
+ assertEquals(TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE,
LocaleUtil.getLayoutDirectionFromLocale(null));
assertEquals(TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE,
@@ -59,7 +58,7 @@ public class LocaleUtilTest extends AndroidTestCase {
assertEquals(LocaleUtil.TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE,
LocaleUtil.getLayoutDirectionFromLocale(Locale.US));
- assertEquals(LocaleUtil.TEXT_LAYOUT_DIRECTION_UNDEFINED_DO_NOT_USE,
+ assertEquals(LocaleUtil.TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE,
LocaleUtil.getLayoutDirectionFromLocale(Locale.ROOT));
assertEquals(LocaleUtil.TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE,
diff --git a/data/fonts/AndroidClock.ttf b/data/fonts/AndroidClock.ttf
index 7b550ee..6e0932e 100644
--- a/data/fonts/AndroidClock.ttf
+++ b/data/fonts/AndroidClock.ttf
Binary files differ
diff --git a/data/fonts/AndroidClock_Highlight.ttf b/data/fonts/AndroidClock_Highlight.ttf
index a95d548..6e0932e 100644
--- a/data/fonts/AndroidClock_Highlight.ttf
+++ b/data/fonts/AndroidClock_Highlight.ttf
Binary files differ
diff --git a/data/fonts/AndroidClock_Solid.ttf b/data/fonts/AndroidClock_Solid.ttf
index 108839e..6e0932e 100644
--- a/data/fonts/AndroidClock_Solid.ttf
+++ b/data/fonts/AndroidClock_Solid.ttf
Binary files differ
diff --git a/data/fonts/Roboto-Bold.ttf b/data/fonts/Roboto-Bold.ttf
index 32c1794..f9311fb 100755..100644
--- a/data/fonts/Roboto-Bold.ttf
+++ b/data/fonts/Roboto-Bold.ttf
Binary files differ
diff --git a/data/fonts/Roboto-BoldItalic.ttf b/data/fonts/Roboto-BoldItalic.ttf
index 551bae2..ae92697 100755..100644
--- a/data/fonts/Roboto-BoldItalic.ttf
+++ b/data/fonts/Roboto-BoldItalic.ttf
Binary files differ
diff --git a/data/fonts/Roboto-Italic.ttf b/data/fonts/Roboto-Italic.ttf
index 9795cc0..109b642 100755..100644
--- a/data/fonts/Roboto-Italic.ttf
+++ b/data/fonts/Roboto-Italic.ttf
Binary files differ
diff --git a/data/fonts/Roboto-Regular.ttf b/data/fonts/Roboto-Regular.ttf
index 8545f29..2568835 100755..100644
--- a/data/fonts/Roboto-Regular.ttf
+++ b/data/fonts/Roboto-Regular.ttf
Binary files differ
diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk
new file mode 100755
index 0000000..4f23716
--- /dev/null
+++ b/data/sounds/AudioPackage7.mk
@@ -0,0 +1,63 @@
+#
+# Audio Package 7 - Tuna
+#
+# Include this file in a product makefile to include these audio files
+#
+#
+
+LOCAL_PATH:= frameworks/base/data/sounds
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/alarms/ogg/Cesium.ogg:system/media/audio/alarms/Cesium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Plutonium.ogg:system/media/audio/alarms/Plutonium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Scandium.ogg:system/media/audio/alarms/Scandium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Curium.ogg:system/media/audio/alarms/Curium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Fermium.ogg:system/media/audio/alarms/Fermium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Nobelium.ogg:system/media/audio/alarms/Nobelium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Copernicium.ogg:system/media/audio/alarms/Copernicium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Hassium.ogg:system/media/audio/alarms/Hassium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Neptunium.ogg:system/media/audio/alarms/Neptunium.ogg \
+ $(LOCAL_PATH)/effects/ogg/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressStandard_24.ogg:system/media/audio/ui/KeypressStandard.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressSpacebar_24.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressDelete_24.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressReturn_24.ogg:system/media/audio/ui/KeypressReturn.ogg \
+ $(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
+ $(LOCAL_PATH)/effects/ogg/CameraShutter.ogg:system/media/audio/ui/camera_click.ogg \
+ $(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \
+ $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \
+ $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \
+ $(LOCAL_PATH)/effects/ogg/Lock.ogg:system/media/audio/ui/Lock.ogg \
+ $(LOCAL_PATH)/effects/ogg/Unlock.ogg:system/media/audio/ui/Unlock.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Altair.ogg:system/media/audio/notifications/Altair.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Antares.ogg:system/media/audio/notifications/Antares.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Deneb.ogg:system/media/audio/notifications/Deneb.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Lalande.ogg:system/media/audio/notifications/Lalande.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Hojus.ogg:system/media/audio/notifications/Hojus.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Proxima.ogg:system/media/audio/notifications/Proxima.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Betelgeuse.ogg:system/media/audio/notifications/Betelgeuse.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Mira.ogg:system/media/audio/notifications/Mira.ogg \
+ $(LOCAL_PATH)/notifications/ogg/Upsilon.ogg:system/media/audio/notifications/Upsilon.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Andromeda.ogg:system/media/audio/ringtones/Andromeda.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Aquila.ogg:system/media/audio/ringtones/Aquila.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/ArgoNavis.ogg:system/media/audio/ringtones/ArgoNavis.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Bootes.ogg:system/media/audio/ringtones/Bootes.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/CanisMajor.ogg:system/media/audio/ringtones/CanisMajor.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Carina.ogg:system/media/audio/ringtones/Carina.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Cassiopeia.ogg:system/media/audio/ringtones/Cassiopeia.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Centaurus.ogg:system/media/audio/ringtones/Centaurus.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Cygnus.ogg:system/media/audio/ringtones/Cygnus.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Draco.ogg:system/media/audio/ringtones/Draco.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Hydra.ogg:system/media/audio/ringtones/Hydra.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Lyra.ogg:system/media/audio/ringtones/Lyra.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Machina.ogg:system/media/audio/ringtones/Machina.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Orion.ogg:system/media/audio/ringtones/Orion.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Pegasus.ogg:system/media/audio/ringtones/Pegasus.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Pyxis.ogg:system/media/audio/ringtones/Pyxis.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Rigel.ogg:system/media/audio/ringtones/Rigel.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Scarabaeus.ogg:system/media/audio/ringtones/Scarabaeus.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Sceptrum.ogg:system/media/audio/ringtones/Sceptrum.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Testudo.ogg:system/media/audio/ringtones/Testudo.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/UrsaMinor.ogg:system/media/audio/ringtones/UrsaMinor.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Vespa.ogg:system/media/audio/ringtones/Vespa.ogg
diff --git a/data/sounds/alarms/ogg/Copernicium.ogg b/data/sounds/alarms/ogg/Copernicium.ogg
new file mode 100644
index 0000000..c619e8b
--- /dev/null
+++ b/data/sounds/alarms/ogg/Copernicium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Curium.ogg b/data/sounds/alarms/ogg/Curium.ogg
new file mode 100644
index 0000000..ebce391
--- /dev/null
+++ b/data/sounds/alarms/ogg/Curium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Fermium.ogg b/data/sounds/alarms/ogg/Fermium.ogg
new file mode 100644
index 0000000..6132565
--- /dev/null
+++ b/data/sounds/alarms/ogg/Fermium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Hassium.ogg b/data/sounds/alarms/ogg/Hassium.ogg
new file mode 100644
index 0000000..408b7c2
--- /dev/null
+++ b/data/sounds/alarms/ogg/Hassium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Neptunium.ogg b/data/sounds/alarms/ogg/Neptunium.ogg
new file mode 100644
index 0000000..058e2db
--- /dev/null
+++ b/data/sounds/alarms/ogg/Neptunium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Nobelium.ogg b/data/sounds/alarms/ogg/Nobelium.ogg
new file mode 100644
index 0000000..33878c9
--- /dev/null
+++ b/data/sounds/alarms/ogg/Nobelium.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/CameraShutter.ogg b/data/sounds/effects/ogg/CameraShutter.ogg
new file mode 100644
index 0000000..1b67dac
--- /dev/null
+++ b/data/sounds/effects/ogg/CameraShutter.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Dock.ogg b/data/sounds/effects/ogg/Dock.ogg
index a1c1f2c..caa8eeb 100755..100644
--- a/data/sounds/effects/ogg/Dock.ogg
+++ b/data/sounds/effects/ogg/Dock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressDelete_24.ogg b/data/sounds/effects/ogg/KeypressDelete_24.ogg
new file mode 100644
index 0000000..2503c3e
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressDelete_24.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressReturn_24.ogg b/data/sounds/effects/ogg/KeypressReturn_24.ogg
new file mode 100644
index 0000000..342eb12
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressReturn_24.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressSpacebar_24.ogg b/data/sounds/effects/ogg/KeypressSpacebar_24.ogg
new file mode 100644
index 0000000..9f17dd2
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressSpacebar_24.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressStandard_24.ogg b/data/sounds/effects/ogg/KeypressStandard_24.ogg
new file mode 100644
index 0000000..80d7d6d
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressStandard_24.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Lock.ogg b/data/sounds/effects/ogg/Lock.ogg
index deeba68..471258a 100755..100644
--- a/data/sounds/effects/ogg/Lock.ogg
+++ b/data/sounds/effects/ogg/Lock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Media_Volume.ogg b/data/sounds/effects/ogg/Media_Volume.ogg
index 88db9d9..b06656f 100644
--- a/data/sounds/effects/ogg/Media_Volume.ogg
+++ b/data/sounds/effects/ogg/Media_Volume.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Undock.ogg b/data/sounds/effects/ogg/Undock.ogg
index 91e410e..28918f7 100755..100644
--- a/data/sounds/effects/ogg/Undock.ogg
+++ b/data/sounds/effects/ogg/Undock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Unlock.ogg b/data/sounds/effects/ogg/Unlock.ogg
index ac50288..1cd537b 100755..100644
--- a/data/sounds/effects/ogg/Unlock.ogg
+++ b/data/sounds/effects/ogg/Unlock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/VideoRecord.ogg b/data/sounds/effects/ogg/VideoRecord.ogg
index 7afe9e6..28455c9 100644
--- a/data/sounds/effects/ogg/VideoRecord.ogg
+++ b/data/sounds/effects/ogg/VideoRecord.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Altair.ogg b/data/sounds/notifications/ogg/Altair.ogg
new file mode 100755
index 0000000..d84b59e
--- /dev/null
+++ b/data/sounds/notifications/ogg/Altair.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Antares.ogg b/data/sounds/notifications/ogg/Antares.ogg
new file mode 100755
index 0000000..9d60917
--- /dev/null
+++ b/data/sounds/notifications/ogg/Antares.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Betelgeuse.ogg b/data/sounds/notifications/ogg/Betelgeuse.ogg
new file mode 100644
index 0000000..83c7722
--- /dev/null
+++ b/data/sounds/notifications/ogg/Betelgeuse.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Deneb.ogg b/data/sounds/notifications/ogg/Deneb.ogg
new file mode 100755
index 0000000..e58b3b6
--- /dev/null
+++ b/data/sounds/notifications/ogg/Deneb.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Hojus.ogg b/data/sounds/notifications/ogg/Hojus.ogg
new file mode 100644
index 0000000..fc8f73f
--- /dev/null
+++ b/data/sounds/notifications/ogg/Hojus.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Lalande.ogg b/data/sounds/notifications/ogg/Lalande.ogg
new file mode 100755
index 0000000..b6e253a
--- /dev/null
+++ b/data/sounds/notifications/ogg/Lalande.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Mira.ogg b/data/sounds/notifications/ogg/Mira.ogg
new file mode 100644
index 0000000..f21e3c4
--- /dev/null
+++ b/data/sounds/notifications/ogg/Mira.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Proxima.ogg b/data/sounds/notifications/ogg/Proxima.ogg
new file mode 100644
index 0000000..235b5ca
--- /dev/null
+++ b/data/sounds/notifications/ogg/Proxima.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Upsilon.ogg b/data/sounds/notifications/ogg/Upsilon.ogg
new file mode 100644
index 0000000..036dcad
--- /dev/null
+++ b/data/sounds/notifications/ogg/Upsilon.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Cassiopeia.ogg b/data/sounds/ringtones/ogg/Cassiopeia.ogg
index 942d4e4..61c4d27 100644
--- a/data/sounds/ringtones/ogg/Cassiopeia.ogg
+++ b/data/sounds/ringtones/ogg/Cassiopeia.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Lyra.ogg b/data/sounds/ringtones/ogg/Lyra.ogg
index e4bf37a..b7f740d 100644
--- a/data/sounds/ringtones/ogg/Lyra.ogg
+++ b/data/sounds/ringtones/ogg/Lyra.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Sceptrum.ogg b/data/sounds/ringtones/ogg/Sceptrum.ogg
index a006afe..89d64d70 100644
--- a/data/sounds/ringtones/ogg/Sceptrum.ogg
+++ b/data/sounds/ringtones/ogg/Sceptrum.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Solarium.ogg b/data/sounds/ringtones/ogg/Solarium.ogg
index 108ba11..361367a 100644
--- a/data/sounds/ringtones/ogg/Solarium.ogg
+++ b/data/sounds/ringtones/ogg/Solarium.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/UrsaMinor.ogg b/data/sounds/ringtones/ogg/UrsaMinor.ogg
index 5591d73..a80801d 100644
--- a/data/sounds/ringtones/ogg/UrsaMinor.ogg
+++ b/data/sounds/ringtones/ogg/UrsaMinor.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Vespa.ogg b/data/sounds/ringtones/ogg/Vespa.ogg
index 6fb8ebd..1f75ec8 100644
--- a/data/sounds/ringtones/ogg/Vespa.ogg
+++ b/data/sounds/ringtones/ogg/Vespa.ogg
Binary files differ
diff --git a/docs/html/guide/appendix/install-location.jd b/docs/html/guide/appendix/install-location.jd
index 617f4fc..292d3e7 100644
--- a/docs/html/guide/appendix/install-location.jd
+++ b/docs/html/guide/appendix/install-location.jd
@@ -195,7 +195,7 @@ been made.</p>
<p>In simple terms, anything that does not use the features listed in the previous section
are safe when installed on external storage. Large games are more commonly the types of
applications that should allow installation on external storage, because games don't typically
-provide additional services when innactive. When external storage becomes unavailable and a game
+provide additional services when inactive. When external storage becomes unavailable and a game
process is killed, there should be no visible effect when the storage becomes available again and
the user restarts the game (assuming that the game properly saved its state during the normal
<a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>).</p>
diff --git a/docs/html/guide/developing/device.jd b/docs/html/guide/developing/device.jd
index bde170e..e08119f 100644
--- a/docs/html/guide/developing/device.jd
+++ b/docs/html/guide/developing/device.jd
@@ -41,7 +41,8 @@ Dev Phone, see the <a href="http://market.android.com/publish">Android Market</a
<p class="note"><strong>Note:</strong> When developing on a device, keep in mind that you should
still use the <a
-href="{@docRoot}guide/developing/devices/emulator.html">Android emulator</a> to test your application
+href="{@docRoot}guide/developing/devices/emulator.html">Android emulator</a> to test your
+application
on configurations that are not equivalent to those of your real device. Although the emulator
does not allow you to test every device feature (such as the accelerometer), it does
allow you to verify that your application functions properly on different versions of the Android
@@ -56,14 +57,22 @@ would on the emulator. Before you can start, there are just a few things to do:<
<ol>
<li>Declare your application as "debuggable" in your Android Manifest.
<p>In Eclipse, you can do this from the <b>Application</b> tab when viewing the Manifest
- (on the right side, set <b>Debuggable</b> to <em>true</em>). Otherwise, in the <code>AndroidManifest.xml</code>
- file, add <code>android:debuggable="true"</code> to the <code>&lt;application></code> element.</p>
+ (on the right side, set <b>Debuggable</b> to <em>true</em>). Otherwise, in the
+<code>AndroidManifest.xml</code>
+ file, add <code>android:debuggable="true"</code> to the <code>&lt;application></code>
+element.</p>
+ </li>
+ <li>Set up your device to allow installation of non-Market applications. <p>On
+the device, go to <strong>Settings > Applications</strong> and enable
+
+<strong>Unknown sources</strong>.</p>
+
</li>
<li>Turn on "USB Debugging" on your device.
- <p>On the device, go to the home screen, press <b>MENU</b>, select <b>Applications</b> > <b>Development</b>,
- then enable <b>USB debugging</b>.</p>
+ <p>On the device, go to <strong>Settings > Applications > Development</strong>
+ and enable <strong>USB debugging</strong>.</p>
</li>
- <li>Setup your system to detect your device.
+ <li>Set up your system to detect your device.
<ul>
<li>If you're developing on Windows, you need to install a USB driver
for adb. If you're using an Android Developer Phone (ADP), Nexus One, or Nexus S,
@@ -71,27 +80,37 @@ would on the emulator. Before you can start, there are just a few things to do:<
Driver</a>. Otherwise, you can find a link to the appropriate OEM driver in the
<a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a> document.</li>
<li>If you're developing on Mac OS X, it just works. Skip this step.</li>
- <li>If you're developing on Ubuntu Linux, you need to add a rules file
-that contains a USB configuration for each type of device you want to use for
-development. Each device manufacturer uses a different vendor ID. The
-example rules files below show how to add an entry for a single vendor ID
-(the HTC vendor ID). In order to support more devices, you will need additional
-lines of the same format that provide a different value for the
-<code>SYSFS{idVendor}</code> property. For other IDs, see the table of <a
-href="#VendorIds">USB Vendor IDs</a>, below.
- <ol>
+
+ <li>If you're developing on Ubuntu Linux, you need to add a <a
+href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">
+<code>udev</code></a>
+rules file that contains a USB configuration for each type of device
+you want to use for development. In the rules file, each device manufacturer
+is identified by a unique vendor ID, as specified by the
+<code>ATTR{idVendor}</code> property. For a list of vendor IDs, see <a
+href="#VendorIds">USB Vendor IDs</a>, below. To set up device detection on
+Ubuntu Linux:
+
+ <ol type="a">
<li>Log in as root and create this file:
- <code>/etc/udev/rules.d/51-android.rules</code>.
- <p>For Gusty/Hardy, edit the file to read:<br/>
- <code>SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4",
- MODE="0666"</code></p>
-
- <p>For Dapper, edit the file to read:<br/>
- <code>SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4",
- MODE="0666"</code></p>
+ <code>/etc/udev/rules.d/51-android.rules</code></span>.
+ <p>Use this format to add each vendor to the file:<br/>
+ <code>SUBSYSTEM==&quot;usb&quot;, ATTR{idVendor}==&quot;0bb4&quot;, MODE=&quot;0666&quot;, GROUP=&quot;plugdev&quot;</code>
+ <br /><br />
+
+ In this example, the vendor ID is for HTC. The <code>MODE</code>
+assignment specifies read/write permissions, and <code>GROUP</code> defines
+which Unix group owns the device node. </p>
+
+ <p class="note"><strong>Note:</strong> The rule syntax
+may vary slightly depending on your environment. Consult the <code>udev</code>
+documentation for your system as needed. For an overview of rule syntax, see
+this guide to <a
+href="http://www.reactivated.net/writing_udev_rules.html">writing udev
+rules</a>.</p>
</li>
<li>Now execute:<br/>
- <code>chmod a+r /etc/udev/rules.d/51-android.rules</code>
+ <code>chmod a+r /etc/udev/rules.d/51-android.rules</code>
</li>
</ol>
</li>
@@ -99,79 +118,143 @@ href="#VendorIds">USB Vendor IDs</a>, below.
</li>
</ol>
-<p>You can verify that your device is connected by executing <code>adb devices</code> from your
-SDK {@code platform-tools/} directory. If connected, you'll see the device name listed as a
-"device."</p>
-
-<p>If using Eclipse, run or debug as usual. You will be presented
-with a <b>Device Chooser</b> dialog that lists the available emulator(s) and connected device(s).
-Select the device upon which you want to install and run the application.</p>
+<p>You can verify that your device is connected by executing <code>adb
+devices</code> from your SDK {@code platform-tools/} directory. If connected,
+you'll see the device name listed as a "device."</p>
-<p>If using the <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (adb),
-you can issue commands with the <code>-d</code> flag to target your
-connected device.</p>
+<p>If using Eclipse, run or debug your application as usual. You will be
+presented with a <b>Device Chooser</b> dialog that lists the available
+emulator(s) and connected device(s). Select the device upon which you want to
+install and run the application.</p>
+<p>If using the <a href="{@docRoot}guide/developing/tools/adb.html">Android
+Debug Bridge</a> (adb), you can issue commands with the <code>-d</code> flag to
+target your connected device.</p>
<h3 id="VendorIds">USB Vendor IDs</h3>
-<p>This table provides a reference to the vendor IDs needed in order to add
-USB device support on Linux. The USB Vendor ID is the value given to the
-<code>SYSFS{idVendor}</code> property in the rules file, as described in step 3, above.</p>
+
+<p>This table provides a reference to the vendor IDs needed in order to add USB
+device support on Linux. The USB Vendor ID is the value given to the
+<code>ATTR{idVendor}</code> property in the rules file, as described
+above.</p>
<table>
<tr>
<th>Company</th><th>USB Vendor ID</th></tr>
<tr>
<td>Acer</td>
- <td><code>0502</code></td></tr>
+ <td><code>0502</code></td>
+ </tr>
+ <tr>
+ <td>ASUS</td>
+ <td><code>0B05</code></td>
+ </tr>
<tr>
<td>Dell</td>
- <td><code>413c</code></td></tr>
+ <td><code>413C</code></td>
+ </tr>
<tr>
<td>Foxconn</td>
- <td><code>0489</code></td></tr>
+ <td><code>0489</code></td>
+ </tr>
<tr>
<td>Garmin-Asus</td>
- <td><code>091E</code></td></tr>
+ <td><code>091E</code></td>
+ </tr>
<tr>
<td>Google</td>
- <td><code>18d1</code></td></tr>
+ <td><code>18D1</code></td>
+ </tr>
<tr>
<td>HTC</td>
- <td><code>0bb4</code></td></tr>
+ <td><code>0BB4</code></td>
+ </tr>
<tr>
<td>Huawei</td>
- <td><code>12d1</code></td></tr>
+ <td><code>12D1</code></td>
+ </tr>
<tr>
<td>K-Touch</td>
- <td><code>24e3</code></td></tr>
+ <td><code>24E3</code></td>
+ </tr>
+ <tr>
+ <td>KT Tech</td>
+ <td><code>2116</code></td>
+ </tr>
<tr>
<td>Kyocera</td>
- <td><code>0482</code></td></tr>
+ <td><code>0482</code></td>
+ </tr>
<tr>
<td>Lenevo</td>
- <td><code>17EF</code></td></tr>
+ <td><code>17EF</code></td>
+ </tr>
<tr>
<td>LG</td>
- <td><code>1004</code></td></tr>
+ <td><code>1004</code></td>
+ </tr>
<tr>
<td>Motorola</td>
- <td><code>22b8</code></td></tr>
+ <td><code>22B8</code></td>
+ </tr>
+ <tr>
+ <td>NEC</td>
+ <td><code>0409</code></td>
+ </tr>
+ <tr>
+ <td>Nook</td>
+ <td><code>2080</code></td>
+ </tr>
<tr>
<td>Nvidia</td>
- <td><code>0955</code></td></tr>
+ <td><code>0955</code></td>
+ </tr>
+ <tr>
+ <td>OTGV</td>
+ <td><code>2257</code></td>
+ </tr>
<tr>
<td>Pantech</td>
- <td><code>10A9</code></td></tr>
+ <td><code>10A9</code></td>
+ </tr>
+ <tr>
+ <td>Pegatron</td>
+ <td><code>1D4D</code></td>
+ </tr>
+ <tr>
+ <td>Philips</td>
+ <td><code>0471</code></td>
+ </tr>
+ <tr>
+ <td>PMC-Sierra</td>
+ <td><code>04DA</code></td>
+ </tr>
+ <tr>
+ <td>Qualcomm</td>
+ <td><code>05C6</code></td>
+ </tr>
+ <tr>
+ <td>SK Telesys</td>
+ <td><code>1F53</code></td>
+ </tr>
<tr>
<td>Samsung</td>
- <td><code>04e8</code></td></tr>
+ <td><code>04E8</code></td>
+ </tr>
<tr>
<td>Sharp</td>
- <td><code>04dd</code></td></tr>
+ <td><code>04DD</code></td>
+ </tr>
<tr>
<td>Sony Ericsson</td>
- <td><code>0fce</code></td></tr>
+ <td><code>0FCE</code></td>
+ </tr>
+ <tr>
+ <td>Toshiba</td>
+ <td><code>0930</code></td>
+ </tr>
<tr>
<td>ZTE</td>
- <td><code>19D2</code></td></tr>
+ <td><code>19D2</code></td>
+ </tr>
</table>
diff --git a/docs/html/guide/topics/usb/index.jd b/docs/html/guide/topics/usb/index.jd
index 3e2a18b..6dc8ec5 100644
--- a/docs/html/guide/topics/usb/index.jd
+++ b/docs/html/guide/topics/usb/index.jd
@@ -6,9 +6,9 @@ page.title=USB Host and Accessory
<h2>Topics</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/USB/accessory.jd">USB Accessory</a></li>
+ <li><a href="{@docRoot}guide/topics/usb/accessory.html">USB Accessory</a></li>
- <li><a href="{@docRoot}guide/topics/USB/host.jd">USB Host</a></li>
+ <li><a href="{@docRoot}guide/topics/usb/host.html">USB Host</a></li>
</ol>
</div>
</div>
diff --git a/docs/html/resources/tutorials/hello-world.jd b/docs/html/resources/tutorials/hello-world.jd
index b11770f..9afab6a 100644
--- a/docs/html/resources/tutorials/hello-world.jd
+++ b/docs/html/resources/tutorials/hello-world.jd
@@ -18,16 +18,14 @@ parent.link=../browser.html?tag=tutorial
</div>
</div>
-<p>As a developer, you know that the first impression
-of a development framework is how easy it is to write "Hello,
-World." Well, on Android, it's pretty easy.
-It's particularly easy if you're using Eclipse as your IDE, because we've provided a
-great plugin that handles your project creation and management to greatly speed-up your
-development cycles.</p>
+<p>As a developer, you know that the first impression of a development framework is how easy it is
+to write "Hello, World." Well, on Android, it's pretty easy. It's particularly easy if you're using
+Eclipse as your IDE, because we've provided a great plugin that handles your project creation and
+management to greatly speed up your development cycles.</p>
-<p>This tutorial assumes that you're using Eclipse. If you're not, see
-<a href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>.
-You can then return to this tutorial and ignore anything about Eclipse.</p>
+<p>This tutorial assumes that you're using Eclipse. If you're using the command line, see
+<a href="{@docRoot}/guide/developing/building/building-cmdline.html">Building and Running from the
+Command Line</a>. You can then return to this tutorial and ignore anything about Eclipse.</p>
<p>Before you start, you should already have the SDK installed, and if you're
using Eclipse, you should have installed the ADT plugin as well. If you have not
@@ -43,12 +41,12 @@ you need to do it now.</p>
<p>To install a platform in Eclipse:</p>
<ol>
-
+
<li>In the Android SDK and AVD Manager, choose <strong>Available
-Packages</strong> in the left panel.</li>
-
-<li>Click the repository site checkbox to display the components
-available for installation.</li>
+Packages</strong> in the left panel.</li>
+
+<li>In the right panel, expand the Android Repository list to display
+the components available for installation.</li>
<li>Select at least one platform to install, and click <strong>Install
Selected</strong>. If you aren't sure which platform to install, use the latest
@@ -59,15 +57,14 @@ version.</li>
<div class="sidebox-wrapper">
<div class="sidebox">
- <p>To learn more about how to use AVDs and the options
- available to you, refer to the
- <a href="{@docRoot}guide/developing/tools/avd.html">Android
- Virtual Devices</a> document.</p>
+ <p>To learn more about how to use AVDs and the options
+ available to you, see <a href="{@docRoot}guide/developing/devices/index.html">Managing
+ Virtual Devices</a>.</p>
</div>
</div>
<p>In this tutorial, you will run your application in the Android Emulator.
-Before you can launch the emulator, you must create an
+Before you can launch the emulator, you must create an
Android Virtual Device (AVD). An AVD defines the system image and
device settings used by the emulator.</p>
@@ -75,32 +72,31 @@ device settings used by the emulator.</p>
<p>To create an AVD:</p>
<ol>
- <li>In Eclipse, choose <strong>Window &gt; Android SDK and AVD Manager</strong>.
+ <li>In Eclipse, select <strong>Window &gt; Android SDK and AVD Manager</strong>.</li>
<li>Select <strong>Virtual Devices</strong> in the left panel.</li>
- <li>Click <strong>New</strong>. </li>
-
-
-<p>The <strong>Create New AVD</strong> dialog appears.</p>
-
+ <li>Click <strong>New...</strong>.
+ <p>The <strong>Create New AVD</strong> dialog appears.</p>
+ </li>
<li>Type the name of the AVD, such as "my_avd".</li>
- <li>Choose a target. The target is the platform (that is, the version of the Android
- SDK, such as 2.1) you want to run on the emulator. </li>
-
- <p>You can ignore the rest of the fields for now. </p>
+ <li>Choose a target.
+ <p>The target is the platform (that is, the version of the Android SDK, such as 2.3.3) you want
+ to run on the emulator. For this tutorial, choose the latest platform that you have installed
+ and ignore the rest of the fields.</p>
+ </li>
<li>Click <strong>Create AVD</strong>.</li>
</ol>
<h2 id="create">Create a New Android Project</h2>
-<p>After you've created an AVD, the next step is to start a new
-Android project in Eclipse.</p>
+<p>After you've created an AVD you can move to the next step and start a new Android project in
+Eclipse.</p>
<ol>
- <li>From Eclipse, select <strong>File &gt; New &gt; Project</strong>.
+ <li>In Eclipse, select <strong>File &gt; New &gt; Project...</strong>.
<p>If the ADT
Plugin for Eclipse has been successfully installed, the resulting dialog
should have a folder labeled "Android" which should contain
- "Android Project". (After you create one or more Android projects, an entry for
+ "Android Project". (After you create one or more Android projects, an entry for
"Android XML File" will also be available.)</p>
</li>
@@ -111,6 +107,8 @@ Android project in Eclipse.</p>
<li>Fill in the project details with the following values:
<ul>
<li><em>Project name:</em> HelloAndroid</li>
+ <li><em>Build Target:</em> Select a platform version that is equal to or lower than the
+ target you chose for your AVD.</li>
<li><em>Application name:</em> Hello, Android</li>
<li><em>Package name:</em> com.example.helloandroid (or your own private namespace)</li>
<li><em>Create Activity:</em> HelloAndroid</li>
@@ -120,55 +118,60 @@ Android project in Eclipse.</p>
<a href="images/hello_world_1.png"><img src="images/hello_world_1.png" style="height:400px" alt="" /></a>
<p>Here is a description of each field:</p>
-
+
<dl>
<dt><em>Project Name</em></dt>
- <dd>This is the Eclipse Project name &mdash; the name of the directory
- that will contain the project files.</dd>
+ <dd>This is the Eclipse project name &mdash; the name of the directory
+ that contains the project files.</dd>
+ <dt><em>Build Target</em></dt>
+ <dd>This is the version of the Android SDK that you're using to build your
+ application. For example, if you choose Android 2.1, your application will be
+ compiled against the Android 2.1 platform library. The target you choose here
+ does not have to match the target you chose for your AVD; however, the target must
+ be equal to or lower than the target you chose for your AVD. Android
+ applications are forward-compatible, which means an application will run on the
+ platform against which it is built as well as all platforms that are released in the
+ future. For example, an application that is built against the 2.1 platform library
+ will run normally on an AVD or device that is running the 2.3.3. The reverse is not
+ true.</dd>
<dt><em>Application Name</em></dt>
<dd>This is the human-readable title for your application &mdash; the name that
- will appear on the Android device.</dd>
+ appears on the Android device.</dd>
<dt><em>Package Name</em></dt>
<dd>This is the package namespace (following the same rules as for
packages in the Java programming language) that you want all your source code to
reside under. This also sets the package name under which the stub
- Activity will be generated.
+ Activity is generated.
<p>Your package name must be unique across
- all packages installed on the Android system; for this reason, it's
+ all packages installed on the Android system; for this reason, it's
important to use a standard domain-style package for your
applications. The example above uses the "com.example" namespace, which is
a namespace reserved for example documentation &mdash;
when you develop your own applications, you should use a namespace that's
appropriate to your organization or entity.</p></dd>
<dt><em>Create Activity</em></dt>
- <dd>This is the name for the class stub that will be generated by the plugin.
- This will be a subclass of Android's {@link android.app.Activity} class. An
- Activity is simply a class that can run and do work. It can create a UI if it
+ <dd>This is the name for the class stub that is generated by the plugin.
+ This is a subclass of Android's {@link android.app.Activity} class. An
+ Activity is simply a class that can run and do work. It can create a UI if it
chooses, but it doesn't need to. As the checkbox suggests, this is optional, but an
Activity is almost always used as the basis for an application.</dd>
<dt><em>Min SDK Version</em></dt>
- <dd>This value specifies the minimum API Level required by your application. For
- more information, see <a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.
+ <dd>This value specifies the minimum API Level on which your application will run.
+ The <em>Min SDK Version</em> should be the same as the <em>Build Target</em> you
+ chose. For example, if the <em>Build Target</em> is Android 2.1, then the <em>Min
+ SDK Version</em> should be 7 or lower (it can never be higher than 7). For more
+ information, see
+ <a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.
</dd>
</dl>
-
- <p><em>Other fields</em>: The checkbox for "Use default location" allows you to change
- the location on disk where the project's files will be generated and stored. "Build Target"
- is the platform target that your application will be compiled against
- (this should be selected automatically, based on your Min SDK Version).</p>
-
- <p class="note">Notice that the "Build Target" you've selected uses the Android 1.1
- platform. This means that your application will be compiled against the Android 1.1
- platform library. If you recall, the AVD created above runs on the Android 1.5 platform.
- These don't have to match; Android applications are forward-compatible, so an application
- built against the 1.1 platform library will run normally on the 1.5 platform. The reverse
- is not true.</p>
+
+ <p><em>Other fields</em>: The checkbox for "Use default location" allows you to change
+ the location on disk where the project's files are generated and stored.</p>
</li>
</ol>
-<p>Your Android project is now ready. It should be visible in the Package
-Explorer on the left.
-Open the <code>HelloAndroid.java</code> file, located inside <em>HelloAndroid > src >
+<p>Your Android project is now ready. It should be visible in the Package Explorer on the left. Open
+the <code>HelloAndroid.java</code> file, located inside <em>HelloAndroid > src >
com.example.helloandroid</em>). It should look like this:</p>
<pre>
@@ -186,13 +189,13 @@ public class HelloAndroid extends Activity {
}
}</pre>
-<p>Notice that the class is based on the {@link android.app.Activity} class. An Activity is a
-single application entity that is used to perform actions. An application may have many separate
-activities, but the user interacts with them one at a time. The
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method
-will be called by the Android system when your Activity starts &mdash;
+<p>Notice that the class is based on the {@link android.app.Activity} class. An Activity is a
+single application entity that is used to perform actions. An application may have many separate
+activities, but the user interacts with them one at a time. The
+{@link android.app.Activity#onCreate(Bundle) onCreate()} method
+is called by the Android system when your Activity starts &mdash;
it is where you should perform all initialization and UI setup. An activity is not required to
-have a user interface, but usually will.</p>
+have a user interface, but usually does.</p>
<p>Now let's modify some code! </p>
@@ -221,11 +224,12 @@ public class HelloAndroid extends Activity {
}</pre>
<p class="note"><strong>Tip:</strong> An easy way to add import packages to your project is
-to press <strong>Ctrl-Shift-O</strong> (<strong>Cmd-Shift-O</strong>, on Mac). This is an Eclipse
-shortcut that identifies missing packages based on your code and adds them for you.</p>
+to press <strong>Ctrl-Shift-O</strong> (<strong>Cmd-Shift-O</strong>, on Mac). This is an Eclipse
+shortcut that identifies missing packages based on your code and adds them for you. You may have
+to expand the <code>import</code> statements in your code for this to work.</p>
<p>An Android user interface is composed of hierarchies of objects called
-Views. A {@link android.view.View} is a drawable object used as an element in your UI layout,
+Views. A {@link android.view.View} is a drawable object used as an element in your UI layout,
such as a button, image, or (in this case) a text label. Each of these objects is a subclass
of the View class and the subclass that handles text is {@link android.widget.TextView}.</p>
@@ -237,7 +241,7 @@ on. The Activity class inherits from Context, and because your
HelloAndroid class is a subclass of Activity, it is also a Context. So, you can
pass <code>this</code> as your Context reference to the TextView.</p>
-<p>Next, you define the text content with
+<p>Next, you define the text content with
{@link android.widget.TextView#setText(CharSequence) setText()}.</p>
<p>Finally, you pass the TextView to
@@ -277,7 +281,7 @@ and launches the default Activity. You should now see something like this:</p>
<p>The "Hello, Android" you see in the grey bar is actually the application title. The Eclipse plugin
creates this automatically (the string is defined in the <code>res/values/strings.xml</code> file and referenced
-by your <code>AndroidManifest.xml</code> file). The text below the title is the actual text that you have
+by your <code>AndroidManifest.xml</code> file). The text below the title is the actual text that you have
created in the TextView object.</p>
<p>That concludes the basic "Hello World" tutorial, but you should continue reading for some more
@@ -307,7 +311,7 @@ programmatically-constructed example:</p>
android:text=&quot;@string/hello&quot;/&gt;</pre>
<p>The general structure of an Android XML layout file is simple: it's a tree
-of XML elements, wherein each node is the name of a View class
+of XML elements, wherein each node is the name of a View class
(this example, however, is just one View element). You can use the
name of any class that extends {@link android.view.View} as an element in your XML layouts,
including custom View classes you define in your own code. This
@@ -316,7 +320,7 @@ structure and syntax than you would use in a programmatic layout. This model is
by the web development model, wherein you can separate the presentation of your
application (its UI) from the application logic used to fetch and fill in data.</p>
-<p>In the above XML example, there's just one View element: the <code>TextView</code>,
+<p>In the above XML example, there's just one View element: the <code>TextView</code>,
which has five XML attributes. Here's a summary of what they mean:</p>
<table>
@@ -343,7 +347,7 @@ which has five XML attributes. Here's a summary of what they mean:</p>
</td>
<td>
This attribute assigns a unique identifier to the <code>TextView</code> element.
- You can use the assigned ID to reference this View from your source code or from other
+ You can use the assigned ID to reference this View from your source code or from other
XML resource declarations.
</td>
</tr>
@@ -352,7 +356,7 @@ which has five XML attributes. Here's a summary of what they mean:</p>
<code>android:layout_width</code>
</td>
<td>
- This attribute defines how much of the available width on the screen this View should consume.
+ This attribute defines how much of the available width on the screen this View should consume.
In this case, it's the only View so you want it to take up the entire screen, which is what a value of "fill_parent" means.<br>
</td>
</tr>
@@ -369,7 +373,7 @@ which has five XML attributes. Here's a summary of what they mean:</p>
<code>android:text</code>
</td>
<td>
- This sets the text that the TextView should display. In this example, you use a string
+ This sets the text that the TextView should display. In this example, you use a string
resource instead of a hard-coded string value.
The <em>hello</em> string is defined in the <em>res/values/strings.xml</em> file. This is the
recommended practice for inserting strings to your application, because it makes the localization
@@ -396,17 +400,17 @@ such as images, sounds, and localized strings.</p>
</div>
</div>
-<p>The Eclipse plugin automatically creates one of these layout files for you: main.xml.
-In the "Hello World" application you just completed, this file was ignored and you created a
+<p>The Eclipse plugin automatically creates one of these layout files for you: main.xml.
+In the "Hello World" application you just completed, this file was ignored and you created a
layout programmatically. This was meant to teach you more
-about the Android framework, but you should almost always define your layout
+about the Android framework, but you should almost always define your layout
in an XML file instead of in your code.
-The following procedures will instruct you how to change your
+The following procedures will instruct you how to change your
existing application to use an XML layout.</p>
<ol>
<li>In the Eclipse Package Explorer, expand the
-<code>/res/layout/</code> folder and open <code>main.xml</code> (once opened, you might need to click
+<code>/res/layout/</code> folder and open <code>main.xml</code> (once opened, you might need to click
the "main.xml" tab at the bottom of the window to see the XML source). Replace the contents with
the following XML:
@@ -421,7 +425,7 @@ the following XML:
<li>Inside the <code>res/values/</code> folder, open <code>strings.xml</code>.
This is where you should save all default text strings for your user interface. If you're using Eclipse, then
-ADT will have started you with two strings, <em>hello</em> and <em>app_name</em>.
+ADT will have started you with two strings, <em>hello</em> and <em>app_name</em>.
Revise <em>hello</em> to something else. Perhaps "Hello, Android! I am a string resource!"
The entire file should now look like this:
<pre>
@@ -450,11 +454,11 @@ public class HelloAndroid extends Activity {
}
}</pre>
-<p>When you make this change, type it by hand to try the
+<p>When you make this change, type it by hand to try the
code-completion feature. As you begin typing "R.layout.main" the plugin will offer you
suggestions. You'll find that it helps in a lot of situations.</p>
-<p>Instead of passing <code>setContentView()</code> a View object, you give it a reference
+<p>Instead of passing <code>setContentView()</code> a View object, you give it a reference
to the layout resource.
The resource is identified as <code>R.layout.main</code>, which is actually a compiled object representation of
the layout defined in <code>/res/layout/main.xml</code>. The Eclipse plugin automatically creates this reference for
@@ -464,25 +468,27 @@ when you run Ant to build the application. (More about the R class in a moment.)
</ol>
<p>Now re-run your application &mdash; because you've created a launch configuration, all
-you need to do is click the green arrow icon to run, or select
+you need to do is click the green arrow icon to run, or select
<strong>Run &gt; Run History &gt; Android Activity</strong>. Other than the change to the TextView
string, the application looks the same. After all, the point was to show that the two different
layout approaches produce identical results.</p>
-<p class="note"><strong>Tip:</strong> Use the shortcut <strong>Ctrl-F11</strong>
-(<strong>Cmd-Shift-F11</strong>, on Mac) to run your currently visible application.</p>
+<p class="note"><strong>Note:</strong> You may have to unlock the screen on the emulator to see
+your application &mdash; just as you would unlock the screen on a device. If you have problems
+running the emulator, see <a href="{@docRoot}guide/developing/devices/emulator.html">Using the
+Android Emulator</a>.</p>
<p>Continue reading for an introduction
to debugging and a little more information on using other IDEs. When you're ready to learn more,
read <a href="{@docRoot}guide/topics/fundamentals.html">Application
-Fundamentals</a> for an introduction to all the elements that make Android applications work.
+Fundamentals</a> for an introduction to all the elements that make Android applications work.
Also refer to the <a href="{@docRoot}guide/index.html">Developer's Guide</a>
introduction page for an overview of the <em>Dev Guide</em> documentation.</p>
<div class="special">
<h3>R class</h3>
-<p>In Eclipse, open the file named <code>R.java</code> (in the <code>gen/</code> [Generated Java Files] folder).
+<p>In Eclipse, open the file named <code>R.java</code> (in the <code>gen/</code> [Generated Java Files] folder).
It should look something like this:</p>
<pre>
@@ -510,16 +516,17 @@ public final class R {
<p>A project's <code>R.java</code> file is an index into all the resources defined in the
file. You use this class in your source code as a sort of short-hand
way to refer to resources you've included in your project. This is
-particularly powerful with the code-completion features of IDEs like Eclipse
+particularly powerful with the code-completion features of IDEs like Eclipse
because it lets you quickly and interactively locate the specific reference
you're looking for.</p>
-<p>It's possible yours looks slighly different than this (perhaps the hexadecimal values are different).
+<p>It's possible yours looks slightly different than this (perhaps the hexadecimal values are
+different).
For now, notice the inner class named "layout", and its
member field "main". The Eclipse plugin noticed the XML
layout file named main.xml and generated a class for it here. As you add other
resources to your project (such as strings in the <code>res/values/string.xml</code> file or drawables inside
-the <code>res/drawable/</code> direcory) you'll see <code>R.java</code> change to keep up.</p>
+the <code>res/drawable/</code> directory) you'll see <code>R.java</code> change to keep up.</p>
<p>When not using Eclipse, this class file will be generated for you at build time (with the Ant tool).</p>
<p><em>You should never edit this file by hand.</em></p>
</div>
@@ -554,9 +561,9 @@ you run your application again, you'll eventually see this:</p>
<p>Press "Force Quit" to terminate the application and close the emulator window.</p>
-<p>To find out more about the error, set a breakpoint in your source code
-on the line <code>Object o = null;</code> (double-click on the marker bar next to the source code line). Then select <strong>Run &gt; Debug History &gt; Hello,
-Android</strong> from the menu to enter debug mode. Your app will restart in the
+<p>To find out more about the error, set a breakpoint in your source code
+on the line <code>Object o = null;</code> (double-click on the marker bar next to the source code line). Then select <strong>Run &gt; Debug History &gt; Hello,
+Android</strong> from the menu to enter debug mode. Your app will restart in the
emulator, but this time it will suspend when it reaches the breakpoint you
set. You can then step through the code in Eclipse's Debug Perspective,
just as you would for any other application.</p>
@@ -565,36 +572,36 @@ just as you would for any other application.</p>
<h2 id="noeclipse">Creating the Project without Eclipse</h2>
-
+
<p>If you don't use Eclipse (such as if you prefer another IDE, or simply use text
editors and command line tools) then the Eclipse plugin can't help you.
Don't worry though &mdash; you don't lose any functionality just because you don't
use Eclipse.</p>
-
+
<p>The Android Plugin for Eclipse is really just a wrapper around a set of tools
included with the Android SDK. (These tools, like the emulator, aapt, adb,
- ddms, and others are <a href="{@docRoot}guide/developing/tools/index.html">documented elsewhere.</a>)
+ ddms, and others are <a href="{@docRoot}guide/developing/tools/index.html">documented elsewhere.</a>)
Thus, it's possible to
wrap those tools with another tool, such as an 'ant' build file.</p>
-
+
<p>The Android SDK includes a tool named "android" that can be
used to create all the source code and directory stubs for your project, as well
as an ant-compatible <code>build.xml</code> file. This allows you to build your project
from the command line, or integrate it with the IDE of your choice.</p>
-
+
<p>For example, to create a HelloAndroid project similar to the one created
in Eclipse, use this command:</p>
-
+
<pre>
android create project \
--package com.example.helloandroid \
- --activity HelloAndroid \
+ --activity HelloAndroid \
--target 2 \
- --path <em>&lt;path-to-your-project></em>/HelloAndroid
+ --path <em>&lt;path-to-your-project></em>/HelloAndroid
</pre>
- <p>This creates the required folders and files for the project at the location
+ <p>This creates the required folders and files for the project at the location
defined by the <em>path</em>.</p>
-
- <p>For more information on how to use the SDK tools to create and build projects, please read
+
+ <p>For more information on how to use the SDK tools to create and build projects, please read
<a href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>.</p> \ No newline at end of file
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
index 18f47a6..bbf7cbe 100644
--- a/docs/html/sdk/eclipse-adt.jd
+++ b/docs/html/sdk/eclipse-adt.jd
@@ -22,6 +22,11 @@ adt.zip.checksum=8ad85d0f3da4a2b8dadfddcc2d66dbcb
</li>
<li><a href="#updating">Updating the ADT Plugin</a></li>
</ol>
+
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a></li>
+ </ol>
</div>
</div>
@@ -50,6 +55,12 @@ href="#installing">Installing the ADT Plugin</a>, below. </p>
how to update ADT to the latest version or how to uninstall it, if necessary.
</p>
+<p>For information about the features provided by the ADT plugin, such as code
+editor features, SDK tool integration, and the graphical layout editor (for drag-and-drop layout
+editing), see the <a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a>
+document.</p>
+
+
<h2 id="notes">Revisions</h2>
<p>The sections below provide notes about successive releases of
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
index 3c2ba8b..ad3be4a 100644
--- a/docs/html/sdk/oem-usb.jd
+++ b/docs/html/sdk/oem-usb.jd
@@ -92,6 +92,8 @@ href="http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-s
href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.motorola.com/docstools/USB_Drivers/</a></td>
</tr><tr><td>Pantech</td> <td><a
href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/software/software.sky?fromUrl=index</a></td>
+</tr><tr><td>Pegatron</td> <td><a
+href="http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip">http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip</a> (ZIP download)</td>
</tr><tr><td>Samsung</td> <td><a
href="http://www.samsung.com/us/support/downloads">http://www.samsung.com/us/support/downloads</a></td>
</tr><tr><td>Sharp</td> <td><a
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index cde997e..b4d94f3 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -358,22 +358,7 @@ public class Paint {
*/
public Paint(Paint paint) {
mNativePaint = native_initWithPaint(paint.mNativePaint);
- mHasCompatScaling = paint.mHasCompatScaling;
- mCompatScaling = paint.mCompatScaling;
- mInvCompatScaling = paint.mInvCompatScaling;
- mBidiFlags = paint.mBidiFlags;
- hasShadow = paint.hasShadow;
- mColorFilter = paint.mColorFilter;
- mMaskFilter = paint.mMaskFilter;
- mPathEffect = paint.mPathEffect;
- mRasterizer = paint.mRasterizer;
- mShader = paint.mShader;
- mTypeface = paint.mTypeface;
- mXfermode = paint.mXfermode;
- shadowColor = paint.shadowColor;
- shadowDx = paint.shadowDx;
- shadowDy = paint.shadowDy;
- shadowRadius = paint.shadowRadius;
+ setClassVariablesFrom(paint);
}
/** Restores the paint to its default settings. */
@@ -396,21 +381,36 @@ public class Paint {
if (this != src) {
// copy over the native settings
native_set(mNativePaint, src.mNativePaint);
- // copy over our java settings
- mColorFilter = src.mColorFilter;
- mMaskFilter = src.mMaskFilter;
- mPathEffect = src.mPathEffect;
- mRasterizer = src.mRasterizer;
- mShader = src.mShader;
- mTypeface = src.mTypeface;
- mXfermode = src.mXfermode;
- mHasCompatScaling = src.mHasCompatScaling;
- mCompatScaling = src.mCompatScaling;
- mInvCompatScaling = src.mInvCompatScaling;
- mBidiFlags = src.mBidiFlags;
+ setClassVariablesFrom(src);
}
}
+ /**
+ * Set all class variables using current values from the given
+ * {@link Paint}.
+ */
+ private void setClassVariablesFrom(Paint paint) {
+ mColorFilter = paint.mColorFilter;
+ mMaskFilter = paint.mMaskFilter;
+ mPathEffect = paint.mPathEffect;
+ mRasterizer = paint.mRasterizer;
+ mShader = paint.mShader;
+ mTypeface = paint.mTypeface;
+ mXfermode = paint.mXfermode;
+
+ mHasCompatScaling = paint.mHasCompatScaling;
+ mCompatScaling = paint.mCompatScaling;
+ mInvCompatScaling = paint.mInvCompatScaling;
+
+ hasShadow = paint.hasShadow;
+ shadowDx = paint.shadowDx;
+ shadowDy = paint.shadowDy;
+ shadowRadius = paint.shadowRadius;
+ shadowColor = paint.shadowColor;
+
+ mBidiFlags = paint.mBidiFlags;
+ }
+
/** @hide */
public void setCompatibilityScaling(float factor) {
if (factor == 1.0) {
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index d62fd67..f3b62ec 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -93,7 +93,7 @@ public class SurfaceTexture {
* @param texName the OpenGL texture object name (e.g. generated via glGenTextures)
*/
public SurfaceTexture(int texName) {
- this(texName, true);
+ this(texName, false);
}
/**
@@ -104,6 +104,8 @@ public class SurfaceTexture {
* When the image stream comes from OpenGL, SurfaceTexture may run in the synchronous
* mode where the producer side may be blocked to avoid skipping frames. To avoid the
* thread block, set allowSynchronousMode to false.
+ *
+ * @hide
*/
public SurfaceTexture(int texName, boolean allowSynchronousMode) {
Looper looper;
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index df30e8c..923518d 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -481,6 +481,7 @@ private:
bool mMarkerReached;
uint32_t mNewPosition;
uint32_t mUpdatePeriod;
+ bool mFlushed; // FIXME will be made obsolete by making flush() synchronous
uint32_t mFlags;
int mSessionId;
int mAuxEffectId;
diff --git a/include/media/stagefright/SurfaceMediaSource.h b/include/media/stagefright/SurfaceMediaSource.h
index 1affb8a..74d54d1 100644
--- a/include/media/stagefright/SurfaceMediaSource.h
+++ b/include/media/stagefright/SurfaceMediaSource.h
@@ -182,9 +182,9 @@ public:
protected:
- // freeAllBuffers frees the resources (both GraphicBuffer and EGLImage) for
+ // freeAllBuffersLocked frees the resources (both GraphicBuffer and EGLImage) for
// all slots.
- void freeAllBuffers();
+ void freeAllBuffersLocked();
static bool isExternalFormat(uint32_t format);
private:
@@ -337,8 +337,15 @@ private:
// Set to a default of 30 fps if not specified by the client side
int32_t mFrameRate;
- // mStarted is a flag to check if the recording has started
- bool mStarted;
+ // mStopped is a flag to check if the recording is going on
+ bool mStopped;
+
+ // mNumFramesReceived indicates the number of frames recieved from
+ // the client side
+ int mNumFramesReceived;
+ // mNumFramesEncoded indicates the number of frames passed on to the
+ // encoder
+ int mNumFramesEncoded;
// mFrameAvailableCondition condition used to indicate whether there
// is a frame available for dequeuing
diff --git a/include/media/stagefright/foundation/ALooperRoster.h b/include/media/stagefright/foundation/ALooperRoster.h
index c1bd4ed..2e5fd73 100644
--- a/include/media/stagefright/foundation/ALooperRoster.h
+++ b/include/media/stagefright/foundation/ALooperRoster.h
@@ -31,9 +31,14 @@ struct ALooperRoster {
void unregisterHandler(ALooper::handler_id handlerID);
- void postMessage(const sp<AMessage> &msg, int64_t delayUs = 0);
+ status_t postMessage(const sp<AMessage> &msg, int64_t delayUs = 0);
void deliverMessage(const sp<AMessage> &msg);
+ status_t postAndAwaitResponse(
+ const sp<AMessage> &msg, sp<AMessage> *response);
+
+ void postReply(uint32_t replyID, const sp<AMessage> &reply);
+
sp<ALooper> findLooper(ALooper::handler_id handlerID);
private:
@@ -45,6 +50,12 @@ private:
Mutex mLock;
KeyedVector<ALooper::handler_id, HandlerInfo> mHandlers;
ALooper::handler_id mNextHandlerID;
+ uint32_t mNextReplyID;
+ Condition mRepliesCondition;
+
+ KeyedVector<uint32_t, sp<AMessage> > mReplies;
+
+ status_t postMessage_l(const sp<AMessage> &msg, int64_t delayUs);
DISALLOW_EVIL_CONSTRUCTORS(ALooperRoster);
};
diff --git a/include/media/stagefright/foundation/AMessage.h b/include/media/stagefright/foundation/AMessage.h
index 72dc730..7ec54aa 100644
--- a/include/media/stagefright/foundation/AMessage.h
+++ b/include/media/stagefright/foundation/AMessage.h
@@ -72,6 +72,17 @@ struct AMessage : public RefBase {
void post(int64_t delayUs = 0);
+ // Posts the message to its target and waits for a response (or error)
+ // before returning.
+ status_t postAndAwaitResponse(sp<AMessage> *response);
+
+ // If this returns true, the sender of this message is synchronously
+ // awaiting a response, the "replyID" can be used to send the response
+ // via "postReply" below.
+ bool senderAwaitsResponse(uint32_t *replyID) const;
+
+ void postReply(uint32_t replyID);
+
// Performs a deep-copy of "this", contained messages are in turn "dup'ed".
// Warning: RefBase items, i.e. "objects" are _not_ copied but only have
// their refcount incremented.
diff --git a/include/media/stagefright/openmax/OMX_IVCommon.h b/include/media/stagefright/openmax/OMX_IVCommon.h
index 97170d7..8bb4ded 100644
--- a/include/media/stagefright/openmax/OMX_IVCommon.h
+++ b/include/media/stagefright/openmax/OMX_IVCommon.h
@@ -154,8 +154,9 @@ typedef enum OMX_COLOR_FORMATTYPE {
* Gralloc Buffers.
* FIXME: In the process of reserving some enum values for
* Android-specific OMX IL colorformats. Change this enum to
- * an acceptable range once that is done.*/
- OMX_COLOR_FormatAndroidOpaque = 0x7F000001,
+ * an acceptable range once that is done.
+ * */
+ OMX_COLOR_FormatAndroidOpaque = 0x7F000789,
OMX_TI_COLOR_FormatYUV420PackedSemiPlanar = 0x7F000100,
OMX_QCOM_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00,
OMX_COLOR_FormatMax = 0x7FFFFFFF
diff --git a/include/ui/GraphicBuffer.h b/include/ui/GraphicBuffer.h
index 370253a..b9deafc 100644
--- a/include/ui/GraphicBuffer.h
+++ b/include/ui/GraphicBuffer.h
@@ -62,6 +62,7 @@ public:
USAGE_HW_TEXTURE = GRALLOC_USAGE_HW_TEXTURE,
USAGE_HW_RENDER = GRALLOC_USAGE_HW_RENDER,
USAGE_HW_2D = GRALLOC_USAGE_HW_2D,
+ USAGE_HW_COMPOSER = GRALLOC_USAGE_HW_COMPOSER,
USAGE_HW_MASK = GRALLOC_USAGE_HW_MASK
};
diff --git a/include/utils/threads.h b/include/utils/threads.h
index c84a9b4..c685625 100644
--- a/include/utils/threads.h
+++ b/include/utils/threads.h
@@ -143,6 +143,13 @@ extern int androidSetThreadSchedulingGroup(pid_t tid, int grp);
// in either case errno is set. Thread ID zero means current thread.
extern int androidSetThreadPriority(pid_t tid, int prio);
+// Get the current scheduling group of a particular thread. Normally returns
+// one of the ANDROID_TGROUP constants other than ANDROID_TGROUP_DEFAULT.
+// Returns ANDROID_TGROUP_DEFAULT if no pthread support (e.g. on host) or if
+// scheduling groups are disabled. Returns INVALID_OPERATION if unexpected error.
+// Thread ID zero means current thread.
+extern int androidGetThreadSchedulingGroup(pid_t tid);
+
#ifdef __cplusplus
}
#endif
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index ac9b33b..79a01a3 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -608,6 +608,9 @@ status_t SurfaceTexture::disconnect(int api) {
if (mConnectedApi == api) {
drainQueueAndFreeBuffersLocked();
mConnectedApi = NO_CONNECTED_API;
+ mNextCrop.makeInvalid();
+ mNextScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
+ mNextTransform = 0;
mDequeueCondition.signal();
} else {
LOGE("disconnect: connected to another api (cur=%d, req=%d)",
@@ -1022,7 +1025,7 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
mCurrentCrop.top, mCurrentCrop.right, mCurrentCrop.bottom,
mCurrentTransform, mCurrentTexture,
prefix, mNextCrop.left, mNextCrop.top, mNextCrop.right, mNextCrop.bottom,
- mCurrentTransform, fifoSize, fifo.string()
+ mNextTransform, fifoSize, fifo.string()
);
result.append(buffer);
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index 5a35b4d..710ef94 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -407,8 +407,15 @@ int SurfaceTextureClient::disconnect(int api) {
LOGV("SurfaceTextureClient::disconnect");
Mutex::Autolock lock(mMutex);
int err = mSurfaceTexture->disconnect(api);
- if (!err && api == NATIVE_WINDOW_API_CPU) {
- mConnectedToCpu = false;
+ if (!err) {
+ freeAllBuffers();
+ mReqFormat = 0;
+ mReqWidth = 0;
+ mReqHeight = 0;
+ mReqUsage = 0;
+ if (api == NATIVE_WINDOW_API_CPU) {
+ mConnectedToCpu = false;
+ }
}
return err;
}
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 88cfc5a..cedf456 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -194,6 +194,7 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
void DisplayList::init() {
mSize = 0;
+ mIsRenderable = true;
}
size_t DisplayList::getSize() {
@@ -892,7 +893,7 @@ bool DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level)
// Base structure
///////////////////////////////////////////////////////////////////////////////
-DisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE) {
+DisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE), mHasDrawOps(false) {
}
DisplayListRenderer::~DisplayListRenderer() {
@@ -926,6 +927,8 @@ void DisplayListRenderer::reset() {
mPathMap.clear();
mMatrices.clear();
+
+ mHasDrawOps = false;
}
///////////////////////////////////////////////////////////////////////////////
@@ -938,6 +941,7 @@ DisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) {
} else {
displayList->initFromDisplayListRenderer(*this, true);
}
+ displayList->setRenderable(mHasDrawOps);
return displayList;
}
@@ -982,7 +986,11 @@ int DisplayListRenderer::save(int flags) {
}
void DisplayListRenderer::restore() {
- addOp(DisplayList::Restore);
+ if (mRestoreSaveCount < 0) {
+ addOp(DisplayList::Restore);
+ } else {
+ mRestoreSaveCount--;
+ }
OpenGLRenderer::restore();
}
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 69e72a4..8cd7fea 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -63,6 +63,7 @@ public:
// IMPORTANT: Update the intialization of OP_NAMES in the .cpp file
// when modifying this file
enum Op {
+ // Non-drawing operations
Save = 0,
Restore,
RestoreToCount,
@@ -75,6 +76,7 @@ public:
SetMatrix,
ConcatMatrix,
ClipRect,
+ // Drawing operations
DrawDisplayList,
DrawLayer,
DrawBitmap,
@@ -113,6 +115,14 @@ public:
static void outputLogBuffer(int fd);
+ void setRenderable(bool renderable) {
+ mIsRenderable = renderable;
+ }
+
+ bool isRenderable() const {
+ return mIsRenderable;
+ }
+
private:
void init();
@@ -207,6 +217,8 @@ private:
mutable SkFlattenableReadBuffer mReader;
size_t mSize;
+
+ bool mIsRenderable;
};
///////////////////////////////////////////////////////////////////////////////
@@ -328,6 +340,7 @@ private:
inline void addOp(DisplayList::Op drawOp) {
insertRestoreToCount();
mWriter.writeInt(drawOp);
+ mHasDrawOps = mHasDrawOps || drawOp >= DisplayList::DrawDisplayList;
}
inline void addInt(int value) {
@@ -479,6 +492,7 @@ private:
SkWriter32 mWriter;
int mRestoreSaveCount;
+ bool mHasDrawOps;
friend class DisplayList;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 04f3c58..a20a88e 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1278,7 +1278,7 @@ bool OpenGLRenderer::drawDisplayList(DisplayList* displayList, uint32_t width, u
// All the usual checks and setup operations (quickReject, setupDraw, etc.)
// will be performed by the display list itself
- if (displayList) {
+ if (displayList && displayList->isRenderable()) {
return displayList->replay(*this, dirty, level);
}
diff --git a/libs/rs/scriptc/rs_time.rsh b/libs/rs/scriptc/rs_time.rsh
index f8f297d..60e3dee 100644
--- a/libs/rs/scriptc/rs_time.rsh
+++ b/libs/rs/scriptc/rs_time.rsh
@@ -15,43 +15,96 @@
*/
/** @file rs_time.rsh
- * \brief Time routines
- *
+ * \brief Renderscript time routines
*
+ * This file contains Renderscript functions relating to time and date
+ * manipulation.
*/
#ifndef __RS_TIME_RSH__
#define __RS_TIME_RSH__
+/**
+ * Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on
+ * January 1, 1970, Coordinated Universal Time (UTC)).
+ */
typedef int rs_time_t;
+/**
+ * Data structure for broken-down time components.
+ *
+ * tm_sec - Seconds after the minute. This ranges from 0 to 59, but possibly
+ * up to 60 for leap seconds.
+ * tm_min - Minutes after the hour. This ranges from 0 to 59.
+ * tm_hour - Hours past midnight. This ranges from 0 to 23.
+ * tm_mday - Day of the month. This ranges from 1 to 31.
+ * tm_mon - Months since January. This ranges from 0 to 11.
+ * tm_year - Years since 1900.
+ * tm_wday - Days since Sunday. This ranges from 0 to 6.
+ * tm_yday - Days since January 1. This ranges from 0 to 365.
+ * tm_isdst - Flag to indicate whether daylight saving time is in effect. The
+ * value is positive if it is in effect, zero if it is not, and
+ * negative if the information is not available.
+ */
typedef struct {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday;
- int tm_yday;
- int tm_isdst;
+ int tm_sec; ///< seconds
+ int tm_min; ///< minutes
+ int tm_hour; ///< hours
+ int tm_mday; ///< day of the month
+ int tm_mon; ///< month
+ int tm_year; ///< year
+ int tm_wday; ///< day of the week
+ int tm_yday; ///< day of the year
+ int tm_isdst; ///< daylight savings time
} rs_tm;
+/**
+ * Returns the number of seconds since the Epoch (00:00:00 UTC, January 1,
+ * 1970). If @p timer is non-NULL, the result is also stored in the memory
+ * pointed to by this variable. If an error occurs, a value of -1 is returned.
+ *
+ * @param timer Location to also store the returned calendar time.
+ *
+ * @return Seconds since the Epoch.
+ */
extern rs_time_t __attribute__((overloadable))
rsTime(rs_time_t *timer);
+/**
+ * Converts the time specified by @p timer into broken-down time and stores it
+ * in @p local. This function also returns a pointer to @p local. If @p local
+ * is NULL, this function does nothing and returns NULL.
+ *
+ * @param local Broken-down time.
+ * @param timer Input time as calendar time.
+ *
+ * @return Pointer to broken-down time (same as input @p local).
+ */
extern rs_tm * __attribute__((overloadable))
rsLocaltime(rs_tm *local, const rs_time_t *timer);
-// Return the current system clock in milliseconds
+/**
+ * Returns the current system clock (uptime) in milliseconds.
+ *
+ * @return Uptime in milliseconds.
+ */
extern int64_t __attribute__((overloadable))
rsUptimeMillis(void);
-// Return the current system clock in nanoseconds
+/**
+ * Returns the current system clock (uptime) in nanoseconds.
+ *
+ * @return Uptime in nanoseconds.
+ */
extern int64_t __attribute__((overloadable))
rsUptimeNanos(void);
-// Return the time in seconds since function was last called in this script.
+/**
+ * Returns the time in seconds since this function was last called in this
+ * script.
+ *
+ * @return Time in seconds.
+ */
extern float __attribute__((overloadable))
rsGetDt(void);
diff --git a/libs/rs/scriptc/rs_types.rsh b/libs/rs/scriptc/rs_types.rsh
index 875beb9..5d5df60 100644
--- a/libs/rs/scriptc/rs_types.rsh
+++ b/libs/rs/scriptc/rs_types.rsh
@@ -89,7 +89,7 @@ typedef uint16_t ushort;
*/
typedef uint32_t uint;
/**
- * Typedef for unsigned char (use for 64-bit unsigned integers)
+ * Typedef for unsigned long (use for 64-bit unsigned integers)
*/
typedef uint64_t ulong;
/**
@@ -102,67 +102,67 @@ typedef uint32_t size_t;
typedef int32_t ssize_t;
/**
- * \brief Opaque handle to a RenderScript element.
+ * \brief Opaque handle to a Renderscript element.
*
* See: android.renderscript.Element
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_element;
/**
- * \brief Opaque handle to a RenderScript type.
+ * \brief Opaque handle to a Renderscript type.
*
* See: android.renderscript.Type
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_type;
/**
- * \brief Opaque handle to a RenderScript allocation.
+ * \brief Opaque handle to a Renderscript allocation.
*
* See: android.renderscript.Allocation
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_allocation;
/**
- * \brief Opaque handle to a RenderScript sampler object.
+ * \brief Opaque handle to a Renderscript sampler object.
*
* See: android.renderscript.Sampler
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_sampler;
/**
- * \brief Opaque handle to a RenderScript script object.
+ * \brief Opaque handle to a Renderscript script object.
*
* See: android.renderscript.ScriptC
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_script;
/**
- * \brief Opaque handle to a RenderScript mesh object.
+ * \brief Opaque handle to a Renderscript mesh object.
*
* See: android.renderscript.Mesh
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_mesh;
/**
- * \brief Opaque handle to a RenderScript ProgramFragment object.
+ * \brief Opaque handle to a Renderscript ProgramFragment object.
*
* See: android.renderscript.ProgramFragment
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_fragment;
/**
- * \brief Opaque handle to a RenderScript ProgramVertex object.
+ * \brief Opaque handle to a Renderscript ProgramVertex object.
*
* See: android.renderscript.ProgramVertex
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_vertex;
/**
- * \brief Opaque handle to a RenderScript sampler object.
+ * \brief Opaque handle to a Renderscript ProgramRaster object.
*
- * See: android.renderscript.Sampler
+ * See: android.renderscript.ProgramRaster
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_raster;
/**
- * \brief Opaque handle to a RenderScript ProgramStore object.
+ * \brief Opaque handle to a Renderscript ProgramStore object.
*
* See: android.renderscript.ProgramStore
*/
typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_store;
/**
- * \brief Opaque handle to a RenderScript font object.
+ * \brief Opaque handle to a Renderscript font object.
*
* See: android.renderscript.Font
*/
@@ -170,163 +170,163 @@ typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_fo
/**
* Vector version of the basic float type.
- * Provides two float fields packed into a single 64bit field with 64 bit
+ * Provides two float fields packed into a single 64 bit field with 64 bit
* alignment.
*/
typedef float float2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic float type. Provides three float fields packed
- * into a single 128bit field with 128 bit alignment.
+ * into a single 128 bit field with 128 bit alignment.
*/
typedef float float3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic float type.
- * Provides four float fields packed into a single 128bit field with 128bit
+ * Provides four float fields packed into a single 128 bit field with 128 bit
* alignment.
*/
typedef float float4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic double type. Provides two double fields packed
- * into a single 128bit field with 128bit alignment.
+ * into a single 128 bit field with 128 bit alignment.
*/
typedef double double2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic double type. Provides three double fields packed
- * into a single 256bit field with 256bit alignment.
+ * into a single 256 bit field with 256 bit alignment.
*/
typedef double double3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic double type. Provides four double fields packed
- * into a single 256bit field with 256bit alignment.
+ * into a single 256 bit field with 256 bit alignment.
*/
typedef double double4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic uchar type. Provides two uchar fields packed
- * into a single 16bit field with 16bit alignment.
+ * into a single 16 bit field with 16 bit alignment.
*/
typedef uchar uchar2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic uchar type. Provides three uchar fields packed
- * into a single 32bit field with 32bit alignment.
+ * into a single 32 bit field with 32 bit alignment.
*/
typedef uchar uchar3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic uchar type. Provides four uchar fields packed
- * into a single 32bit field with 32bit alignment.
+ * into a single 32 bit field with 32 bit alignment.
*/
typedef uchar uchar4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic ushort type. Provides two ushort fields packed
- * into a single 32bit field with 32bit alignment.
+ * into a single 32 bit field with 32 bit alignment.
*/
typedef ushort ushort2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic ushort type. Provides three ushort fields packed
- * into a single 64bit field with 64bit alignment.
+ * into a single 64 bit field with 64 bit alignment.
*/
typedef ushort ushort3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic ushort type. Provides four ushort fields packed
- * into a single 64bit field with 64bit alignment.
+ * into a single 64 bit field with 64 bit alignment.
*/
typedef ushort ushort4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic uint type. Provides two uint fields packed into a
- * single 64bit field with 64bit alignment.
+ * single 64 bit field with 64 bit alignment.
*/
typedef uint uint2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic uint type. Provides three uint fields packed into
- * a single 128bit field with 128bit alignment.
+ * a single 128 bit field with 128 bit alignment.
*/
typedef uint uint3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic uint type. Provides four uint fields packed into
- * a single 128bit field with 128bit alignment.
+ * a single 128 bit field with 128 bit alignment.
*/
typedef uint uint4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic ulong type. Provides two ulong fields packed into
- * a single 128bit field with 128bit alignment.
+ * a single 128 bit field with 128 bit alignment.
*/
typedef ulong ulong2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic ulong type. Provides three ulong fields packed
- * into a single 256bit field with 256bit alignment.
+ * into a single 256 bit field with 256 bit alignment.
*/
typedef ulong ulong3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic ulong type. Provides four ulong fields packed
- * into a single 256bit field with 256bit alignment.
+ * into a single 256 bit field with 256 bit alignment.
*/
typedef ulong ulong4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic char type. Provides two char fields packed into a
- * single 16bit field with 16bit alignment.
+ * single 16 bit field with 16 bit alignment.
*/
typedef char char2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic char type. Provides three char fields packed into
- * a single 32bit field with 32bit alignment.
+ * a single 32 bit field with 32 bit alignment.
*/
typedef char char3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic char type. Provides four char fields packed into
- * a single 32bit field with 32bit alignment.
+ * a single 32 bit field with 32 bit alignment.
*/
typedef char char4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic short type. Provides two short fields packed into
- * a single 32bit field with 32bit alignment.
+ * a single 32 bit field with 32 bit alignment.
*/
typedef short short2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic short type. Provides three short fields packed
- * into a single 64bit field with 64bit alignment.
+ * into a single 64 bit field with 64 bit alignment.
*/
typedef short short3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic short type. Provides four short fields packed
- * into a single 64bit field with 64bit alignment.
+ * into a single 64 bit field with 64 bit alignment.
*/
typedef short short4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic int type. Provides two int fields packed into a
- * single 64bit field with 64bit alignment.
+ * single 64 bit field with 64 bit alignment.
*/
typedef int int2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic int type. Provides three int fields packed into a
- * single 128bit field with 128bit alignment.
+ * single 128 bit field with 128 bit alignment.
*/
typedef int int3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic int type. Provides two four fields packed into a
- * single 128bit field with 128bit alignment.
+ * single 128 bit field with 128 bit alignment.
*/
typedef int int4 __attribute__((ext_vector_type(4)));
/**
* Vector version of the basic long type. Provides two long fields packed into a
- * single 128bit field with 128bit alignment.
+ * single 128 bit field with 128 bit alignment.
*/
typedef long long2 __attribute__((ext_vector_type(2)));
/**
* Vector version of the basic long type. Provides three long fields packed into
- * a single 256bit field with 256bit alignment.
+ * a single 256 bit field with 256 bit alignment.
*/
typedef long long3 __attribute__((ext_vector_type(3)));
/**
* Vector version of the basic long type. Provides four long fields packed into
- * a single 256bit field with 256bit alignment.
+ * a single 256 bit field with 256 bit alignment.
*/
typedef long long4 __attribute__((ext_vector_type(4)));
@@ -369,8 +369,6 @@ typedef float4 rs_quaternion;
/**
* \brief Enum for selecting cube map faces
- *
- * Used todo-alexst
*/
typedef enum {
RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index d18c0a2..02c380b 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -368,6 +368,41 @@ int androidSetThreadPriority(pid_t tid, int pri)
return rc;
}
+int androidGetThreadSchedulingGroup(pid_t tid)
+{
+ int ret = ANDROID_TGROUP_DEFAULT;
+
+#if defined(HAVE_PTHREADS)
+ // convention is to not call get/set_sched_policy methods if disabled by property
+ pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup);
+ if (gDoSchedulingGroup) {
+ SchedPolicy policy;
+ // get_sched_policy does not support tid == 0
+ if (tid == 0) {
+ tid = androidGetTid();
+ }
+ if (get_sched_policy(tid, &policy) < 0) {
+ ret = INVALID_OPERATION;
+ } else {
+ switch (policy) {
+ case SP_BACKGROUND:
+ ret = ANDROID_TGROUP_BG_NONINTERACT;
+ break;
+ case SP_FOREGROUND:
+ ret = ANDROID_TGROUP_FG_BOOST;
+ break;
+ default:
+ // should not happen, as enum SchedPolicy does not have any other values
+ ret = INVALID_OPERATION;
+ break;
+ }
+ }
+ }
+#endif
+
+ return ret;
+}
+
namespace android {
/*
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index acc2b23..dbe4115 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -81,6 +81,10 @@ public class AudioService extends IAudioService.Stub {
private static final String TAG = "AudioService";
+ /** Debug remote control client/display feature */
+ // TODO set to false before release
+ protected static final boolean DEBUG_RC = true;
+
/** How long to delay before persisting a change in volume/ringer mode. */
private static final int PERSIST_DELAY = 3000;
@@ -3072,13 +3076,15 @@ public class AudioService extends IAudioService.Stub {
/**
* Update the remote control displays with the new "focused" client generation
*/
- private void setNewRcClientGenerationOnDisplays_syncRcStack(int newClientGeneration) {
+ private void setNewRcClientOnDisplays_syncRcsCurrc(int newClientGeneration,
+ ComponentName newClientEventReceiver, boolean clearing) {
// NOTE: Only one IRemoteControlDisplay supported in this implementation
if (mRcDisplay != null) {
try {
- mRcDisplay.setCurrentClientGenerationId(newClientGeneration);
+ mRcDisplay.setCurrentClientId(
+ newClientGeneration, newClientEventReceiver, clearing);
} catch (RemoteException e) {
- Log.e(TAG, "Dead display in onRcDisplayUpdate() "+e);
+ Log.e(TAG, "Dead display in setNewRcClientOnDisplays_syncRcsCurrc() "+e);
// if we had a display before, stop monitoring its death
rcDisplay_stopDeathMonitor_syncRcStack();
mRcDisplay = null;
@@ -3089,7 +3095,7 @@ public class AudioService extends IAudioService.Stub {
/**
* Update the remote control clients with the new "focused" client generation
*/
- private void setNewRcClientGenerationOnClients_syncRcStack(int newClientGeneration) {
+ private void setNewRcClientGenerationOnClients_syncRcsCurrc(int newClientGeneration) {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry se = stackIterator.next();
@@ -3097,7 +3103,7 @@ public class AudioService extends IAudioService.Stub {
try {
se.mRcClient.setCurrentClientGenerationId(newClientGeneration);
} catch (RemoteException e) {
- Log.w(TAG, "Dead client in onRcDisplayUpdate()"+e);
+ Log.w(TAG, "Dead client in setNewRcClientGenerationOnClients_syncRcsCurrc()"+e);
stackIterator.remove();
se.unlinkToRcClientDeath();
}
@@ -3106,29 +3112,35 @@ public class AudioService extends IAudioService.Stub {
}
/**
- * Update the displays and clients with the new "focused" client generation
+ * Update the displays and clients with the new "focused" client generation and name
+ * @param newClientGeneration the new generation value matching a client update
+ * @param newClientEventReceiver the media button event receiver associated with the client.
+ * May be null, which implies there is no registered media button event receiver.
+ * @param clearing true if the new client generation value maps to a remote control update
+ * where the display should be cleared.
*/
- private void setNewRcClientGeneration(int newClientGeneration) {
- synchronized(mRCStack) {
- // send the new valid client generation ID to all displays
- setNewRcClientGenerationOnDisplays_syncRcStack(newClientGeneration);
- // send the new valid client generation ID to all clients
- setNewRcClientGenerationOnClients_syncRcStack(newClientGeneration);
- }
+ private void setNewRcClient_syncRcsCurrc(int newClientGeneration,
+ ComponentName newClientEventReceiver, boolean clearing) {
+ // send the new valid client generation ID to all displays
+ setNewRcClientOnDisplays_syncRcsCurrc(newClientGeneration, newClientEventReceiver,
+ clearing);
+ // send the new valid client generation ID to all clients
+ setNewRcClientGenerationOnClients_syncRcsCurrc(newClientGeneration);
}
/**
* Called when processing MSG_RCDISPLAY_CLEAR event
*/
private void onRcDisplayClear() {
- // TODO remove log before release
- Log.i(TAG, "Clear remote control display");
-
- synchronized(mCurrentRcLock) {
- mCurrentRcClientGen++;
+ if (DEBUG_RC) Log.i(TAG, "Clear remote control display");
- // synchronously update the displays and clients with the new client generation
- setNewRcClientGeneration(mCurrentRcClientGen);
+ synchronized(mRCStack) {
+ synchronized(mCurrentRcLock) {
+ mCurrentRcClientGen++;
+ // synchronously update the displays and clients with the new client generation
+ setNewRcClient_syncRcsCurrc(mCurrentRcClientGen,
+ null /*event receiver*/, true /*clearing*/);
+ }
}
}
@@ -3136,28 +3148,31 @@ public class AudioService extends IAudioService.Stub {
* Called when processing MSG_RCDISPLAY_UPDATE event
*/
private void onRcDisplayUpdate(RemoteControlStackEntry rcse, int flags /* USED ?*/) {
- synchronized(mCurrentRcLock) {
- if ((mCurrentRcClient != null) && (mCurrentRcClient.equals(rcse.mRcClient))) {
- // TODO remove log before release
- Log.i(TAG, "Display/update remote control ");
-
- mCurrentRcClientGen++;
-
- // synchronously update the displays and clients with the new client generation
- setNewRcClientGeneration(mCurrentRcClientGen);
-
- // ask the current client that it needs to send info
- try {
- mCurrentRcClient.onInformationRequested(mCurrentRcClientGen,
- flags, mArtworkExpectedWidth, mArtworkExpectedHeight);
- } catch (RemoteException e) {
- Log.e(TAG, "Current valid remote client is dead: "+e);
- mCurrentRcClient = null;
+ synchronized(mRCStack) {
+ synchronized(mCurrentRcLock) {
+ if ((mCurrentRcClient != null) && (mCurrentRcClient.equals(rcse.mRcClient))) {
+ if (DEBUG_RC) Log.i(TAG, "Display/update remote control ");
+
+ mCurrentRcClientGen++;
+ // synchronously update the displays and clients with
+ // the new client generation
+ setNewRcClient_syncRcsCurrc(mCurrentRcClientGen,
+ rcse.mReceiverComponent /*event receiver*/,
+ false /*clearing*/);
+
+ // tell the current client that it needs to send info
+ try {
+ mCurrentRcClient.onInformationRequested(mCurrentRcClientGen,
+ flags, mArtworkExpectedWidth, mArtworkExpectedHeight);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Current valid remote client is dead: "+e);
+ mCurrentRcClient = null;
+ }
+ } else {
+ // the remote control display owner has changed between the
+ // the message to update the display was sent, and the time it
+ // gets to be processed (now)
}
- } else {
- // the remote control display owner has changed between the
- // the message to update the display was sent, and the time it
- // gets to be processed (now)
}
}
}
@@ -3320,10 +3335,31 @@ public class AudioService extends IAudioService.Stub {
}
}
- /** see AudioManager.unregisterRemoteControlClient(ComponentName eventReceiver, ...) */
+ /**
+ * see AudioManager.unregisterRemoteControlClient(ComponentName eventReceiver, ...)
+ * rcClient is guaranteed non-null
+ */
public void unregisterRemoteControlClient(ComponentName eventReceiver,
IRemoteControlClient rcClient) {
- //FIXME implement
+ synchronized(mAudioFocusLock) {
+ synchronized(mRCStack) {
+ Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+ while(stackIterator.hasNext()) {
+ RemoteControlStackEntry rcse = stackIterator.next();
+ if ((rcse.mReceiverComponent.equals(eventReceiver))
+ && rcClient.equals(rcse.mRcClient)) {
+ // we found the IRemoteControlClient to unregister
+ // stop monitoring its death
+ rcse.unlinkToRcClientDeath();
+ // reset the client-related fields
+ rcse.mRcClient = null;
+ rcse.mRcClientName = null;
+ rcse.mRcClientDeathHandler = null;
+ rcse.mCallingPackageName = null;
+ }
+ }
+ }
+ }
}
/**
@@ -3340,34 +3376,45 @@ public class AudioService extends IAudioService.Stub {
* of displays if necessary.
*/
private class RcDisplayDeathHandler implements IBinder.DeathRecipient {
+ private IBinder mCb; // To be notified of client's death
+
+ public RcDisplayDeathHandler(IBinder b) {
+ if (DEBUG_RC) Log.i(TAG, "new RcDisplayDeathHandler for "+b);
+ mCb = b;
+ }
+
public void binderDied() {
synchronized(mRCStack) {
- Log.w(TAG, " RemoteControl: display died");
+ Log.w(TAG, "RemoteControl: display died");
mRcDisplay = null;
}
}
- }
-
- private void rcDisplay_stopDeathMonitor_syncRcStack() {
- if (mRcDisplay != null) {
- // we had a display before, stop monitoring its death
- IBinder b = mRcDisplay.asBinder();
+ public void unlinkToRcDisplayDeath() {
+ if (DEBUG_RC) Log.i(TAG, "unlinkToRcDisplayDeath for "+mCb);
try {
- b.unlinkToDeath(mRcDisplayDeathHandler, 0);
+ mCb.unlinkToDeath(this, 0);
} catch (java.util.NoSuchElementException e) {
- // being conservative here
- Log.e(TAG, "Error while trying to unlink display death handler " + e);
+ // not much we can do here, the display was being unregistered anyway
+ Log.e(TAG, "Encountered " + e + " in unlinkToRcDisplayDeath()");
e.printStackTrace();
}
}
+
+ }
+
+ private void rcDisplay_stopDeathMonitor_syncRcStack() {
+ if (mRcDisplay != null) { // implies (mRcDisplayDeathHandler != null)
+ // we had a display before, stop monitoring its death
+ mRcDisplayDeathHandler.unlinkToRcDisplayDeath();
+ }
}
private void rcDisplay_startDeathMonitor_syncRcStack() {
if (mRcDisplay != null) {
// new non-null display, monitor its death
IBinder b = mRcDisplay.asBinder();
- mRcDisplayDeathHandler = new RcDisplayDeathHandler();
+ mRcDisplayDeathHandler = new RcDisplayDeathHandler(b);
try {
b.linkToDeath(mRcDisplayDeathHandler, 0);
} catch (RemoteException e) {
@@ -3378,9 +3425,15 @@ public class AudioService extends IAudioService.Stub {
}
}
+ /**
+ * Register an IRemoteControlDisplay and notify all IRemoteControlClient of the new display.
+ * Since only one IRemoteControlDisplay is supported, this will unregister the previous display.
+ * @param rcd the IRemoteControlDisplay to register. No effect if null.
+ */
public void registerRemoteControlDisplay(IRemoteControlDisplay rcd) {
+ if (DEBUG_RC) Log.d(TAG, ">>> registerRemoteControlDisplay("+rcd+")");
synchronized(mRCStack) {
- if (mRcDisplay == rcd) {
+ if ((mRcDisplay == rcd) || (rcd == null)) {
return;
}
// if we had a display before, stop monitoring its death
@@ -3390,6 +3443,8 @@ public class AudioService extends IAudioService.Stub {
rcDisplay_startDeathMonitor_syncRcStack();
// let all the remote control clients there is a new display
+ // no need to unplug the previous because we only support one display
+ // and the clients don't track the death of the display
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
@@ -3402,11 +3457,38 @@ public class AudioService extends IAudioService.Stub {
}
}
}
+
+ // we have a new display, tell the current client that it needs to send info
+ // (following lock order: mRCStack then mCurrentRcLock)
+ synchronized(mCurrentRcLock) {
+ if (mCurrentRcClient != null) {
+ // tell the current client that it needs to send info
+ try {
+ mCurrentRcClient.onInformationRequested(mCurrentRcClientGen,
+ RC_INFO_ALL, mArtworkExpectedWidth, mArtworkExpectedHeight);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Current valid remote client is dead: "+e);
+ mCurrentRcClient = null;
+ }
+ }
+ }
}
}
+ /**
+ * Unregister an IRemoteControlDisplay.
+ * Since only one IRemoteControlDisplay is supported, this has no effect if the one to
+ * unregister is not the current one.
+ * @param rcd the IRemoteControlDisplay to unregister. No effect if null.
+ */
public void unregisterRemoteControlDisplay(IRemoteControlDisplay rcd) {
+ if (DEBUG_RC) Log.d(TAG, "<<< unregisterRemoteControlDisplay("+rcd+")");
synchronized(mRCStack) {
+ // only one display here, so you can only unregister the current display
+ if ((rcd == null) || (rcd != mRcDisplay)) {
+ if (DEBUG_RC) Log.w(TAG, " trying to unregister unregistered RCD");
+ return;
+ }
// if we had a display before, stop monitoring its death
rcDisplay_stopDeathMonitor_syncRcStack();
mRcDisplay = null;
diff --git a/media/java/android/media/IRemoteControlDisplay.aidl b/media/java/android/media/IRemoteControlDisplay.aidl
index d000906..fd50b7e 100644
--- a/media/java/android/media/IRemoteControlDisplay.aidl
+++ b/media/java/android/media/IRemoteControlDisplay.aidl
@@ -16,6 +16,7 @@
package android.media;
+import android.content.ComponentName;
import android.graphics.Bitmap;
import android.os.Bundle;
@@ -29,15 +30,23 @@ oneway interface IRemoteControlDisplay
{
/**
* Sets the generation counter of the current client that is displayed on the remote control.
+ * @param clientGeneration the new RemoteControlClient generation
+ * @param clientEventReceiver the media button event receiver associated with the client.
+ * May be null, which implies there is no registered media button event receiver. This
+ * parameter is supplied as an optimization so a display can directly target media button
+ * events to the client.
+ * @param clearing true if the new client generation value maps to a remote control update
+ * where the display should be cleared.
*/
- void setCurrentClientGenerationId(int clientGeneration);
+ void setCurrentClientId(int clientGeneration, in ComponentName clientEventReceiver,
+ boolean clearing);
void setPlaybackState(int generationId, int state);
- void setMetadata(int generationId, in Bundle metadata);
-
void setTransportControlFlags(int generationId, int transportControlFlags);
+ void setMetadata(int generationId, in Bundle metadata);
+
void setArtwork(int generationId, in Bitmap artwork);
/**
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index e6331ce..d59bc2b 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -703,7 +703,7 @@ public class RemoteControlClient
private void onUnplugDisplay(IRemoteControlDisplay rcd) {
synchronized(mCacheLock) {
- if ((mRcDisplay != null) && (mRcDisplay.equals(rcd))) {
+ if ((mRcDisplay != null) && (mRcDisplay.asBinder().equals(rcd.asBinder()))) {
mRcDisplay = null;
mArtworkExpectedWidth = ARTWORK_DEFAULT_SIZE;
mArtworkExpectedHeight = ARTWORK_DEFAULT_SIZE;
@@ -722,20 +722,22 @@ public class RemoteControlClient
*/
private Bitmap scaleBitmapIfTooBig(Bitmap bitmap, int maxWidth, int maxHeight) {
- final int width = bitmap.getWidth();
- final int height = bitmap.getHeight();
- if (width > maxWidth || height > maxHeight) {
- float scale = Math.min((float) maxWidth / width, (float) maxHeight / height);
- int newWidth = Math.round(scale * width);
- int newHeight = Math.round(scale * height);
- Bitmap outBitmap = Bitmap.createBitmap(newWidth, newHeight, bitmap.getConfig());
- Canvas canvas = new Canvas(outBitmap);
- Paint paint = new Paint();
- paint.setAntiAlias(true);
- paint.setFilterBitmap(true);
- canvas.drawBitmap(bitmap, null,
- new RectF(0, 0, outBitmap.getWidth(), outBitmap.getHeight()), paint);
- bitmap = outBitmap;
+ if (bitmap != null) {
+ final int width = bitmap.getWidth();
+ final int height = bitmap.getHeight();
+ if (width > maxWidth || height > maxHeight) {
+ float scale = Math.min((float) maxWidth / width, (float) maxHeight / height);
+ int newWidth = Math.round(scale * width);
+ int newHeight = Math.round(scale * height);
+ Bitmap outBitmap = Bitmap.createBitmap(newWidth, newHeight, bitmap.getConfig());
+ Canvas canvas = new Canvas(outBitmap);
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setFilterBitmap(true);
+ canvas.drawBitmap(bitmap, null,
+ new RectF(0, 0, outBitmap.getWidth(), outBitmap.getHeight()), paint);
+ bitmap = outBitmap;
+ }
}
return bitmap;
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 3949c39..cecedb5 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -259,6 +259,7 @@ status_t AudioTrack::set(
mMarkerReached = false;
mNewPosition = 0;
mUpdatePeriod = 0;
+ mFlushed = false;
mFlags = flags;
AudioSystem::acquireAudioSessionId(mSessionId);
@@ -337,6 +338,7 @@ void AudioTrack::start()
audio_track_cblk_t* cblk = mCblk;
if (mActive == 0) {
+ mFlushed = false;
mActive = 1;
mNewPosition = cblk->server + mUpdatePeriod;
cblk->lock.lock();
@@ -437,6 +439,7 @@ void AudioTrack::flush_l()
mUpdatePeriod = 0;
if (!mActive) {
+ mFlushed = true;
mAudioTrack->flush();
// Release AudioTrack callback thread in case it was waiting for new buffers
// in AudioTrack::obtainBuffer()
@@ -655,7 +658,7 @@ status_t AudioTrack::getPosition(uint32_t *position)
{
if (position == 0) return BAD_VALUE;
AutoMutex lock(mLock);
- *position = mCblk->server;
+ *position = mFlushed ? 0 : mCblk->server;
return NO_ERROR;
}
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp
index 40e055c..cd4b1ef 100644
--- a/media/libmediaplayerservice/StagefrightPlayer.cpp
+++ b/media/libmediaplayerservice/StagefrightPlayer.cpp
@@ -72,16 +72,14 @@ status_t StagefrightPlayer::setDataSource(const sp<IStreamSource> &source) {
status_t StagefrightPlayer::setVideoSurface(const sp<Surface> &surface) {
LOGV("setVideoSurface");
- mPlayer->setSurface(surface);
- return OK;
+ return mPlayer->setSurface(surface);
}
status_t StagefrightPlayer::setVideoSurfaceTexture(
const sp<ISurfaceTexture> &surfaceTexture) {
LOGV("setVideoSurfaceTexture");
- mPlayer->setSurfaceTexture(surfaceTexture);
- return OK;
+ return mPlayer->setSurfaceTexture(surfaceTexture);
}
status_t StagefrightPlayer::prepare() {
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 7fb141a..1f08a91 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -316,9 +316,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
&cropLeft, &cropTop, &cropRight, &cropBottom));
LOGV("Video output format changed to %d x %d "
- "(crop: %d, %d, %d, %d)",
+ "(crop: %d x %d @ (%d, %d))",
width, height,
- cropLeft, cropTop, cropRight, cropBottom);
+ (cropRight - cropLeft + 1),
+ (cropBottom - cropTop + 1),
+ cropLeft, cropTop);
notifyListener(
MEDIA_SET_VIDEO_SIZE,
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 35ed43f..8f213da 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -395,29 +395,40 @@ void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) {
postDrainVideoQueue();
}
- if (mSyncQueues && !mAudioQueue.empty() && !mVideoQueue.empty()) {
- int64_t firstAudioTimeUs;
- int64_t firstVideoTimeUs;
- CHECK((*mAudioQueue.begin()).mBuffer->meta()
- ->findInt64("timeUs", &firstAudioTimeUs));
- CHECK((*mVideoQueue.begin()).mBuffer->meta()
- ->findInt64("timeUs", &firstVideoTimeUs));
+ if (!mSyncQueues || mAudioQueue.empty() || mVideoQueue.empty()) {
+ return;
+ }
- int64_t diff = firstVideoTimeUs - firstAudioTimeUs;
+ sp<ABuffer> firstAudioBuffer = (*mAudioQueue.begin()).mBuffer;
+ sp<ABuffer> firstVideoBuffer = (*mVideoQueue.begin()).mBuffer;
- LOGV("queueDiff = %.2f secs", diff / 1E6);
+ if (firstAudioBuffer == NULL || firstVideoBuffer == NULL) {
+ // EOS signalled on either queue.
+ syncQueuesDone();
+ return;
+ }
- if (diff > 100000ll) {
- // Audio data starts More than 0.1 secs before video.
- // Drop some audio.
+ int64_t firstAudioTimeUs;
+ int64_t firstVideoTimeUs;
+ CHECK(firstAudioBuffer->meta()
+ ->findInt64("timeUs", &firstAudioTimeUs));
+ CHECK(firstVideoBuffer->meta()
+ ->findInt64("timeUs", &firstVideoTimeUs));
- (*mAudioQueue.begin()).mNotifyConsumed->post();
- mAudioQueue.erase(mAudioQueue.begin());
- return;
- }
+ int64_t diff = firstVideoTimeUs - firstAudioTimeUs;
- syncQueuesDone();
+ LOGV("queueDiff = %.2f secs", diff / 1E6);
+
+ if (diff > 100000ll) {
+ // Audio data starts More than 0.1 secs before video.
+ // Drop some audio.
+
+ (*mAudioQueue.begin()).mNotifyConsumed->post();
+ mAudioQueue.erase(mAudioQueue.begin());
+ return;
}
+
+ syncQueuesDone();
}
void NuPlayer::Renderer::syncQueuesDone() {
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 5d91f6a..e9dc61c 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -1738,7 +1738,17 @@ ACodec::LoadedToIdleState::LoadedToIdleState(ACodec *codec)
void ACodec::LoadedToIdleState::stateEntered() {
LOGV("[%s] Now Loaded->Idle", mCodec->mComponentName.c_str());
- CHECK_EQ(allocateBuffers(), (status_t)OK);
+ status_t err;
+ if ((err = allocateBuffers()) != OK) {
+ LOGE("Failed to allocate buffers after transitioning to IDLE state "
+ "(error 0x%08x)",
+ err);
+
+ sp<AMessage> notify = mCodec->mNotify->dup();
+ notify->setInt32("what", ACodec::kWhatError);
+ notify->setInt32("omx-error", OMX_ErrorUndefined);
+ notify->post();
+ }
}
status_t ACodec::LoadedToIdleState::allocateBuffers() {
@@ -2046,8 +2056,18 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
mCodec->mNode, OMX_CommandPortEnable, kPortIndexOutput),
(status_t)OK);
- CHECK_EQ(mCodec->allocateBuffersOnPort(kPortIndexOutput),
- (status_t)OK);
+ status_t err;
+ if ((err = mCodec->allocateBuffersOnPort(
+ kPortIndexOutput)) != OK) {
+ LOGE("Failed to allocate output port buffers after "
+ "port reconfiguration (error 0x%08x)",
+ err);
+
+ sp<AMessage> notify = mCodec->mNotify->dup();
+ notify->setInt32("what", ACodec::kWhatError);
+ notify->setInt32("omx-error", OMX_ErrorUndefined);
+ notify->post();
+ }
return true;
} else if (data1 == (OMX_U32)OMX_CommandPortEnable) {
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index dd69e6b..d41ab1b 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -180,6 +180,8 @@ void AudioPlayer::pause(bool playPendingSamples) {
} else {
mAudioTrack->stop();
}
+
+ mNumFramesPlayed = 0;
} else {
if (mAudioSink.get() != NULL) {
mAudioSink->pause();
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index f2673b3..142dda0 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1152,22 +1152,26 @@ bool AwesomePlayer::isPlaying() const {
return (mFlags & PLAYING) || (mFlags & CACHE_UNDERRUN);
}
-void AwesomePlayer::setSurface(const sp<Surface> &surface) {
+status_t AwesomePlayer::setSurface(const sp<Surface> &surface) {
Mutex::Autolock autoLock(mLock);
mSurface = surface;
- setNativeWindow_l(surface);
+ return setNativeWindow_l(surface);
}
-void AwesomePlayer::setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) {
+status_t AwesomePlayer::setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) {
Mutex::Autolock autoLock(mLock);
mSurface.clear();
+
+ status_t err;
if (surfaceTexture != NULL) {
- setNativeWindow_l(new SurfaceTextureClient(surfaceTexture));
+ err = setNativeWindow_l(new SurfaceTextureClient(surfaceTexture));
} else {
- setNativeWindow_l(NULL);
+ err = setNativeWindow_l(NULL);
}
+
+ return err;
}
void AwesomePlayer::shutdownVideoDecoder_l() {
@@ -1190,11 +1194,11 @@ void AwesomePlayer::shutdownVideoDecoder_l() {
LOGI("video decoder shutdown completed");
}
-void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
+status_t AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
mNativeWindow = native;
if (mVideoSource == NULL) {
- return;
+ return OK;
}
LOGI("attempting to reconfigure to use new surface");
@@ -1206,7 +1210,12 @@ void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
shutdownVideoDecoder_l();
- CHECK_EQ(initVideoDecoder(), (status_t)OK);
+ status_t err = initVideoDecoder();
+
+ if (err != OK) {
+ LOGE("failed to reinstantiate video decoder after surface change.");
+ return err;
+ }
if (mLastVideoTimeUs >= 0) {
mSeeking = SEEK;
@@ -1217,6 +1226,8 @@ void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
if (wasPlaying) {
play_l();
}
+
+ return OK;
}
void AwesomePlayer::setAudioSink(
@@ -1318,6 +1329,7 @@ void AwesomePlayer::onRTSPSeekDone() {
status_t AwesomePlayer::seekTo_l(int64_t timeUs) {
if (mRTSPController != NULL) {
+ mSeekNotificationSent = false;
mRTSPController->seekAsync(timeUs, OnRTSPSeekDoneWrapper, this);
return OK;
}
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index ac3565f..256f3ba 100755
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -635,6 +635,12 @@ status_t CameraSource::stop() {
mStarted = false;
mFrameAvailableCondition.signal();
+ int64_t token;
+ bool isTokenValid = false;
+ if (mCamera != 0) {
+ token = IPCThreadState::self()->clearCallingIdentity();
+ isTokenValid = true;
+ }
releaseQueuedFrames();
while (!mFramesBeingEncoded.empty()) {
if (NO_ERROR !=
@@ -645,6 +651,9 @@ status_t CameraSource::stop() {
}
stopCameraRecording();
releaseCamera();
+ if (isTokenValid) {
+ IPCThreadState::self()->restoreCallingIdentity(token);
+ }
if (mCollectStats) {
LOGI("Frames received/encoded/dropped: %d/%d/%d in %lld us",
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 5f58090..46d87df 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -1173,7 +1173,7 @@ void MPEG4Writer::Track::addOneSttsTableEntry(
size_t sampleCount, int32_t duration) {
if (duration == 0) {
- LOGW("%d 0-duration samples found: %d", sampleCount);
+ LOGW("0-duration samples found: %d", sampleCount);
}
SttsTableEntry sttsEntry(sampleCount, duration);
mSttsTableEntries.push_back(sttsEntry);
@@ -1304,7 +1304,7 @@ void MPEG4Writer::bufferChunk(const Chunk& chunk) {
void MPEG4Writer::writeChunkToFile(Chunk* chunk) {
LOGV("writeChunkToFile: %lld from %s track",
- chunk.mTimestampUs, chunk.mTrack->isAudio()? "audio": "video");
+ chunk->mTimeStampUs, chunk->mTrack->isAudio()? "audio": "video");
int32_t isFirstSample = true;
while (!chunk->mSamples.empty()) {
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 27dfeab..7f09319 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -808,7 +808,7 @@ status_t OMXCodec::setVideoPortFormatType(
}
if (format.eCompressionFormat == compressionFormat
- && format.eColorFormat == colorFormat) {
+ && format.eColorFormat == colorFormat) {
found = true;
break;
}
@@ -838,6 +838,15 @@ static size_t getFrameSize(
case OMX_COLOR_FormatYUV420Planar:
case OMX_COLOR_FormatYUV420SemiPlanar:
case OMX_TI_COLOR_FormatYUV420PackedSemiPlanar:
+ /*
+ * FIXME: For the Opaque color format, the frame size does not
+ * need to be (w*h*3)/2. It just needs to
+ * be larger than certain minimum buffer size. However,
+ * currently, this opaque foramt has been tested only on
+ * YUV420 formats. If that is changed, then we need to revisit
+ * this part in the future
+ */
+ case OMX_COLOR_FormatAndroidOpaque:
return (width * height * 3) / 2;
default:
@@ -887,7 +896,7 @@ status_t OMXCodec::isColorFormatSupported(
// Make sure that omx component does not overwrite
// the incremented index (bug 2897413).
CHECK_EQ(index, portFormat.nIndex);
- if ((portFormat.eColorFormat == colorFormat)) {
+ if (portFormat.eColorFormat == colorFormat) {
LOGV("Found supported color format: %d", portFormat.eColorFormat);
return OK; // colorFormat is supported!
}
@@ -2316,6 +2325,7 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) {
{
CODEC_LOGV("OMX_EventPortSettingsChanged(port=%ld, data2=0x%08lx)",
data1, data2);
+ CHECK(mFilledBuffers.empty());
if (data2 == 0 || data2 == OMX_IndexParamPortDefinition) {
onPortSettingsChanged(data1);
@@ -2923,6 +2933,7 @@ bool OMXCodec::drainInputBuffer(BufferInfo *info) {
size_t offset = 0;
int32_t n = 0;
+
for (;;) {
MediaBuffer *srcBuffer;
if (mSeekTimeUs >= 0) {
@@ -3021,6 +3032,7 @@ bool OMXCodec::drainInputBuffer(BufferInfo *info) {
CHECK(info->mMediaBuffer == NULL);
info->mMediaBuffer = srcBuffer;
} else {
+ CHECK(srcBuffer->data() != NULL) ;
memcpy((uint8_t *)info->mData + offset,
(const uint8_t *)srcBuffer->data()
+ srcBuffer->range_offset(),
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index ddfd9ff..91b81c2 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
// #define LOG_NDEBUG 0
#define LOG_TAG "SurfaceMediaSource"
@@ -47,7 +46,9 @@ SurfaceMediaSource::SurfaceMediaSource(uint32_t bufW, uint32_t bufH) :
mSynchronousMode(true),
mConnectedApi(NO_CONNECTED_API),
mFrameRate(30),
- mStarted(false) {
+ mNumFramesReceived(0),
+ mNumFramesEncoded(0),
+ mStopped(false) {
LOGV("SurfaceMediaSource::SurfaceMediaSource");
sp<ISurfaceComposer> composer(ComposerService::getComposerService());
mGraphicBufferAlloc = composer->createGraphicBufferAlloc();
@@ -55,10 +56,9 @@ SurfaceMediaSource::SurfaceMediaSource(uint32_t bufW, uint32_t bufH) :
SurfaceMediaSource::~SurfaceMediaSource() {
LOGV("SurfaceMediaSource::~SurfaceMediaSource");
- if (mStarted) {
+ if (!mStopped) {
stop();
}
- freeAllBuffers();
}
size_t SurfaceMediaSource::getQueuedCount() const {
@@ -139,12 +139,12 @@ status_t SurfaceMediaSource::setBufferCount(int bufferCount) {
// here we're guaranteed that the client doesn't have dequeued buffers
// and will release all of its buffer references.
- freeAllBuffers();
mBufferCount = bufferCount;
mClientBufferCount = bufferCount;
mCurrentSlot = INVALID_BUFFER_SLOT;
mQueue.clear();
mDequeueCondition.signal();
+ freeAllBuffersLocked();
return OK;
}
@@ -164,7 +164,7 @@ status_t SurfaceMediaSource::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
uint32_t format, uint32_t usage) {
LOGV("dequeueBuffer");
-
+ Mutex::Autolock lock(mMutex);
// Check for the buffer size- the client should just use the
// default width and height, and not try to set those.
@@ -179,15 +179,14 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// TODO: Currently just uses mDefaultWidth/Height. In the future
// we might declare mHeight and mWidth and check against those here.
if ((w != 0) || (h != 0)) {
- LOGE("dequeuebuffer: invalid buffer size! Req: %dx%d, Found: %dx%d",
- mDefaultWidth, mDefaultHeight, w, h);
- return BAD_VALUE;
+ if ((w != mDefaultWidth) || (h != mDefaultHeight)) {
+ LOGE("dequeuebuffer: invalid buffer size! Req: %dx%d, Found: %dx%d",
+ mDefaultWidth, mDefaultHeight, w, h);
+ return BAD_VALUE;
+ }
}
- Mutex::Autolock lock(mMutex);
-
status_t returnFlags(OK);
-
int found, foundSync;
int dequeuedCount = 0;
bool tryAgain = true;
@@ -218,6 +217,9 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
LOGV("Waiting for the FIFO to drain");
mDequeueCondition.wait(mMutex);
}
+ if (mStopped) {
+ return NO_INIT;
+ }
// need to check again since the mode could have changed
// while we were waiting
minBufferCountNeeded = mSynchronousMode ?
@@ -228,7 +230,7 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
((mServerBufferCount != mBufferCount) ||
(mServerBufferCount < minBufferCountNeeded))) {
// here we're guaranteed that mQueue is empty
- freeAllBuffers();
+ freeAllBuffersLocked();
mBufferCount = mServerBufferCount;
if (mBufferCount < minBufferCountNeeded)
mBufferCount = minBufferCountNeeded;
@@ -290,9 +292,12 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// for for some buffers to be consumed
tryAgain = mSynchronousMode && (foundSync == INVALID_BUFFER_SLOT);
if (tryAgain) {
- LOGW("Waiting..In synchronous mode and no buffer to dQ");
+ LOGV("Waiting..In synchronous mode and no buffer to dequeue");
mDequeueCondition.wait(mMutex);
}
+ if (mStopped) {
+ return NO_INIT;
+ }
}
if (mSynchronousMode && found == INVALID_BUFFER_SLOT) {
@@ -304,7 +309,7 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
return -EBUSY;
}
- const int buf = found;
+ const int bufIndex = found;
*outBuf = found;
const bool useDefaultSize = !w && !h;
@@ -322,9 +327,9 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// buffer is now in DEQUEUED (but can also be current at the same time,
// if we're in synchronous mode)
- mSlots[buf].mBufferState = BufferSlot::DEQUEUED;
+ mSlots[bufIndex].mBufferState = BufferSlot::DEQUEUED;
- const sp<GraphicBuffer>& buffer(mSlots[buf].mGraphicBuffer);
+ const sp<GraphicBuffer>& buffer(mSlots[bufIndex].mGraphicBuffer);
if ((buffer == NULL) ||
(uint32_t(buffer->width) != w) ||
(uint32_t(buffer->height) != h) ||
@@ -342,22 +347,25 @@ status_t SurfaceMediaSource::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
if (updateFormat) {
mPixelFormat = format;
}
- mSlots[buf].mGraphicBuffer = graphicBuffer;
- mSlots[buf].mRequestBufferCalled = false;
+ mSlots[bufIndex].mGraphicBuffer = graphicBuffer;
+ mSlots[bufIndex].mRequestBufferCalled = false;
returnFlags |= ISurfaceTexture::BUFFER_NEEDS_REALLOCATION;
}
return returnFlags;
}
+// TODO: clean this up
status_t SurfaceMediaSource::setSynchronousMode(bool enabled) {
Mutex::Autolock lock(mMutex);
+ if (mStopped) {
+ LOGE("setSynchronousMode: SurfaceMediaSource has been stopped!");
+ return NO_INIT;
+ }
- status_t err = OK;
if (!enabled) {
- // going to asynchronous mode, drain the queue
- while (mSynchronousMode != enabled && !mQueue.isEmpty()) {
- mDequeueCondition.wait(mMutex);
- }
+ // Async mode is not allowed
+ LOGE("SurfaceMediaSource can be used only synchronous mode!");
+ return INVALID_OPERATION;
}
if (mSynchronousMode != enabled) {
@@ -368,13 +376,19 @@ status_t SurfaceMediaSource::setSynchronousMode(bool enabled) {
mSynchronousMode = enabled;
mDequeueCondition.signal();
}
- return err;
+ return OK;
}
status_t SurfaceMediaSource::connect(int api,
uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
LOGV("SurfaceMediaSource::connect");
Mutex::Autolock lock(mMutex);
+
+ if (mStopped) {
+ LOGE("Connect: SurfaceMediaSource has been stopped!");
+ return NO_INIT;
+ }
+
status_t err = NO_ERROR;
switch (api) {
case NATIVE_WINDOW_API_EGL:
@@ -397,9 +411,25 @@ status_t SurfaceMediaSource::connect(int api,
return err;
}
+// This is called by the client side when it is done
+// TODO: Currently, this also sets mStopped to true which
+// is needed for unblocking the encoder which might be
+// waiting to read more frames. So if on the client side,
+// the same thread supplies the frames and also calls stop
+// on the encoder, the client has to call disconnect before
+// it calls stop.
+// In the case of the camera,
+// that need not be required since the thread supplying the
+// frames is separate than the one calling stop.
status_t SurfaceMediaSource::disconnect(int api) {
LOGV("SurfaceMediaSource::disconnect");
Mutex::Autolock lock(mMutex);
+
+ if (mStopped) {
+ LOGE("disconnect: SurfaceMediaSoource is already stopped!");
+ return NO_INIT;
+ }
+
status_t err = NO_ERROR;
switch (api) {
case NATIVE_WINDOW_API_EGL:
@@ -408,6 +438,9 @@ status_t SurfaceMediaSource::disconnect(int api) {
case NATIVE_WINDOW_API_CAMERA:
if (mConnectedApi == api) {
mConnectedApi = NO_CONNECTED_API;
+ mStopped = true;
+ mDequeueCondition.signal();
+ mFrameAvailableCondition.signal();
} else {
err = -EINVAL;
}
@@ -419,45 +452,47 @@ status_t SurfaceMediaSource::disconnect(int api) {
return err;
}
-status_t SurfaceMediaSource::queueBuffer(int buf, int64_t timestamp,
+status_t SurfaceMediaSource::queueBuffer(int bufIndex, int64_t timestamp,
uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
LOGV("queueBuffer");
Mutex::Autolock lock(mMutex);
- if (buf < 0 || buf >= mBufferCount) {
+ if (bufIndex < 0 || bufIndex >= mBufferCount) {
LOGE("queueBuffer: slot index out of range [0, %d]: %d",
- mBufferCount, buf);
+ mBufferCount, bufIndex);
return -EINVAL;
- } else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
+ } else if (mSlots[bufIndex].mBufferState != BufferSlot::DEQUEUED) {
LOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
- buf, mSlots[buf].mBufferState);
+ bufIndex, mSlots[bufIndex].mBufferState);
return -EINVAL;
- } else if (!mSlots[buf].mRequestBufferCalled) {
+ } else if (!mSlots[bufIndex].mRequestBufferCalled) {
LOGE("queueBuffer: slot %d was enqueued without requesting a "
- "buffer", buf);
+ "buffer", bufIndex);
return -EINVAL;
}
if (mSynchronousMode) {
// in synchronous mode we queue all buffers in a FIFO
- mQueue.push_back(buf);
- LOGV("Client queued buffer on slot: %d, Q size = %d",
- buf, mQueue.size());
+ mQueue.push_back(bufIndex);
+ mNumFramesReceived++;
+ LOGV("Client queued buf# %d @slot: %d, Q size = %d, handle = %p, timestamp = %lld",
+ mNumFramesReceived, bufIndex, mQueue.size(),
+ mSlots[bufIndex].mGraphicBuffer->handle, timestamp);
} else {
// in asynchronous mode we only keep the most recent buffer
if (mQueue.empty()) {
- mQueue.push_back(buf);
+ mQueue.push_back(bufIndex);
} else {
Fifo::iterator front(mQueue.begin());
// buffer currently queued is freed
mSlots[*front].mBufferState = BufferSlot::FREE;
// and we record the new buffer index in the queued list
- *front = buf;
+ *front = bufIndex;
}
}
- mSlots[buf].mBufferState = BufferSlot::QUEUED;
- mSlots[buf].mTimestamp = timestamp;
+ mSlots[bufIndex].mBufferState = BufferSlot::QUEUED;
+ mSlots[bufIndex].mTimestamp = timestamp;
// TODO: (Confirm) Don't want to signal dequeue here.
// May be just in asynchronous mode?
// mDequeueCondition.signal();
@@ -482,7 +517,7 @@ status_t SurfaceMediaSource::queueBuffer(int buf, int64_t timestamp,
// wait to hear from StageFrightRecorder to set the buffer FREE
// Make sure this is called when the mutex is locked
status_t SurfaceMediaSource::onFrameReceivedLocked() {
- LOGV("On Frame Received");
+ LOGV("On Frame Received locked");
// Signal the encoder that a new frame has arrived
mFrameAvailableCondition.signal();
@@ -501,19 +536,19 @@ status_t SurfaceMediaSource::onFrameReceivedLocked() {
}
-void SurfaceMediaSource::cancelBuffer(int buf) {
+void SurfaceMediaSource::cancelBuffer(int bufIndex) {
LOGV("SurfaceMediaSource::cancelBuffer");
Mutex::Autolock lock(mMutex);
- if (buf < 0 || buf >= mBufferCount) {
+ if (bufIndex < 0 || bufIndex >= mBufferCount) {
LOGE("cancelBuffer: slot index out of range [0, %d]: %d",
- mBufferCount, buf);
+ mBufferCount, bufIndex);
return;
- } else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
+ } else if (mSlots[bufIndex].mBufferState != BufferSlot::DEQUEUED) {
LOGE("cancelBuffer: slot %d is not owned by the client (state=%d)",
- buf, mSlots[buf].mBufferState);
+ bufIndex, mSlots[bufIndex].mBufferState);
return;
}
- mSlots[buf].mBufferState = BufferSlot::FREE;
+ mSlots[bufIndex].mBufferState = BufferSlot::FREE;
mDequeueCondition.signal();
}
@@ -531,8 +566,8 @@ void SurfaceMediaSource::setFrameAvailableListener(
mFrameAvailableListener = listener;
}
-void SurfaceMediaSource::freeAllBuffers() {
- LOGV("freeAllBuffers");
+void SurfaceMediaSource::freeAllBuffersLocked() {
+ LOGV("freeAllBuffersLocked");
for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
mSlots[i].mGraphicBuffer = 0;
mSlots[i].mBufferState = BufferSlot::FREE;
@@ -648,10 +683,7 @@ int32_t SurfaceMediaSource::getFrameRate( ) const {
status_t SurfaceMediaSource::start(MetaData *params)
{
- LOGV("start");
- Mutex::Autolock lock(mMutex);
- CHECK(!mStarted);
- mStarted = true;
+ LOGV("started!");
return OK;
}
@@ -662,8 +694,11 @@ status_t SurfaceMediaSource::stop()
Mutex::Autolock lock(mMutex);
// TODO: Add waiting on mFrameCompletedCondition here?
- mStarted = false;
+ mStopped = true;
mFrameAvailableCondition.signal();
+ mDequeueCondition.signal();
+ mQueue.clear();
+ freeAllBuffersLocked();
return OK;
}
@@ -688,23 +723,25 @@ sp<MetaData> SurfaceMediaSource::getFormat()
}
status_t SurfaceMediaSource::read( MediaBuffer **buffer,
- const ReadOptions *options)
+ const ReadOptions *options)
{
+ Mutex::Autolock autoLock(mMutex) ;
+
LOGV("Read. Size of queued buffer: %d", mQueue.size());
*buffer = NULL;
- Mutex::Autolock autoLock(mMutex) ;
// If the recording has started and the queue is empty, then just
// wait here till the frames come in from the client side
- while (mStarted && mQueue.empty()) {
+ while (!mStopped && mQueue.empty()) {
LOGV("NO FRAMES! Recorder waiting for FrameAvailableCondition");
mFrameAvailableCondition.wait(mMutex);
}
// If the loop was exited as a result of stopping the recording,
// it is OK
- if (!mStarted) {
- return OK;
+ if (mStopped) {
+ LOGV("Read: SurfaceMediaSource is stopped. Returning NO_INIT;");
+ return NO_INIT;
}
// Update the current buffer info
@@ -712,15 +749,20 @@ status_t SurfaceMediaSource::read( MediaBuffer **buffer,
// can be more than one "current" slots.
Fifo::iterator front(mQueue.begin());
mCurrentSlot = *front;
+ mQueue.erase(front);
mCurrentBuf = mSlots[mCurrentSlot].mGraphicBuffer;
+ int64_t prevTimeStamp = mCurrentTimestamp;
mCurrentTimestamp = mSlots[mCurrentSlot].mTimestamp;
-
+ mNumFramesEncoded++;
// Pass the data to the MediaBuffer. Pass in only the metadata
passMetadataBufferLocked(buffer);
(*buffer)->setObserver(this);
(*buffer)->add_ref();
- (*buffer)->meta_data()->setInt64(kKeyTime, mCurrentTimestamp);
+ (*buffer)->meta_data()->setInt64(kKeyTime, mCurrentTimestamp / 1000);
+ LOGV("Frames encoded = %d, timestamp = %lld, time diff = %lld",
+ mNumFramesEncoded, mCurrentTimestamp / 1000,
+ mCurrentTimestamp / 1000 - prevTimeStamp / 1000);
return OK;
}
@@ -743,15 +785,17 @@ void SurfaceMediaSource::passMetadataBufferLocked(MediaBuffer **buffer) {
new MediaBuffer(4 + sizeof(buffer_handle_t));
char *data = (char *)tempBuffer->data();
if (data == NULL) {
- LOGE("Cannot allocate memory for passing buffer metadata!");
+ LOGE("Cannot allocate memory for metadata buffer!");
return;
}
OMX_U32 type = kMetadataBufferTypeGrallocSource;
memcpy(data, &type, 4);
memcpy(data + 4, &(mCurrentBuf->handle), sizeof(buffer_handle_t));
*buffer = tempBuffer;
-}
+ LOGV("handle = %p, , offset = %d, length = %d",
+ mCurrentBuf->handle, (*buffer)->range_length(), (*buffer)->range_offset());
+}
void SurfaceMediaSource::signalBufferReturned(MediaBuffer *buffer) {
LOGV("signalBufferReturned");
@@ -759,16 +803,19 @@ void SurfaceMediaSource::signalBufferReturned(MediaBuffer *buffer) {
bool foundBuffer = false;
Mutex::Autolock autoLock(mMutex);
- if (!mStarted) {
- LOGW("signalBufferReturned: mStarted = false! Nothing to do!");
+ if (mStopped) {
+ LOGV("signalBufferReturned: mStopped = true! Nothing to do!");
return;
}
- for (Fifo::iterator it = mQueue.begin(); it != mQueue.end(); ++it) {
- CHECK(mSlots[*it].mGraphicBuffer != NULL);
- if (checkBufferMatchesSlot(*it, buffer)) {
- mSlots[*it].mBufferState = BufferSlot::FREE;
- mQueue.erase(it);
+ for (int id = 0; id < NUM_BUFFER_SLOTS; id++) {
+ if (mSlots[id].mGraphicBuffer == NULL) {
+ continue;
+ }
+ if (checkBufferMatchesSlot(id, buffer)) {
+ LOGV("Slot %d returned, matches handle = %p", id,
+ mSlots[id].mGraphicBuffer->handle);
+ mSlots[id].mBufferState = BufferSlot::FREE;
buffer->setObserver(0);
buffer->release();
mDequeueCondition.signal();
@@ -792,5 +839,4 @@ bool SurfaceMediaSource::checkBufferMatchesSlot(int slot, MediaBuffer *buffer) {
return mSlots[slot].mGraphicBuffer->handle == bufferHandle;
}
-
} // end of namespace android
diff --git a/media/libstagefright/foundation/ALooperRoster.cpp b/media/libstagefright/foundation/ALooperRoster.cpp
index 8aa1b15..e399f2f 100644
--- a/media/libstagefright/foundation/ALooperRoster.cpp
+++ b/media/libstagefright/foundation/ALooperRoster.cpp
@@ -27,7 +27,8 @@
namespace android {
ALooperRoster::ALooperRoster()
- : mNextHandlerID(1) {
+ : mNextHandlerID(1),
+ mNextReplyID(1) {
}
ALooper::handler_id ALooperRoster::registerHandler(
@@ -70,15 +71,19 @@ void ALooperRoster::unregisterHandler(ALooper::handler_id handlerID) {
mHandlers.removeItemsAt(index);
}
-void ALooperRoster::postMessage(
+status_t ALooperRoster::postMessage(
const sp<AMessage> &msg, int64_t delayUs) {
Mutex::Autolock autoLock(mLock);
+ return postMessage_l(msg, delayUs);
+}
+status_t ALooperRoster::postMessage_l(
+ const sp<AMessage> &msg, int64_t delayUs) {
ssize_t index = mHandlers.indexOfKey(msg->target());
if (index < 0) {
LOGW("failed to post message. Target handler not registered.");
- return;
+ return -ENOENT;
}
const HandlerInfo &info = mHandlers.valueAt(index);
@@ -91,10 +96,12 @@ void ALooperRoster::postMessage(
msg->target());
mHandlers.removeItemsAt(index);
- return;
+ return -ENOENT;
}
looper->post(msg, delayUs);
+
+ return OK;
}
void ALooperRoster::deliverMessage(const sp<AMessage> &msg) {
@@ -145,4 +152,38 @@ sp<ALooper> ALooperRoster::findLooper(ALooper::handler_id handlerID) {
return looper;
}
+status_t ALooperRoster::postAndAwaitResponse(
+ const sp<AMessage> &msg, sp<AMessage> *response) {
+ Mutex::Autolock autoLock(mLock);
+
+ uint32_t replyID = mNextReplyID++;
+
+ msg->setInt32("replyID", replyID);
+
+ status_t err = postMessage_l(msg, 0 /* delayUs */);
+
+ if (err != OK) {
+ response->clear();
+ return err;
+ }
+
+ ssize_t index;
+ while ((index = mReplies.indexOfKey(replyID)) < 0) {
+ mRepliesCondition.wait(mLock);
+ }
+
+ *response = mReplies.valueAt(index);
+ mReplies.removeItemsAt(index);
+
+ return OK;
+}
+
+void ALooperRoster::postReply(uint32_t replyID, const sp<AMessage> &reply) {
+ Mutex::Autolock autoLock(mLock);
+
+ CHECK(mReplies.indexOfKey(replyID) < 0);
+ mReplies.add(replyID, reply);
+ mRepliesCondition.broadcast();
+}
+
} // namespace android
diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp
index b592c3f..582bdba 100644
--- a/media/libstagefright/foundation/AMessage.cpp
+++ b/media/libstagefright/foundation/AMessage.cpp
@@ -27,6 +27,8 @@
namespace android {
+extern ALooperRoster gLooperRoster;
+
AMessage::AMessage(uint32_t what, ALooper::handler_id target)
: mWhat(what),
mTarget(target),
@@ -227,11 +229,30 @@ bool AMessage::findRect(
}
void AMessage::post(int64_t delayUs) {
- extern ALooperRoster gLooperRoster;
-
gLooperRoster.postMessage(this, delayUs);
}
+status_t AMessage::postAndAwaitResponse(sp<AMessage> *response) {
+ return gLooperRoster.postAndAwaitResponse(this, response);
+}
+
+void AMessage::postReply(uint32_t replyID) {
+ gLooperRoster.postReply(replyID, this);
+}
+
+bool AMessage::senderAwaitsResponse(uint32_t *replyID) const {
+ int32_t tmp;
+ bool found = findInt32("replyID", &tmp);
+
+ if (!found) {
+ return false;
+ }
+
+ *replyID = static_cast<uint32_t>(tmp);
+
+ return true;
+}
+
sp<AMessage> AMessage::dup() const {
sp<AMessage> msg = new AMessage(mWhat, mTarget);
msg->mNumItems = mNumItems;
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index 14476d3..24cf77c 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -84,8 +84,8 @@ struct AwesomePlayer {
bool isPlaying() const;
- void setSurface(const sp<Surface> &surface);
- void setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture);
+ status_t setSurface(const sp<Surface> &surface);
+ status_t setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture);
void setAudioSink(const sp<MediaPlayerBase::AudioSink> &audioSink);
status_t setLooping(bool shouldLoop);
@@ -298,7 +298,7 @@ private:
void postAudioSeekComplete_l();
void shutdownVideoDecoder_l();
- void setNativeWindow_l(const sp<ANativeWindow> &native);
+ status_t setNativeWindow_l(const sp<ANativeWindow> &native);
bool isStreamingHTTP() const;
void sendCacheStats();
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
index 2e66a2c..ce07e32 100644
--- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
+++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
@@ -136,24 +136,28 @@ void AnotherPacketSource::queueAccessUnit(const sp<ABuffer> &buffer) {
void AnotherPacketSource::queueDiscontinuity(
ATSParser::DiscontinuityType type,
const sp<AMessage> &extra) {
- sp<ABuffer> buffer = new ABuffer(0);
- buffer->meta()->setInt32("discontinuity", static_cast<int32_t>(type));
- buffer->meta()->setMessage("extra", extra);
-
Mutex::Autolock autoLock(mLock);
-#if 0
- if (type == ATSParser::DISCONTINUITY_SEEK
- || type == ATSParser::DISCONTINUITY_FORMATCHANGE) {
- // XXX Fix this: This will also clear any pending discontinuities,
- // If there's a pending DISCONTINUITY_FORMATCHANGE and the new
- // discontinuity is "just" a DISCONTINUITY_SEEK, this will effectively
- // downgrade the type of discontinuity received by the client.
+ // Leave only discontinuities in the queue.
+ List<sp<ABuffer> >::iterator it = mBuffers.begin();
+ while (it != mBuffers.end()) {
+ sp<ABuffer> oldBuffer = *it;
+
+ int32_t oldDiscontinuityType;
+ if (!oldBuffer->meta()->findInt32(
+ "discontinuity", &oldDiscontinuityType)) {
+ it = mBuffers.erase(it);
+ continue;
+ }
- mBuffers.clear();
- mEOSResult = OK;
+ ++it;
}
-#endif
+
+ mEOSResult = OK;
+
+ sp<ABuffer> buffer = new ABuffer(0);
+ buffer->meta()->setInt32("discontinuity", static_cast<int32_t>(type));
+ buffer->meta()->setMessage("extra", extra);
mBuffers.push_back(buffer);
mCondition.signal();
diff --git a/media/libstagefright/tests/Android.mk b/media/libstagefright/tests/Android.mk
index 3ea8f39..357feb1 100644
--- a/media/libstagefright/tests/Android.mk
+++ b/media/libstagefright/tests/Android.mk
@@ -19,12 +19,13 @@ LOCAL_SHARED_LIBRARIES := \
libbinder \
libcutils \
libgui \
- libstlport \
- libui \
- libutils \
+ libmedia \
libstagefright \
libstagefright_omx \
libstagefright_foundation \
+ libstlport \
+ libui \
+ libutils \
LOCAL_STATIC_LIBRARIES := \
libgtest \
diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
index 5b32b68..d643a0b 100644
--- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp
+++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
@@ -14,14 +14,17 @@
* limitations under the License.
*/
-#define LOG_TAG "SurfaceMediaSource_test"
// #define LOG_NDEBUG 0
+#define LOG_TAG "SurfaceMediaSource_test"
#include <gtest/gtest.h>
#include <utils/String8.h>
#include <utils/Errors.h>
+#include <fcntl.h>
+#include <unistd.h>
#include <media/stagefright/SurfaceMediaSource.h>
+#include <media/mediarecorder.h>
#include <gui/SurfaceTextureClient.h>
#include <ui/GraphicBuffer.h>
@@ -33,24 +36,322 @@
#include <ui/FramebufferNativeWindow.h>
#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/MediaBufferGroup.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
-#include <media/stagefright/MPEG4Writer.h>
#include <media/stagefright/OMXClient.h>
#include <media/stagefright/OMXCodec.h>
#include <OMX_Component.h>
#include "DummyRecorder.h"
+
namespace android {
+class GLTest : public ::testing::Test {
+protected:
+
+ GLTest():
+ mEglDisplay(EGL_NO_DISPLAY),
+ mEglSurface(EGL_NO_SURFACE),
+ mEglContext(EGL_NO_CONTEXT) {
+ }
+
+ virtual void SetUp() {
+ LOGV("GLTest::SetUp()");
+ mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay);
+
+ EGLint majorVersion;
+ EGLint minorVersion;
+ EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ RecordProperty("EglVersionMajor", majorVersion);
+ RecordProperty("EglVersionMajor", minorVersion);
+
+ EGLint numConfigs = 0;
+ EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), &mGlConfig,
+ 1, &numConfigs));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+
+ char* displaySecsEnv = getenv("GLTEST_DISPLAY_SECS");
+ if (displaySecsEnv != NULL) {
+ mDisplaySecs = atoi(displaySecsEnv);
+ if (mDisplaySecs < 0) {
+ mDisplaySecs = 0;
+ }
+ } else {
+ mDisplaySecs = 0;
+ }
+
+ if (mDisplaySecs > 0) {
+ mComposerClient = new SurfaceComposerClient;
+ ASSERT_EQ(NO_ERROR, mComposerClient->initCheck());
+
+ mSurfaceControl = mComposerClient->createSurface(
+ String8("Test Surface"), 0,
+ getSurfaceWidth(), getSurfaceHeight(),
+ PIXEL_FORMAT_RGB_888, 0);
+
+ ASSERT_TRUE(mSurfaceControl != NULL);
+ ASSERT_TRUE(mSurfaceControl->isValid());
+
+ SurfaceComposerClient::openGlobalTransaction();
+ ASSERT_EQ(NO_ERROR, mSurfaceControl->setLayer(0x7FFFFFFF));
+ ASSERT_EQ(NO_ERROR, mSurfaceControl->show());
+ SurfaceComposerClient::closeGlobalTransaction();
+
+ sp<ANativeWindow> window = mSurfaceControl->getSurface();
+ mEglSurface = eglCreateWindowSurface(mEglDisplay, mGlConfig,
+ window.get(), NULL);
+ } else {
+ EGLint pbufferAttribs[] = {
+ EGL_WIDTH, getSurfaceWidth(),
+ EGL_HEIGHT, getSurfaceHeight(),
+ EGL_NONE };
+
+ mEglSurface = eglCreatePbufferSurface(mEglDisplay, mGlConfig,
+ pbufferAttribs);
+ }
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ ASSERT_NE(EGL_NO_SURFACE, mEglSurface);
+
+ mEglContext = eglCreateContext(mEglDisplay, mGlConfig, EGL_NO_CONTEXT,
+ getContextAttribs());
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ ASSERT_NE(EGL_NO_CONTEXT, mEglContext);
+
+ EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
+ mEglContext));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+
+ EGLint w, h;
+ EXPECT_TRUE(eglQuerySurface(mEglDisplay, mEglSurface, EGL_WIDTH, &w));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ EXPECT_TRUE(eglQuerySurface(mEglDisplay, mEglSurface, EGL_HEIGHT, &h));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ RecordProperty("EglSurfaceWidth", w);
+ RecordProperty("EglSurfaceHeight", h);
+
+ glViewport(0, 0, w, h);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ }
+
+ virtual void TearDown() {
+ // Display the result
+ if (mDisplaySecs > 0 && mEglSurface != EGL_NO_SURFACE) {
+ eglSwapBuffers(mEglDisplay, mEglSurface);
+ sleep(mDisplaySecs);
+ }
+
+ if (mComposerClient != NULL) {
+ mComposerClient->dispose();
+ }
+ if (mEglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(mEglDisplay, mEglContext);
+ }
+ if (mEglSurface != EGL_NO_SURFACE) {
+ eglDestroySurface(mEglDisplay, mEglSurface);
+ }
+ if (mEglDisplay != EGL_NO_DISPLAY) {
+ eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE,
+ EGL_NO_CONTEXT);
+ eglTerminate(mEglDisplay);
+ }
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ }
+
+ virtual EGLint const* getConfigAttribs() {
+ LOGV("GLTest getConfigAttribs");
+ static EGLint sDefaultConfigAttribs[] = {
+ EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 8,
+ EGL_DEPTH_SIZE, 16,
+ EGL_STENCIL_SIZE, 8,
+ EGL_NONE };
+
+ return sDefaultConfigAttribs;
+ }
+
+ virtual EGLint const* getContextAttribs() {
+ static EGLint sDefaultContextAttribs[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 2,
+ EGL_NONE };
+
+ return sDefaultContextAttribs;
+ }
+
+ virtual EGLint getSurfaceWidth() {
+ return 512;
+ }
+
+ virtual EGLint getSurfaceHeight() {
+ return 512;
+ }
+
+ void loadShader(GLenum shaderType, const char* pSource, GLuint* outShader) {
+ GLuint shader = glCreateShader(shaderType);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ if (shader) {
+ glShaderSource(shader, 1, &pSource, NULL);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ glCompileShader(shader);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ GLint compiled = 0;
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ if (!compiled) {
+ GLint infoLen = 0;
+ glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ if (infoLen) {
+ char* buf = (char*) malloc(infoLen);
+ if (buf) {
+ glGetShaderInfoLog(shader, infoLen, NULL, buf);
+ printf("Shader compile log:\n%s\n", buf);
+ free(buf);
+ FAIL();
+ }
+ } else {
+ char* buf = (char*) malloc(0x1000);
+ if (buf) {
+ glGetShaderInfoLog(shader, 0x1000, NULL, buf);
+ printf("Shader compile log:\n%s\n", buf);
+ free(buf);
+ FAIL();
+ }
+ }
+ glDeleteShader(shader);
+ shader = 0;
+ }
+ }
+ ASSERT_TRUE(shader != 0);
+ *outShader = shader;
+ }
+
+ void createProgram(const char* pVertexSource, const char* pFragmentSource,
+ GLuint* outPgm) {
+ GLuint vertexShader, fragmentShader;
+ {
+ SCOPED_TRACE("compiling vertex shader");
+ loadShader(GL_VERTEX_SHADER, pVertexSource, &vertexShader);
+ if (HasFatalFailure()) {
+ return;
+ }
+ }
+ {
+ SCOPED_TRACE("compiling fragment shader");
+ loadShader(GL_FRAGMENT_SHADER, pFragmentSource, &fragmentShader);
+ if (HasFatalFailure()) {
+ return;
+ }
+ }
+
+ GLuint program = glCreateProgram();
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ if (program) {
+ glAttachShader(program, vertexShader);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ glAttachShader(program, fragmentShader);
+ ASSERT_EQ(GLenum(GL_NO_ERROR), glGetError());
+ glLinkProgram(program);
+ GLint linkStatus = GL_FALSE;
+ glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
+ if (linkStatus != GL_TRUE) {
+ GLint bufLength = 0;
+ glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);
+ if (bufLength) {
+ char* buf = (char*) malloc(bufLength);
+ if (buf) {
+ glGetProgramInfoLog(program, bufLength, NULL, buf);
+ printf("Program link log:\n%s\n", buf);
+ free(buf);
+ FAIL();
+ }
+ }
+ glDeleteProgram(program);
+ program = 0;
+ }
+ }
+ glDeleteShader(vertexShader);
+ glDeleteShader(fragmentShader);
+ ASSERT_TRUE(program != 0);
+ *outPgm = program;
+ }
+ static int abs(int value) {
+ return value > 0 ? value : -value;
+ }
+
+ ::testing::AssertionResult checkPixel(int x, int y, int r,
+ int g, int b, int a, int tolerance=2) {
+ GLubyte pixel[4];
+ String8 msg;
+ glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
+ GLenum err = glGetError();
+ if (err != GL_NO_ERROR) {
+ msg += String8::format("error reading pixel: %#x", err);
+ while ((err = glGetError()) != GL_NO_ERROR) {
+ msg += String8::format(", %#x", err);
+ }
+ fprintf(stderr, "pixel check failure: %s\n", msg.string());
+ return ::testing::AssertionFailure(
+ ::testing::Message(msg.string()));
+ }
+ if (r >= 0 && abs(r - int(pixel[0])) > tolerance) {
+ msg += String8::format("r(%d isn't %d)", pixel[0], r);
+ }
+ if (g >= 0 && abs(g - int(pixel[1])) > tolerance) {
+ if (!msg.isEmpty()) {
+ msg += " ";
+ }
+ msg += String8::format("g(%d isn't %d)", pixel[1], g);
+ }
+ if (b >= 0 && abs(b - int(pixel[2])) > tolerance) {
+ if (!msg.isEmpty()) {
+ msg += " ";
+ }
+ msg += String8::format("b(%d isn't %d)", pixel[2], b);
+ }
+ if (a >= 0 && abs(a - int(pixel[3])) > tolerance) {
+ if (!msg.isEmpty()) {
+ msg += " ";
+ }
+ msg += String8::format("a(%d isn't %d)", pixel[3], a);
+ }
+ if (!msg.isEmpty()) {
+ fprintf(stderr, "pixel check failure: %s\n", msg.string());
+ return ::testing::AssertionFailure(
+ ::testing::Message(msg.string()));
+ } else {
+ return ::testing::AssertionSuccess();
+ }
+ }
+
+ int mDisplaySecs;
+ sp<SurfaceComposerClient> mComposerClient;
+ sp<SurfaceControl> mSurfaceControl;
+
+ EGLDisplay mEglDisplay;
+ EGLSurface mEglSurface;
+ EGLContext mEglContext;
+ EGLConfig mGlConfig;
+};
+
+///////////////////////////////////////////////////////////////////////
+// Class for the NON-GL tests
+///////////////////////////////////////////////////////////////////////
class SurfaceMediaSourceTest : public ::testing::Test {
public:
- SurfaceMediaSourceTest( ): mYuvTexWidth(64), mYuvTexHeight(66) { }
- sp<MPEG4Writer> setUpWriter(OMXClient &client );
+ SurfaceMediaSourceTest( ): mYuvTexWidth(176), mYuvTexHeight(144) { }
void oneBufferPass(int width, int height );
+ void oneBufferPassNoFill(int width, int height );
static void fillYV12Buffer(uint8_t* buf, int w, int h, int stride) ;
static void fillYV12BufferRect(uint8_t* buf, int w, int h,
int stride, const android_native_rect_t& rect) ;
@@ -62,27 +363,156 @@ protected:
mSMS->setSynchronousMode(true);
mSTC = new SurfaceTextureClient(mSMS);
mANW = mSTC;
+ }
+ virtual void TearDown() {
+ mSMS.clear();
+ mSTC.clear();
+ mANW.clear();
}
+ const int mYuvTexWidth;
+ const int mYuvTexHeight;
+
+ sp<SurfaceMediaSource> mSMS;
+ sp<SurfaceTextureClient> mSTC;
+ sp<ANativeWindow> mANW;
+};
+
+///////////////////////////////////////////////////////////////////////
+// Class for the GL tests
+///////////////////////////////////////////////////////////////////////
+class SurfaceMediaSourceGLTest : public GLTest {
+public:
+
+ SurfaceMediaSourceGLTest( ): mYuvTexWidth(176), mYuvTexHeight(144) { }
+ virtual EGLint const* getConfigAttribs();
+ void oneBufferPassGL(int num = 0);
+ static sp<MediaRecorder> setUpMediaRecorder(int fileDescriptor, int videoSource,
+ int outputFormat, int videoEncoder, int width, int height, int fps);
+protected:
+
+ virtual void SetUp() {
+ LOGV("SMS-GLTest::SetUp()");
+ android::ProcessState::self()->startThreadPool();
+ mSMS = new SurfaceMediaSource(mYuvTexWidth, mYuvTexHeight);
+ mSTC = new SurfaceTextureClient(mSMS);
+ mANW = mSTC;
+
+ // Doing the setup related to the GL Side
+ GLTest::SetUp();
+ }
virtual void TearDown() {
mSMS.clear();
mSTC.clear();
mANW.clear();
+ GLTest::TearDown();
+ eglDestroySurface(mEglDisplay, mSmsEglSurface);
}
+ void setUpEGLSurfaceFromMediaRecorder(sp<MediaRecorder>& mr);
+
const int mYuvTexWidth;
const int mYuvTexHeight;
sp<SurfaceMediaSource> mSMS;
sp<SurfaceTextureClient> mSTC;
sp<ANativeWindow> mANW;
-
+ EGLConfig mSMSGlConfig;
+ EGLSurface mSmsEglSurface;
};
+/////////////////////////////////////////////////////////////////////
+// Methods in SurfaceMediaSourceGLTest
+/////////////////////////////////////////////////////////////////////
+EGLint const* SurfaceMediaSourceGLTest::getConfigAttribs() {
+ LOGV("SurfaceMediaSourceGLTest getConfigAttribs");
+ static EGLint sDefaultConfigAttribs[] = {
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_RECORDABLE_ANDROID, EGL_TRUE,
+ EGL_NONE };
+
+ return sDefaultConfigAttribs;
+}
+
+// One pass of dequeuing and queuing a GLBuffer
+void SurfaceMediaSourceGLTest::oneBufferPassGL(int num) {
+ int d = num % 50;
+ float f = 0.2f; // 0.1f * d;
+
+ glClearColor(0, 0.3, 0, 0.6);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glEnable(GL_SCISSOR_TEST);
+ glScissor(4 + d, 4 + d, 4, 4);
+ glClearColor(1.0 - f, f, f, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glScissor(24 + d, 48 + d, 4, 4);
+ glClearColor(f, 1.0 - f, f, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glScissor(37 + d, 17 + d, 4, 4);
+ glClearColor(f, f, 1.0 - f, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ // The following call dequeues and queues the buffer
+ eglSwapBuffers(mEglDisplay, mSmsEglSurface);
+ glDisable(GL_SCISSOR_TEST);
+}
+
+// Set up the MediaRecorder which runs in the same process as mediaserver
+sp<MediaRecorder> SurfaceMediaSourceGLTest::setUpMediaRecorder(int fd, int videoSource,
+ int outputFormat, int videoEncoder, int width, int height, int fps) {
+ sp<MediaRecorder> mr = new MediaRecorder();
+ mr->setVideoSource(videoSource);
+ mr->setOutputFormat(outputFormat);
+ mr->setVideoEncoder(videoEncoder);
+ mr->setOutputFile(fd, 0, 0);
+ mr->setVideoSize(width, height);
+ mr->setVideoFrameRate(fps);
+ mr->prepare();
+ LOGV("Starting MediaRecorder...");
+ CHECK_EQ(OK, mr->start());
+ return mr;
+}
+
+// query the mediarecorder for a surfacemeidasource and create an egl surface with that
+void SurfaceMediaSourceGLTest::setUpEGLSurfaceFromMediaRecorder(sp<MediaRecorder>& mr) {
+ sp<ISurfaceTexture> iST = mr->querySurfaceMediaSourceFromMediaServer();
+ mSTC = new SurfaceTextureClient(iST);
+ mANW = mSTC;
+
+ EGLint numConfigs = 0;
+ EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), &mSMSGlConfig,
+ 1, &numConfigs));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+
+ LOGV("Native Window = %p, mSTC = %p", mANW.get(), mSTC.get());
+
+ mSmsEglSurface = eglCreateWindowSurface(mEglDisplay, mSMSGlConfig,
+ mANW.get(), NULL);
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ ASSERT_NE(EGL_NO_SURFACE, mSmsEglSurface) ;
+
+ EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mSmsEglSurface, mSmsEglSurface,
+ mEglContext));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+}
+
+
+/////////////////////////////////////////////////////////////////////
+// Methods in SurfaceMediaSourceTest
+/////////////////////////////////////////////////////////////////////
+
+// One pass of dequeuing and queuing the buffer. Fill it in with
+// cpu YV12 buffer
void SurfaceMediaSourceTest::oneBufferPass(int width, int height ) {
- LOGV("One Buffer Pass");
ANativeWindowBuffer* anb;
ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb));
ASSERT_TRUE(anb != NULL);
@@ -99,42 +529,16 @@ void SurfaceMediaSourceTest::oneBufferPass(int width, int height ) {
ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer()));
}
-sp<MPEG4Writer> SurfaceMediaSourceTest::setUpWriter(OMXClient &client ) {
- // Writing to a file
- const char *fileName = "/sdcard/outputSurfEnc.mp4";
- sp<MetaData> enc_meta = new MetaData;
- enc_meta->setInt32(kKeyBitRate, 300000);
- enc_meta->setInt32(kKeyFrameRate, 30);
-
- enc_meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_MPEG4);
-
- sp<MetaData> meta = mSMS->getFormat();
-
- int32_t width, height, stride, sliceHeight, colorFormat;
- CHECK(meta->findInt32(kKeyWidth, &width));
- CHECK(meta->findInt32(kKeyHeight, &height));
- CHECK(meta->findInt32(kKeyStride, &stride));
- CHECK(meta->findInt32(kKeySliceHeight, &sliceHeight));
- CHECK(meta->findInt32(kKeyColorFormat, &colorFormat));
-
- enc_meta->setInt32(kKeyWidth, width);
- enc_meta->setInt32(kKeyHeight, height);
- enc_meta->setInt32(kKeyIFramesInterval, 1);
- enc_meta->setInt32(kKeyStride, stride);
- enc_meta->setInt32(kKeySliceHeight, sliceHeight);
- // TODO: overwriting the colorformat since the format set by GRAlloc
- // could be wrong or not be read by OMX
- enc_meta->setInt32(kKeyColorFormat, OMX_COLOR_FormatYUV420Planar);
-
-
- sp<MediaSource> encoder =
- OMXCodec::Create(
- client.interface(), enc_meta, true /* createEncoder */, mSMS);
-
- sp<MPEG4Writer> writer = new MPEG4Writer(fileName);
- writer->addSource(encoder);
+// Dequeuing and queuing the buffer without really filling it in.
+void SurfaceMediaSourceTest::oneBufferPassNoFill(int width, int height ) {
+ ANativeWindowBuffer* anb;
+ ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb));
+ ASSERT_TRUE(anb != NULL);
- return writer;
+ sp<GraphicBuffer> buf(new GraphicBuffer(anb, false));
+ // ASSERT_EQ(NO_ERROR, mANW->lockBuffer(mANW.get(), buf->getNativeBuffer()));
+ // We do not fill the buffer in. Just queue it back.
+ ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer()));
}
// Fill a YV12 buffer with a multi-colored checkerboard pattern
@@ -216,46 +620,53 @@ struct SimpleDummyRecorder {
return OK;
}
};
-
///////////////////////////////////////////////////////////////////
// TESTS
+// SurfaceMediaSourceTest class contains tests that fill the buffers
+// using the cpu calls
+// SurfaceMediaSourceGLTest class contains tests that fill the buffers
+// using the GL calls.
+// TODO: None of the tests actually verify the encoded images.. so at this point,
+// these are mostly functionality tests + visual inspection
+//////////////////////////////////////////////////////////////////////
+
// Just pass one buffer from the native_window to the SurfaceMediaSource
-TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotOneBufferPass) {
+// Dummy Encoder
+static int testId = 1;
+TEST_F(SurfaceMediaSourceTest, DISABLED_DummyEncodingFromCpuFilledYV12BufferNpotOneBufferPass) {
+ LOGV("Test # %d", testId++);
LOGV("Testing OneBufferPass ******************************");
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 0, 0, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
-
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
oneBufferPass(mYuvTexWidth, mYuvTexHeight);
}
// Pass the buffer with the wrong height and weight and should not be accepted
-TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotWrongSizeBufferPass) {
+// Dummy Encoder
+TEST_F(SurfaceMediaSourceTest, DISABLED_DummyEncodingFromCpuFilledYV12BufferNpotWrongSizeBufferPass) {
+ LOGV("Test # %d", testId++);
LOGV("Testing Wrong size BufferPass ******************************");
// setting the client side buffer size different than the server size
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 10, 10, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_dimensions(mANW.get(),
+ 10, 10));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
ANativeWindowBuffer* anb;
- // make sure we get an error back when dequeuing!
+ // Note: make sure we get an ERROR back when dequeuing!
ASSERT_NE(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb));
}
-
// pass multiple buffers from the native_window the SurfaceMediaSource
-// A dummy writer is used to simulate actual MPEG4Writer
-TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPass) {
+// Dummy Encoder
+TEST_F(SurfaceMediaSourceTest, DISABLED_DummyEncodingFromCpuFilledYV12BufferNpotMultiBufferPass) {
+ LOGV("Test # %d", testId++);
LOGV("Testing MultiBufferPass, Dummy Recorder *********************");
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 0, 0, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
SimpleDummyRecorder writer(mSMS);
writer.start();
@@ -272,14 +683,13 @@ TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPa
}
// Delayed pass of multiple buffers from the native_window the SurfaceMediaSource
-// A dummy writer is used to simulate actual MPEG4Writer
-TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPassLag) {
+// Dummy Encoder
+TEST_F(SurfaceMediaSourceTest, DISABLED_DummyLagEncodingFromCpuFilledYV12BufferNpotMultiBufferPass) {
+ LOGV("Test # %d", testId++);
LOGV("Testing MultiBufferPass, Dummy Recorder Lagging **************");
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 0, 0, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
SimpleDummyRecorder writer(mSMS);
writer.start();
@@ -299,12 +709,11 @@ TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPa
// pass multiple buffers from the native_window the SurfaceMediaSource
// A dummy writer (MULTITHREADED) is used to simulate actual MPEG4Writer
-TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPassThreaded) {
+TEST_F(SurfaceMediaSourceTest, DISABLED_DummyThreadedEncodingFromCpuFilledYV12BufferNpotMultiBufferPass) {
+ LOGV("Test # %d", testId++);
LOGV("Testing MultiBufferPass, Dummy Recorder Multi-Threaded **********");
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 0, 0, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
DummyRecorder writer(mSMS);
writer.start();
@@ -318,32 +727,210 @@ TEST_F(SurfaceMediaSourceTest, EncodingFromCpuFilledYV12BufferNpotMultiBufferPas
writer.stop();
}
-// Test to examine the actual encoding. Temporarily disabled till the
-// colorformat and encoding from GRAlloc data is resolved
-TEST_F(SurfaceMediaSourceTest, DISABLED_EncodingFromCpuFilledYV12BufferNpotWrite) {
- LOGV("Testing the whole pipeline with actual Recorder");
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(mANW.get(),
- 0, 0, HAL_PIXEL_FORMAT_YV12));
- ASSERT_EQ(NO_ERROR, native_window_set_usage(mANW.get(),
- GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN));
- OMXClient client;
- CHECK_EQ(OK, client.connect());
-
- sp<MPEG4Writer> writer = setUpWriter(client);
- int64_t start = systemTime();
- CHECK_EQ(OK, writer->start());
+// Test to examine actual encoding using mediarecorder
+// We use the mediaserver to create a mediarecorder and send
+// it back to us. So SurfaceMediaSource lives in the same process
+// as the mediaserver.
+// Very close to the actual camera, except that the
+// buffers are filled and queueud by the CPU instead of GL.
+TEST_F(SurfaceMediaSourceTest, DISABLED_EncodingFromCpuYV12BufferNpotWriteMediaServer) {
+ LOGV("Test # %d", testId++);
+ LOGV("************** Testing the whole pipeline with actual MediaRecorder ***********");
+ LOGV("************** SurfaceMediaSource is same process as mediaserver ***********");
+
+ const char *fileName = "/sdcard/outputSurfEncMSource.mp4";
+ int fd = open(fileName, O_RDWR | O_CREAT, 0744);
+ if (fd < 0) {
+ LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+ }
+ CHECK(fd >= 0);
+
+ sp<MediaRecorder> mr = SurfaceMediaSourceGLTest::setUpMediaRecorder(fd,
+ VIDEO_SOURCE_GRALLOC_BUFFER,
+ OUTPUT_FORMAT_MPEG_4, VIDEO_ENCODER_H264, mYuvTexWidth,
+ mYuvTexHeight, 30);
+ // get the reference to the surfacemediasource living in
+ // mediaserver that is created by stagefrightrecorder
+ sp<ISurfaceTexture> iST = mr->querySurfaceMediaSourceFromMediaServer();
+ mSTC = new SurfaceTextureClient(iST);
+ mANW = mSTC;
+ ASSERT_EQ(NO_ERROR, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU));
+ ASSERT_EQ(NO_ERROR, native_window_set_buffers_format(mANW.get(),
+ HAL_PIXEL_FORMAT_YV12));
int32_t nFramesCount = 0;
while (nFramesCount <= 300) {
- oneBufferPass(mYuvTexWidth, mYuvTexHeight);
+ oneBufferPassNoFill(mYuvTexWidth, mYuvTexHeight);
nFramesCount++;
+ LOGV("framesCount = %d", nFramesCount);
}
- CHECK_EQ(OK, writer->stop());
- writer.clear();
- int64_t end = systemTime();
- client.disconnect();
+ ASSERT_EQ(NO_ERROR, native_window_api_disconnect(mANW.get(), NATIVE_WINDOW_API_CPU));
+ LOGV("Stopping MediaRecorder...");
+ CHECK_EQ(OK, mr->stop());
+ mr.clear();
+ close(fd);
}
+//////////////////////////////////////////////////////////////////////
+// GL tests
+/////////////////////////////////////////////////////////////////////
+
+// Test to examine whether we can choose the Recordable Android GLConfig
+// DummyRecorder used- no real encoding here
+TEST_F(SurfaceMediaSourceGLTest, ChooseAndroidRecordableEGLConfigDummyWrite) {
+ LOGV("Test # %d", testId++);
+ LOGV("Test to verify creating a surface w/ right config *********");
+
+ mSMS = new SurfaceMediaSource(mYuvTexWidth, mYuvTexHeight);
+ mSTC = new SurfaceTextureClient(mSMS);
+ mANW = mSTC;
+
+ DummyRecorder writer(mSMS);
+ writer.start();
+
+ EGLint numConfigs = 0;
+ EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), &mSMSGlConfig,
+ 1, &numConfigs));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+
+ mSmsEglSurface = eglCreateWindowSurface(mEglDisplay, mSMSGlConfig,
+ mANW.get(), NULL);
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ ASSERT_NE(EGL_NO_SURFACE, mSmsEglSurface) ;
+
+ EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mSmsEglSurface, mSmsEglSurface,
+ mEglContext));
+ ASSERT_EQ(EGL_SUCCESS, eglGetError());
+ int32_t nFramesCount = 0;
+ while (nFramesCount <= 300) {
+ oneBufferPassGL();
+ nFramesCount++;
+ LOGV("framesCount = %d", nFramesCount);
+ }
+
+ ASSERT_EQ(NO_ERROR, native_window_api_disconnect(mANW.get(), NATIVE_WINDOW_API_EGL));
+ writer.stop();
+}
+// Test to examine whether we can render GL buffers in to the surface
+// created with the native window handle
+TEST_F(SurfaceMediaSourceGLTest, RenderingToRecordableEGLSurfaceWorks) {
+ LOGV("Test # %d", testId++);
+ LOGV("RenderingToRecordableEGLSurfaceWorks *********************");
+ // Do the producer side of things
+ glClearColor(0.6, 0.6, 0.6, 0.6);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glEnable(GL_SCISSOR_TEST);
+ glScissor(4, 4, 4, 4);
+ glClearColor(1.0, 0.0, 0.0, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glScissor(24, 48, 4, 4);
+ glClearColor(0.0, 1.0, 0.0, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glScissor(37, 17, 4, 4);
+ glClearColor(0.0, 0.0, 1.0, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ EXPECT_TRUE(checkPixel( 0, 0, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(63, 0, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(63, 63, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel( 0, 63, 153, 153, 153, 153));
+
+ EXPECT_TRUE(checkPixel( 4, 7, 255, 0, 0, 255));
+ EXPECT_TRUE(checkPixel(25, 51, 0, 255, 0, 255));
+ EXPECT_TRUE(checkPixel(40, 19, 0, 0, 255, 255));
+ EXPECT_TRUE(checkPixel(29, 51, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel( 5, 32, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(13, 8, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(46, 3, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(30, 33, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel( 6, 52, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(55, 33, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(16, 29, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel( 1, 30, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(41, 37, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(46, 29, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel(15, 25, 153, 153, 153, 153));
+ EXPECT_TRUE(checkPixel( 3, 52, 153, 153, 153, 153));
+}
+
+// Test to examine the actual encoding with GL buffers
+// Actual encoder, Actual GL Buffers Filled SurfaceMediaSource
+// The same pattern is rendered every frame
+TEST_F(SurfaceMediaSourceGLTest, EncodingFromGLRgbaSameImageEachBufNpotWrite) {
+ LOGV("Test # %d", testId++);
+ LOGV("************** Testing the whole pipeline with actual Recorder ***********");
+ LOGV("************** GL Filling the buffers ***********");
+ // Note: No need to set the colorformat for the buffers. The colorformat is
+ // in the GRAlloc buffers itself.
+
+ const char *fileName = "/sdcard/outputSurfEncMSourceGL.mp4";
+ int fd = open(fileName, O_RDWR | O_CREAT, 0744);
+ if (fd < 0) {
+ LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+ }
+ CHECK(fd >= 0);
+
+ sp<MediaRecorder> mr = setUpMediaRecorder(fd, VIDEO_SOURCE_GRALLOC_BUFFER,
+ OUTPUT_FORMAT_MPEG_4, VIDEO_ENCODER_H264, mYuvTexWidth, mYuvTexHeight, 30);
+
+ // get the reference to the surfacemediasource living in
+ // mediaserver that is created by stagefrightrecorder
+ setUpEGLSurfaceFromMediaRecorder(mr);
+
+ int32_t nFramesCount = 0;
+ while (nFramesCount <= 300) {
+ oneBufferPassGL();
+ nFramesCount++;
+ LOGV("framesCount = %d", nFramesCount);
+ }
+
+ ASSERT_EQ(NO_ERROR, native_window_api_disconnect(mANW.get(), NATIVE_WINDOW_API_EGL));
+ LOGV("Stopping MediaRecorder...");
+ CHECK_EQ(OK, mr->stop());
+ mr.clear();
+ close(fd);
+}
+
+// Test to examine the actual encoding from the GL Buffers
+// Actual encoder, Actual GL Buffers Filled SurfaceMediaSource
+// A different pattern is rendered every frame
+TEST_F(SurfaceMediaSourceGLTest, EncodingFromGLRgbaDiffImageEachBufNpotWrite) {
+ LOGV("Test # %d", testId++);
+ LOGV("************** Testing the whole pipeline with actual Recorder ***********");
+ LOGV("************** Diff GL Filling the buffers ***********");
+ // Note: No need to set the colorformat for the buffers. The colorformat is
+ // in the GRAlloc buffers itself.
+
+ const char *fileName = "/sdcard/outputSurfEncMSourceGLDiff.mp4";
+ int fd = open(fileName, O_RDWR | O_CREAT, 0744);
+ if (fd < 0) {
+ LOGE("ERROR: Could not open the the file %s, fd = %d !!", fileName, fd);
+ }
+ CHECK(fd >= 0);
+
+ sp<MediaRecorder> mr = setUpMediaRecorder(fd, VIDEO_SOURCE_GRALLOC_BUFFER,
+ OUTPUT_FORMAT_MPEG_4, VIDEO_ENCODER_H264, mYuvTexWidth, mYuvTexHeight, 30);
+
+ // get the reference to the surfacemediasource living in
+ // mediaserver that is created by stagefrightrecorder
+ setUpEGLSurfaceFromMediaRecorder(mr);
+
+ int32_t nFramesCount = 0;
+ while (nFramesCount <= 300) {
+ oneBufferPassGL(nFramesCount);
+ nFramesCount++;
+ LOGV("framesCount = %d", nFramesCount);
+ }
+
+ ASSERT_EQ(NO_ERROR, native_window_api_disconnect(mANW.get(), NATIVE_WINDOW_API_EGL));
+ LOGV("Stopping MediaRecorder...");
+ CHECK_EQ(OK, mr->stop());
+ mr.clear();
+ close(fd);
+}
} // namespace android
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
index b396223..0810643 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
@@ -181,9 +181,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
}
// Note: This test is to assume the mediaserver's pid is 34
- private void stressVideoRecord(int frameRate, int width, int height, int videoFormat,
+ private boolean stressVideoRecord(int frameRate, int width, int height, int videoFormat,
int outFormat, String outFile, boolean videoOnly) {
// Video recording
+ boolean doesTestFail = false;
for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
MediaRecorder mRecorder = new MediaRecorder();
try {
@@ -212,8 +213,11 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
} catch (Exception e) {
Log.v("record video failed ", e.toString());
mRecorder.release();
+ doesTestFail = true;
+ break;
}
}
+ return !doesTestFail;
}
public void stressAudioRecord(String filePath) {
@@ -366,8 +370,8 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut, true));
output.write("H263 video record only\n");
for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
+ assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
+ MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
getMemoryWriteToLog(output, i);
}
output.write("\n");
@@ -386,8 +390,8 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut, true));
output.write("MPEG4 video record only\n");
for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
+ assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
+ MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
getMemoryWriteToLog(output, i);
}
output.write("\n");
@@ -407,8 +411,8 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut, true));
output.write("Audio and h263 video record\n");
for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false);
+ assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
+ MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false));
getMemoryWriteToLog(output, i);
}
output.write("\n");
diff --git a/opengl/java/android/opengl/GLUtils.java b/opengl/java/android/opengl/GLUtils.java
index f30a4cd..125c56e 100644
--- a/opengl/java/android/opengl/GLUtils.java
+++ b/opengl/java/android/opengl/GLUtils.java
@@ -16,9 +16,11 @@
package android.opengl;
-import javax.microedition.khronos.opengles.GL10;
import android.graphics.Bitmap;
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGL11;
+
/**
*
* Utility class to help bridging OpenGL ES and Android APIs.
@@ -222,6 +224,51 @@ public final class GLUtils {
}
}
+ /**
+ * Return a string for the EGL error code, or the hex representation
+ * if the error is unknown.
+ *
+ * @param error The EGL error to convert into a String.
+ *
+ * @return An error string corresponding to the EGL error code.
+ */
+ public static String getEGLErrorString(int error) {
+ switch (error) {
+ case EGL10.EGL_SUCCESS:
+ return "EGL_SUCCESS";
+ case EGL10.EGL_NOT_INITIALIZED:
+ return "EGL_NOT_INITIALIZED";
+ case EGL10.EGL_BAD_ACCESS:
+ return "EGL_BAD_ACCESS";
+ case EGL10.EGL_BAD_ALLOC:
+ return "EGL_BAD_ALLOC";
+ case EGL10.EGL_BAD_ATTRIBUTE:
+ return "EGL_BAD_ATTRIBUTE";
+ case EGL10.EGL_BAD_CONFIG:
+ return "EGL_BAD_CONFIG";
+ case EGL10.EGL_BAD_CONTEXT:
+ return "EGL_BAD_CONTEXT";
+ case EGL10.EGL_BAD_CURRENT_SURFACE:
+ return "EGL_BAD_CURRENT_SURFACE";
+ case EGL10.EGL_BAD_DISPLAY:
+ return "EGL_BAD_DISPLAY";
+ case EGL10.EGL_BAD_MATCH:
+ return "EGL_BAD_MATCH";
+ case EGL10.EGL_BAD_NATIVE_PIXMAP:
+ return "EGL_BAD_NATIVE_PIXMAP";
+ case EGL10.EGL_BAD_NATIVE_WINDOW:
+ return "EGL_BAD_NATIVE_WINDOW";
+ case EGL10.EGL_BAD_PARAMETER:
+ return "EGL_BAD_PARAMETER";
+ case EGL10.EGL_BAD_SURFACE:
+ return "EGL_BAD_SURFACE";
+ case EGL11.EGL_CONTEXT_LOST:
+ return "EGL_CONTEXT_LOST";
+ default:
+ return "0x" + Integer.toHexString(error);
+ }
+ }
+
native private static void nativeClassInit();
native private static int native_getInternalFormat(Bitmap bitmap);
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 10cea22..7e85230 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -454,13 +454,6 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
EGLBoolean result = s->cnx->egl.eglDestroySurface(
dp->disp[s->impl].dpy, s->surface);
if (result == EGL_TRUE) {
- ANativeWindow* const window = s->win.get();
- if (window != NULL) {
- native_window_set_buffers_format(window, 0);
- if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
- LOGE("EGLNativeWindowType %p disconnected failed", window);
- }
- }
_s.terminate();
}
return result;
@@ -682,6 +675,9 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw,
setGLHooksThreadSpecific(&gHooksNoContext);
egl_tls_t::setContext(EGL_NO_CONTEXT);
}
+ } else {
+ // this will LOGE the error
+ result = setError(c->cnx->egl.eglGetError(), EGL_FALSE);
}
return result;
}
diff --git a/opengl/libs/EGL/egl_object.h b/opengl/libs/EGL/egl_object.h
index 3459a8a..d2b7378 100644
--- a/opengl/libs/EGL/egl_object.h
+++ b/opengl/libs/EGL/egl_object.h
@@ -125,7 +125,15 @@ void egl_object_t::LocalRef<N,T>::terminate() {
class egl_surface_t: public egl_object_t {
protected:
- ~egl_surface_t() {}
+ ~egl_surface_t() {
+ ANativeWindow* const window = win.get();
+ if (window != NULL) {
+ native_window_set_buffers_format(window, 0);
+ if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
+ LOGE("EGLNativeWindowType %p disconnected failed", window);
+ }
+ }
+ }
public:
typedef egl_object_t::LocalRef<egl_surface_t, EGLSurface> Ref;
@@ -232,4 +240,3 @@ egl_sync_t* get_sync(EGLSyncKHR sync) {
// ----------------------------------------------------------------------------
#endif // ANDROID_EGL_OBJECT_H
-
diff --git a/packages/BackupRestoreConfirmation/res/values-af/strings.xml b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
new file mode 100644
index 0000000..29afb93
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"\'n Volledige rugsteun van al die data na \'n tafelrekenaar is aangevra. Wil jy dit toelaat? "\n\n"As jy nie self die rugsteun versoek het nie, moenie toelaat dat die aksie voortgaan nie."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Rugsteun my data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Moenie rugsteun nie"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"\'n Volle teruglaai van alle data van \'n gekoppelde tafelrekenaar is versoek. Wil jy dit toelaat? "\n\n" As jy nie die teruglaai self versoek het nie, moenie die aksie toelaat nie. Dit sal enige data tans op die toestel vervang!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Laai my data terug"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Moenie herstel nie"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Voer asseblief jou huidige rugsteunwagwoord hieronder in:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Voer asb. \'n wagwoord in om te gebruik vir enkripsie van die volle rugsteundata. As dit leeg gelaat word, sal jou huidige rugsteunwagwoord gebruik word:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"As jy die volle rugsteundata wil enkripteer, voer \'n wagwoord hieronder in:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"As die hersteldata geïnkripteer word, voer asb. die wagwoord hieronder in:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-am/strings.xml b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
new file mode 100644
index 0000000..59b4f3c
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"ሁሉንም ውሂብ በሙሉ መጠበቂያ ከተያያዘ የዴስክቶፕ ኮምፒዩተር ተጠይቋል። ይህ እንዲከሰት ለመፍቀድ ይፈልጋሉ? "\n\n"እርስዎ ራስዎ የመጠባበቂያውን ጥየቃ ካልጠየቁ ክወናው እንዲካሄድ አይፍቀዱ።"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"ውሂቤን መጠባበቂያ"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"መጠባበቂያ አታድርግ"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"ሁሉንም ውሂብ በሙሉ መጠበቂያ ከተያያዘ የዴስክቶፕ ኮምፒዩተር ተጠይቋል። ይህ እንዲከሰት ለመፍቀድ ይፈልጋሉ? "\n\n"እርስዎ ራስዎ የመጠባበቂያውን ጥየቃ ካልጠየቁ ክወናው እንዲካሄድ አይፍቀዱ። ይህም አሁን በመሣሪያዎ ላይ ያለውን ማንኛውም ውሂብ ይተካል!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"ውሂቤን እነበረበት መልስ"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"እነበረበት አትመልስ"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"እባክዎ የአሁኑን የመጠባበቂያ ይለፍቃል ከታች ያስገቡ፡"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"እባክዎ የሙሉ ውሂብ መጠበቂያ ማመስጠር ለመጠቅም የይለፍ ቃል ያስገቡ። ይህም ባዶ ከሆነ፣ የእርስዎ የአሁኑ የመጠበቂያ ይለፍ ቃል ይወሰዳል፡"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"ሙሉ የውሂብ መጠበቂያ ለማመስጠር ከፈለጉ ከታች የይለፍ ቃል ያስገቡ፡"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"ውሂብ እነበረበት መልስ የተመሳጠረ ከሆነ፣ እባክዎ ከታች የይለፍ ቃል ያስገቡ"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
new file mode 100644
index 0000000..bdaaf98
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"تم طلب الاحتفاظ بنسخة احتياطية كاملة من البيانات على كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟"\n\n"إذا لم تطلب الاحتفاظ بنسخة احتياطية بنفسك، فلا تسمح بمتابعة العملية."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"الاحتفاظ بنسخة احتياطية من بياناتي"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"عدم النسخ الاحتياطي"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"تم طلب استرداد جميع البيانات بالكامل من كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟"\n\n"إذا لم تطلب الاسترداد بنفسك، فلا تسمح بمتابعة العملية. يؤدي لك إلى استبدال أية بيانات حاليًا على الجهاز."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"استرداد بياناتي"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"عدم الاسترداد"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"الرجاء إدخال كلمة مرور النسخ الاحتياطي أدناه:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"الرجاء إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"إذا كنت ترغب في تشفير بيانات النسخة الاحتياطية بالكامل، فأدخل كلمة المرور أدناه:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"إذا كانت بيانات الاسترداد مشفرة، فالرجاء إدخال كلمة المرور أدناه:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
new file mode 100644
index 0000000..1da9d8b
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Бе поискано пълно резервно копие на всичките данни до свързан настолен компютър. Искате ли да разрешите това?"\n\n"Ако не сте заявили създаването на копие, не позволявайте операцията да продължи."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Резервно копие на данните ми"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Без резервно копие"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Бе поискано пълно възстановяване на всичките данни от свързан настолен компютър. Искате ли да разрешите това?"\n\n"Ако не сте заявили възстановяването, не позволявайте операцията да продължи. Това ще замести данните, които понастоящем са в устройството!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Възстановяване на данните ми"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Без възстановяване"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Моля, въведете текущата си парола за резервно копие по-долу:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Моля, въведете парола, която да използвате за шифроване на пълното резервно копие на данните. Ако не е попълнена, ще бъде използвана текущата ви парола за резервно копие:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако искате да шифровате пълното резервно копие на данните, въведете парола по-долу:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ако възстановените данни са шифровани, моля, въведете паролата по-долу:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
new file mode 100644
index 0000000..1658342
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"S\'ha sol·licitat una còpia de seguretat completa de totes les dades a un equip de sobretaula connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la còpia de seguretat tu mateix, no permetis que continuï l\'operació."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Còpia seg. de les meves dades"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"No en facis una còpia de seguretat"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"S\'ha sol·licitat una restauració completa de totes les dades d\'un equip d\'escriptori connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la restauració tu mateix, no permetis que continuï l\'operació. Això reemplaçarà les dades que hi hagi actualment a l\'equip."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaura les meves dades"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"No ho restauris"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Introdueix la teva contrasenya actual de còpia de seguretat a continuació:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introdueix una contrasenya que utilitzaràs per a l\'encriptació de les dades de còpia de la seguretat completa. Si es deixa en blanc, s\'utilitzarà la teva contrasenya de còpia de seguretat actual:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vols xifrar les dades de la còpia de seguretat completa, introdueix una contrasenya a continuació:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Si la recuperació de dades està xifrada, introdueix la contrasenya a continuació:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
new file mode 100644
index 0000000..8b070d2
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Obdrželi jsme požadavek na úplnou zálohu všech dat do připojeného počítače. Chcete tuto akci povolit? "\n\n"Pokud jste o zálohu nežádali, operaci nepovolujte."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovat data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovat"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Obdrželi jsme žádost o úplné obnovení všech dat z připojeného počítače. Chcete tuto akci povolit?"\n\n"Pokud jste o obnovení nepožádali, operaci nepovolujte. Tato akce nahradí veškerá data v zařízení."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Obnovit moje data"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Neobnovovat"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Zadejte prosím aktuální heslo pro zálohy níže:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Zadejte prosím heslo pro šifrování dat úplné zálohy. Pokud pole ponecháte prázdné, použije se aktuální heslo pro zálohy:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Chcete-li data úplné zálohy zašifrovat, zadejte heslo:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Pokud jsou obnovená data šifrována, zadejte prosím heslo níže:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-da/strings.xml b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
new file mode 100644
index 0000000..f8b55e3
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?"\n\n"Hvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhedskopier mine data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Undlad at sikkerhedskopiere"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?"\n\n"Hvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Gendan mine data"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Gendan ikke"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Indtast din aktuelle adgangskode til sikkerhedskopiering nedenfor:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til sikkerhedskopiering:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du ønsker at kryptere sikkerhedsdataene, skal du indtaste en adgangskode nedenfor:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis gendannelsesdataene er krypteret, skal du angive adgangskoden nedenfor:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-de/strings.xml b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
new file mode 100644
index 0000000..1ac1790
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Es wurde eine vollständige Sicherung sämtlicher Daten auf einen verbundenen Desktop-Computer angefordert. Möchten Sie dies zulassen?"\n\n"Wenn Sie die Sicherung nicht selbst angefordert haben, sollten Sie dem Vorgang nicht zustimmen."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Meine Daten sichern"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nicht sichern"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Es wurde eine vollständige Wiederherstellung aller Daten von einem verbundenen Desktop-Computer angefordert. Möchten Sie dies zulassen?"\n\n"Wenn Sie die Wiederherstellung nicht selbst angefordert haben, sollten Sie dem Vorgang nicht zustimmen. Dadurch werden alle zurzeit auf dem Gerät befindlichen Daten ersetzt!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Meine Daten wiederherstellen"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Nicht wiederherstellen"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Geben Sie Ihr aktuelles Sicherungspasswort unten ein:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Geben Sie ein Passwort für die Verschlüsselung der vollständigen Sicherungsdaten ein. Wenn Sie dieses Feld leer lassen, wird Ihr aktuelles Sicherungspasswort verwendet:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Wenn Sie die gesamten Sicherungsdaten verschlüsseln möchten, geben Sie unten ein Passwort ein:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Geben Sie das Passwort unten ein, wenn die Daten für die Wiederherstellung verschlüsselt sind:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-el/strings.xml b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
new file mode 100644
index 0000000..42a25cf
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Έχει ζητηθεί ένα πλήρες αντίγραφο ασφαλείας όλων των δεδομένων σε έναν συνδεδεμένο επιτραπέζιο υπολογιστή. Θέλετε να επιτραπεί αυτή η ενέργεια;"\n\n"Αν δεν έχετε ζητήσει οι ίδιοι αυτό το αντίγραφο ασφαλείας, μην επιτρέψετε την ενέργεια."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Δημιουργία αντιγράφων ασφαλείας για τα δεδομένα μου"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Να μην δημιουργείται αντίγραφο ασφαλείας"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Έχει ζητηθεί πλήρης επαναφορά όλων των δεδομένων από έναν συνδεδεμένο επιτραπέζιο υπολογιστή. Θέλετε να επιτρέψετε αυτήν την ενέργεια;"\n\n"Αν δεν έχετε ζητήσει οι ίδιοι αυτήν την επαναφορά, μην επιτρέψετε την ενέργεια. Θα γίνει αντικατάσταση τυχόν δεδομένων τα οποία υπάρχουν αυτήν τη στιγμή στη συσκευή σας!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Αποκατάσταση των δεδομένων μου"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Να μην γίνει επαναφορά"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Εισαγάγετε τον τρέχοντα κωδικό πρόσβασής αντιγράφων ασφαλείας παρακάτω:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Εισαγάγετε έναν κωδικό πρόσβασης για χρήση για την κωδικοποίηση του πλήρους αντιγράφου ασφαλείας δεδομένων. Αν μείνει κενό, θα χρησιμοποιηθεί ο τρέχων κωδικός σας πρόσβασης:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Αν θέλετε να κρυπτογραφήσετε τα πλήρη δεδομένα αντιγράφων ασφαλείας, πληκτρολογήστε έναν κωδικό πρόσβασης παρακάτω:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Εάν η επαναφορά των δεδομένων είναι κρυπτογραφημένη, εισάγετε τον κωδικό πρόσβασης παρακάτω:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
index 3e903f2..be509b8 100644
--- a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en una computadora de escritorio conectada. ¿Deseas permitir esto?"\n\n"Si tú no has solicitado la copia de seguridad, no permitas que se realice la operación."</string>
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en una computadora de escritorio conectada. ¿Deseas permitirla?"\n\n"Si tú no has solicitado la copia de seguridad, no permitas que se realice la operación."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de mis datos"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No realizar una copia de seguridad"</string>
- <string name="restore_confirm_text" msgid="7499866728030461776">"Se ha solicitado una restauración completa de todos los datos de una computadora de escritorio conectada. ¿Deseas permitir esto?"\n\n"Si tú no has solicitado la restauración, no permitas que se realice la operación. Esto reemplazaría los datos actuales del dispositivo."</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Se ha solicitado una restauración completa de todos los datos de una computadora de escritorio conectada. ¿Deseas permitirla?"\n\n"Si tú no has solicitado la restauración, no permitas que se realice la operación. Esto reemplazaría los datos actuales del dispositivo."</string>
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar mis datos"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"No restaurar"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introduce tu contraseña actual de copia de seguridad a continuación:"</string>
- <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce una contraseña para cifrar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña actual de copia de seguridad:"</string>
- <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si deseas cifrar los datos de la copia de seguridad completa, introduce una contraseña a continuación:"</string>
- <string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de recuperación son cifrados, vuelve a introducir la contraseña a continuación:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce una contraseña para encriptar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña actual de copia de seguridad:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si deseas encriptar los datos de la copia de seguridad completa, introduce una contraseña a continuación:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de recuperación están encriptados, vuelve a introducir la contraseña a continuación:"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es/strings.xml b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
new file mode 100644
index 0000000..cf26b65
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en un ordenador conectado. ¿Quieres permitir la copia de seguridad?"\n\n"No debes permitir la copia de seguridad si no has realizado tú la solicitud."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de datos"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"No realizar copia de seguridad"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Se ha solicitado una restauración completa de todos los datos desde un ordenador conectado. ¿Quieres permitir la restauración?"\n\n"No debes permitir la restauración si no has realizado tú la solicitud. Se sustituirán los datos actuales del dispositivo."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar mis datos"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"No restaurar"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Introduce a continuación la contraseña actual de copia de seguridad:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce la contraseña que quieras utilizar para cifrar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña de copia de seguridad actual:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si quieres cifrar los datos de la copia de seguridad completa, introduce la contraseña a continuación:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de restauración están cifrados, introduce la contraseña a continuación:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
new file mode 100644
index 0000000..6b561fe
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام داده‌ها به یک رایانه دسک‌تاپ متصل داده شده است. آیا می‌خواهید این عمل انجام شود؟"\n\n"اگر شما درخواست تهیه نسخه پشتیبان را نداده‌اید، اجازه‌ ادامه عملیات را ندهید."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"از داده‌های من نسخه پشتیبان تهیه شود"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"نسخه پشتیبان تهیه نشود"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"بازیابی کامل تمام داده‌ها از یک رایانه دسک تاپ متصل درخواست شده است. آیا می خواهید این اجازه را بدهید؟"\n\n"اگر خود شما درخواست بازیابی نداده‌اید، اجازه ادامه این عملیات را ندهید. با این کار همه داده‌هایی که اکنون روی دستگاه است جایگزین می‌شود!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"بازیابی داده‌های من"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"بازیابی نشود"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"لطفاً گذرواژه نسخه پشتیبان فعلی خود را در زیر وارد کنید:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"لطفاً یک گذرواژه برای رمزگذاری داده‌های کامل نسخه پشتیبانی وارد کنید. اگر این خالی بماند، گذرواژه فعلی نسخه پشتیبان مورد استفاده قرار خواهد گرفت:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"اگر می‌خواهید تمام نسخه پشتیبانی داده را رمزدار کنید، یک گذرواژه در زیر وارد کنید:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"اگر داده بازیابی شده رمزگذاری شده است، لطفاً گذرواژه را در زیر وارد کنید:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
new file mode 100644
index 0000000..b77158b
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Kytketyn tietokoneen kaikista tiedoista on pyydetty täydellistä varmuuskopiota. Haluatko sallia tämän?"\n\n"Jos et ole itse pyytänyt varmuuskopiota, älä salli toimintoa."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Varmuuskopioi omat tiedot"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Älä varmuuskopioi"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Täydellinen varmuuskopio kytketyn tietokoneen kaikista tiedoista on pyydetty. Haluatko sallia tämän?"\n\n"Jos et ole itse pyytänyt varmuuskopiota, älä salli toimintoa. Tämä korvaa laitteesi kaikki nykyiset tiedot!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Palauta omat tiedot"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Älä palauta"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Kirjoita nykyinen varmuuskopioinnin salasana alla:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Anna salasana kaikkien varmuuskopiotietojen salaamiseksi. Jos tämä jätetään tyhjäksi, nykyistä varmuuskopioinnin salasanaa käytetään:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Jos haluat salata kaikki varmuuskopiotiedot, kirjoita salasana alle:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Jos palautustiedot on salattu, anna salasana alla:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
new file mode 100644
index 0000000..650f20a
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Vous avez demandé une sauvegarde complète de l\'ensemble des données vers un ordinateur de bureau connecté. Voulez-vous l\'autoriser ?"\n\n"Si vous n\'avez pas demandé la sauvegarde vous-même, n\'autorisez pas la poursuite de l\'opération."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sauvegarder mes données"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Ne pas sauvegarder"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Vous avez demandé une restauration complète de l\'ensemble des données à partir d\'un ordinateur de bureau connecté. Voulez-vous l\'autoriser ?"\n\n"Si vous n\'avez pas demandé vous-même la restauration, n\'autorisez pas sa poursuite. Cette opération remplacera toutes les données actuellement sur l\'appareil !"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurer mes données"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ne pas restaurer"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Veuillez saisir votre mot de passe de sauvegarde actuel ci-dessous :"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Veuillez saisir un mot de passe à utiliser pour chiffrer les données de sauvegarde complète. Si ce champ n\'est pas renseigné, votre mot de passe de sauvegarde actuel sera utilisé :"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vous souhaitez chiffrer l\'ensemble des données de sauvegarde, veuillez saisir un mot de passe ci-dessous :"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Si les données de restauration sont chiffrées, veuillez saisir le mot de passe ci-dessous :"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
new file mode 100644
index 0000000..8c60969
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Zatražena je potpuna sigurnosna kopija svih podataka na povezano stolno računalo. Želite li to dozvoliti?"\n\n"Ako niste vi zatražili sigurnosnu kopiju, ne dozvolite nastavak te radnje."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Izradi sigurnosnu kopiju mojih podataka"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Ne radi sigurnosnu kopiju"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Zatraženo je potpuno vraćanje svih podataka s povezanog stolnog računala. Želite li to dozvoliti?"\n\n"Ako niste sami zatražili vraćanje, ne dozvolite nastavak radnje. To će zamijeniti sve podatke koji se trenutačno nalaze na uređaju!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Vrati moje podatke"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ne vraćaj"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"U nastavku unesite trenutačnu zaporku za sigurnosnu kopiju:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Unesite zaporku koju ćete upotrebljavati za kriptiranje podataka potpune sigurnosne kopije. Ako je ostavite praznom, bit će upotrijebljena vaša trenutačna zaporka za sigurnosno kopiranje:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite kriptirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ako su podaci za vraćanje kriptirani, unesite zaporku u nastavku:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
new file mode 100644
index 0000000..a808d92
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Kérés érkezett az összes adat biztonsági mentésére egy csatlakoztatott asztali számítógépre. Engedélyezi, hogy ez megtörténjen?"\n\n"Ha nem Ön kérte a mentést, ne engedélyezze a művelet folytatását."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Adatok biztonsági mentése"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Ne mentsen"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Kérés érkezett egy csatlakoztatott asztali számítógép összes adatának teljes helyreállítására. Engedélyezi, hogy ez megtörténjen?"\n\n"Ha nem Ön kérte a visszaállítást, ne engedélyezze a művelet folytatását. Ez az eszközön lévő összes jelenlegi adatot felülírja!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Adatok visszaállítása"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ne állítsa vissza"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Kérjük, adja meg a jelenlegi biztonsági jelszót alább:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Kérjük, írjon be egy jelszót a teljes biztonsági mentés adatainak titkosításához. Ha üresen hagyja, jelenlegi biztonsági jelszavát fogjuk használni:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ha minden mentett adatot szeretne titkosítani, adjon meg egy jelszót alább:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ha a visszaállítási adatok titkosítva vannak, kérjük, adja meg a jelszót alább:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-in/strings.xml b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
new file mode 100644
index 0000000..8f39ea7
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Cadangan lengkap semua data ke komputer yang tersambung telah diminta. Apakah Anda ingin mengizinkan hal ini dilakukan?"\n\n"Jika Anda tidak meminta pencadangan ini, jangan izinkan operasi dilanjutkan."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Cadangkan data saya"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Jangan mencadangkan"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Pemulihan lengkap semua data dari komputer desktop yang tersambung telah diminta. Apakah Anda ingin mengizinkan hal ini?"\n\n"Jika Anda tidak meminta pemulihan ini, jangan izinkan operasi dilanjutkan. Operasi ini akan mengganti data apa pun yang saat ini ada dalam perangkat!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Memulihkan data saya"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Jangan pulihkan"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Masukkan sandi cadangan Anda saat ini di bawah:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Masukkan sandi yang digunakan untuk mengenkripsi data cadangan lengkap. Jika bidang ini dikosongkan, sandi cadangan Anda saat ini akan digunakan:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika Anda ingin mengenkripsi data cadangan lengkap, masukkan sandi di bawah:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Jika data pemulihan dienkripsi, masukkan sandi di bawah:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
new file mode 100644
index 0000000..7f031db
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"הוגשה בקשה לגיבוי מלא של כל הנתונים במחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? "\n\n"אם לא ביקשת את הגיבוי בעצמך, אל תאפשר לפעולה להמשיך."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"גבה את הנתונים שלי"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"אל תגבה"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"הוגשה בקשה לשחזור מלא של כל הנתונים ממחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? "\n" "\n" אם לא ביקשת את השחזור בעצמך, אל תאפשר לפעולה להמשיך. פעולה זו תחליף את כל הנתונים שנמצאים כעת במכשיר!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"שחזר את הנתונים שלי"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"אל תשחזר"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"הזן את סיסמת הגיבוי הנוכחית למטה:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"הזן סיסמה שתשמש להצפנה של נתוני הגיבוי המלא. אם תשאיר שדה זה ריק, ייעשה שימוש בסיסמת הגיבוי הנוכחית שלך:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"אם אתה רוצה להצפין את נתוני הגיבוי המלא, הזן סיסמה בהמשך:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"אם נתוני השחזור מוצפנים, הזן את הסיסמה למטה:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
new file mode 100644
index 0000000..e854ca3
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"接続しているデスクトップパソコンに対してすべてのデータのフルバックアップを行うようリクエストされています。許可しますか?"\n\n"ご自分でバックアップをリクエストしていない場合は、この操作の続行を許可しないでください。"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"データをバックアップ"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"バックアップしない"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"接続されているデスクトップパソコンからすべてのデータを完全に復元するようにリクエストされています。許可しますか? "\n\n"ご自身で復元をリクエストしていない場合、操作の続行を許可しないでください。端末に現在あるデータがすべて置換されます。"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"データを復元する"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"復元しない"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"以下に現在のバックアップ用のパスワードを入力してください:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"フルバックアップデータの暗号化に使用するパスワードを入力してください。空白のままにした場合、現在のバックアップ用のパスワードが使用されます:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"フルバックアップのデータを暗号化する場合は、以下にパスワードを入力してください:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"復元するデータが暗号化されている場合、以下にパスワードを入力してください:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
new file mode 100644
index 0000000..f1e7193
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"연결된 데스크톱 컴퓨터에 대한 전체 데이터 백업을 요청했습니다. 백업을 실행하시겠습니까?"\n\n"직접 백업을 요청한 것이 아니라면 작업을 진행하지 마시기 바랍니다."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"데이터 백업"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"백업하지 않음"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"연결된 데스크톱 컴퓨터에 대한 전체 데이터 백업을 요청했습니다. 백업을 실행하시겠습니까?"\n\n"직접 백업을 요청한 것이 아니라면 작업을 진행하지 마시기 바랍니다. 기기에 있는 모든 데이터가 변경됩니다."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"데이터 복원"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"복원하지 않음"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"아래에 현재 사용 중인 백업 비밀번호를 입력하세요."</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"전체 백업 데이터를 암호화하려면 사용할 비밀번호를 입력하세요. 공백으로 남겨 두면 현재 백업 비밀번호가 사용됩니다."</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"전체 백업 데이터를 암호화하려면 아래에 비밀번호를 입력하세요."</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"복원 데이터가 암호화되어 있는 경우, 아래에 비밀번호를 입력하세요."</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
new file mode 100644
index 0000000..abe4a12
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Prijungtame staliniame kompiuteryje pageidauta sukurti visų duomenų atsarginę kopiją. Ar norite, kad tai būtų atlikta?"\n\n"Jei patys atsarginės kopijos kurti neprašėte, neleiskite pradėti operacijos."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Kurti atsarginę duomenų kopiją"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nekurti atsarginės kopijos"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Pateikta visų staliniame kompiuteryje saugomų duomenų visiško atkūrimo užklausa. Ar norite, kad tai būtų atlikta?"\n\n"Jei patys atkurti neprašėte, neleiskite pradėti operacijos. Kitaip bus pakeisti visi dabar įrenginyje saugomi duomenys!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Atkurti mano duomenis"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Neatkurti"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Toliau įveskite dabartinį atsarginės kopijos slaptažodį:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Įveskite slaptažodį, kuris bus naudojamas visai atsarginei duomenų kopijai šifruoti. Jei reikšmės neįvesite, bus naudojamas dabartinis atsarginės kopijos slaptažodis:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Jei norite užšifruoti visą atsarginę duomenų kopiją, įveskite slaptažodį:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Jei atkūrimo duomenys užšifruoti, įveskite toliau nurodytą slaptažodį:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
new file mode 100644
index 0000000..45fcc3a
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Ir pieprasīta visu datu pilnīga dublēšana savienotā galda datorā. Vai vēlaties to atļaut?"\n\n"Ja neesat pieprasījis dublēšanu, neatļaujiet turpināt šo darbību."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Dublēt manus datus"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Neveidot dublējumu"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Ir pieprasīta visu savienotā galda datora datu pilnīga atjaunošana. Vai vēlaties to atļaut?"\n\n"Ja neesat pieprasījis atjaunošanu, neatļaujiet turpināt šo darbību. Tās rezultātā tiks aizstāti visi pašreiz ierīcē esošie dati!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Atjaunot manus datus"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Neatjaunot"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Lūdzu, tālāk ievadiet pašreizējo dublējuma paroli:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Lūdzu, ievadiet paroli, kas tiks izmantota dublējuma datu pilnīgai šifrēšanai. Ja paroles lauciņu atstāsiet tukšu, tiks izmantota jūsu pašreizējā dublējuma parole:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ja vēlaties pilnībā šifrēt dublējuma datus, tālāk ievadiet paroli:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ja atjaunošanas dati ir šifrēti, lūdzu, ievadiet tālāk paroli:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
new file mode 100644
index 0000000..ba13a6b
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"En full sikkerhetskopi av alle dataene til en tilkoblet stasjonær datamaskin er forespurt. Vil du tillate dette?"\n\n"Hvis du ikke har bedt om sikkerhetskopieringen selv, må du ikke tillate at operasjonen fortsetter."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhetskopier dataene mine"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Ikke sikkerhetskopiér"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"En full gjenoppretting av alle data fra en tilkoblet stasjonær datamaskin er forespurt. Vil du tillate dette?"\n\n"Hvis du ikke har bedt om gjenopprettingen selv, må du ikke la operasjonen fortsette. Handlingen vil erstatte alle dataene som ligger på enheten!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Gjenopprett dataene mine"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ikke gjenopprett"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Skriv inn ditt nåværende passord for sikkerhetskopiering nedenfor:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Skriv inn et passord for kryptering av full sikkerhetskopi. Hvis feltet er tomt, brukes det gjeldende passordet ditt for sikkerhetskopiering:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du vil kryptere alle de sikkerhetskopierte dataene, skriver du inn et passord nedenfor:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis de gjenopprettede dataene er krypterte, må du skrive inn passordet nedenfor:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
new file mode 100644
index 0000000..78eaa7b
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Er is een volledige back-up van alle gegevens naar een verbonden desktopcomputer aangevraagd. Wilt u dit toestaan?"\n\n"Als u de back-up zelf niet heeft aangevraagd, moet u niet toestaan dat de bewerking wordt uitgevoerd."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Back-up maken van mijn gegevens"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Geen back-up maken"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Er is volledig herstel van alle gegevens van een verbonden desktopcomputer aangevraagd. Wilt u dit toestaan?"\n\n"Als u het herstel zelf niet heeft aangevraagd, moet u niet toestaan dat de bewerking wordt uitgevoerd. Bij herstel worden alle gegevens op het apparaat vervangen."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Mijn gegevens herstellen"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Niet herstellen"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Geef hieronder uw huidige back-upwachtwoord op:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Geef een wachtwoord op dat u wilt gebruiken voor het coderen van de gegevens van de volledige back-up. Als u dit leeg laat, wordt uw huidige back-upwachtwoord gebruikt:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Als u de gegevens van de volledige back-up wilt coderen, geeft u daarvoor hieronder een wachtwoord op:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Als deze herstelgegevens zijn gecodeerd, geeft u hieronder het wachtwoord op:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..d145368
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitada uma cópia de segurança completa de todos os dados para um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado a cópia de segurança, não permita que a operação prossiga."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer cópia de seg. dos dados"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Não efetuar cópia de seg."</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitado um restauro completo de todos os dados a partir de um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado o restauro, não permita que a operação prossiga. Isto substituirá os dados existentes no aparelho!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar os meus dados"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Introduza a palavra-passe de cópia de segurança atual abaixo:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduza uma palavra-passe a utilizar para encriptar os dados da cópia de segurança completa. Se deixar o campo em branco, será utilizada a palavra-passe de cópia de segurança atual."</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Se pretender encriptar os dados da cópia de segurança completa, introduza uma palavra-passe abaixo:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados a restaurar estiverem encriptados, introduza a palavra-passe abaixo:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
new file mode 100644
index 0000000..a6a6544
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Deseja permitir que isso aconteça?"\n\n"Caso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer backup de meus dados"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Não fazer backup"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitada uma restauração completa de todos os dados de um computador conectado. Deseja permitir que isso ocorra?"\n\n"Caso você não tenha solicitado a restauração, não permita que a operação prossiga. Isso substituirá todos os dados existentes no dispositivo!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar meus dados"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Digite sua senha de backup atual abaixo:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Digite uma senha para usar para criptografar os dados de backup por completo. Se isso for deixado em branco, sua senha atual de backup será usada:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Se você deseja criptografar os dados de backup por completo, digite uma senha abaixo:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados restaurados forem criptografada, digite a senha abaixo:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
new file mode 100644
index 0000000..1dfa7f3
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"S-a solicitat crearea unei copii de rezervă complete a tuturor datelor pe un computer desktop conectat. Doriţi să permiteţi acest lucru?"\n\n"Dacă nu aţi solicitat dvs. copierea de rezervă, nu permiteţi ca operaţiunea să continue."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Creaţi copii de rezervă pentru datele dvs."</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nu creaţi copii de rezervă"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"S-a solicitat o restabilire completă a tuturor datelor de pe un computer desktop conectat. Doriţi să permiteţi acest lucru?"\n\n"Dacă nu dvs. aţi solicitat această restabilire, nu permiteţi continuarea operaţiunii. Acest proces va înlocui toate datele existente în prezent pe dispozitiv!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restabiliţi datele dvs."</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Nu restabiliţi"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Introduceţi mai jos parola actuală pentru copia de rezervă:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduceţi o parolă pentru a o utiliza la criptarea datelor copiei de rezervă completă. Dacă acest câmp rămâne necompletat, pentru copierea de rezervă se va utiliza parola dvs. actuală."</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă doriţi să criptaţi datele copiei de rezervă completă, introduceţi o parolă mai jos:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introduceţi parola mai jos:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
new file mode 100644
index 0000000..848d5a0
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Запрошено резервное копирование всех данных на подключенном компьютере. Разрешить?"\n\n"Если вы не запрашивали этого, не разрешайте выполнение операции."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Создать резервную копию данных"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Не создавать резервную копию"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Подключенный компьютер запрашивает восстановление всех данных. Разрешить?"\n\n"Если вы не запрашивали этого, не разрешайте выполнение операции, т. к. она заменит все данные на этом устройстве."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Восстановить данные"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Не восстанавливать"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Введите пароль для резервного копирования:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Введите пароль для шифрования всех резервных данных. Если поле останется пустым, будет использован текущий пароль:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Чтобы зашифровать все резервные данные, введите пароль:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Если восстановленные данные зашифрованы, введите пароль:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
new file mode 100644
index 0000000..ea48c9a
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Bola vyžiadaná úplná záloha všetkých dát do pripojeného počítača. Chcete túto akciu povoliť?"\n\n"Ak ste zálohu nevyžiadali vy, túto operáciu nepovoľujte."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovať údaje"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovať"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Z pripojeného počítača bolo vyžiadané úplné obnovenie všetkých údajov. Chcete túto akciu povoliť?"\n\n"Ak ste toto obnovenie nevyžiadali vy, túto operáciu nepovoľujte. Táto akcia nahradí všetky údaje v zariadení."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Obnoviť údaje"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Neobnoviť"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Zadajte svoje aktuálne heslo pre zálohu nižšie:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Zadajte heslo, ktoré sa použije pri šifrovaní údajov úplnej zálohy. Ak pole ponecháte prázdne, použije sa vaše aktuálne heslo zálohy:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ak chcete šifrovať údaje úplnej zálohy, zadajte heslo nižšie:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ak sú údaje obnovenia šifrované, zadajte heslo nižšie:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
new file mode 100644
index 0000000..4ae2e77
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Zahtevano je popolno varnostno kopiranje vseh podatkov v povezanem računalniku. Ali želite to dovoliti?"\n\n"Če varnostnega kopiranja niste zahtevali, ne dovolite nadaljevanja postopka."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Varnostno kopiraj moje podatke"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Brez varnostnega kopiranja"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Zahtevana je popolna obnovitev vseh podatkov iz povezanega računalnika. Ali želite to dovoliti?"\n\n"Če niste zahtevali obnovitve, ne dovolite nadaljevanja postopka. Sicer bodo zamenjani vsi podatki, trenutno shranjeni v napravi."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Obnovi moje podatke"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ne obnovi"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Spodaj vnesite trenutno geslo za varnostno kopiranje:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Vnesite geslo za šifriranje podatkov popolnega varnostnega kopiranja. Če to pustite prazno, bo uporabljeno trenutno geslo za varnostno kopiranje:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Če želite šifrirati vse varnostno kopirane podatke, spodaj vnesite geslo:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Če so podatki za obnovitev šifrirani, spodaj vnesite geslo:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
new file mode 100644
index 0000000..3ecf35c
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Захтевана је потпуна резервна копија свих података на повезани стони рачунар. Да ли желите да дозволите то?"\n\n"Ако нисте лично захтевали резервну копију, не дозвољавајте наставак радње."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Направи резервну копију мојих података"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Не прави резервне копије"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Захтевано је потпуно враћање свих података са повезаног стоног рачунара. Да ли желите да дозволите то?"\n\n"Ако нисте лично захтевали враћање, не дозвољавајте наставак радње. Тиме ћете заменити све податке који су тренутно на уређају!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Врати моје податке"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Не враћај"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Унесите тренутну лозинку резервне копије у наставку:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Унесите лозинку коју ћете користити за шифровање података потпуне резервне копије. Ако то поље оставите празно, користиће се тренутна лозинка резервне копије:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако желите да шифрујете податке потпуне резервне копије, унесите лозинку у наставку."</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ако су подаци за враћање шифровани, унесите лозинку у наставку:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
new file mode 100644
index 0000000..3c23052
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"En fullständig säkerhetskopia av alla data till en ansluten dator har begärts. Vill du tillåta detta?"\n\n"Om du inte själv begärde säkerhetskopian ska du inte tillåta detta."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Säkerhetskopiera mina data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Säkerhetskopiera inte"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"En fullständig återställning av alla data från en ansluten dator har begärts. Vill du tillåta detta? "\n" "\n" Om du inte själv har begärt återställningen ska du inte tillåta den. Alla data som finns på enheten kommer då att ersättas!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Återställ mina data"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Återställ inte"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Ange det aktuella lösenordet för säkerhetskopian nedan:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Ange ett lösenord för kryptering av alla säkerhetskopierade data. Om det här lämnas tomt kommer ditt nuvarande lösenord för säkerhetskopior att användas:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Om du vill kryptera alla säkerhetskopierade data anger du ett lösenord nedan:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Om återställda data är krypterade anger du lösenordet nedan:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
new file mode 100644
index 0000000..cefa1bc
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Chelezo kamili la data iliyounganishwa kwenye eneo kazi la kompyuta limeombwa. Unataka kuruhusu hii kutendeka?"\n\n" Ikiwa hukuomba chelezo mwenyewe, usikubali uendeshaji kuendelea."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Cheleza data yangu"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Kurejesha kamili kwa data nzima kutoka kwa eneo kazi la kompyuta lililounganishwa limeombwa. Unataka kuruhusu hii kutendeka?"\n\n" Ikiwa hukuweza kurejesha upya mwenyewe, usiruhusu uendeshaji huu kuendelea. Hii itaweka upya data yoyote iliyo kwenye kifaa hiki sasa!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Rejesha upya data yangu"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Usirejeshe upya"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Tafadhali ingiza nenosiri lako la chelezo hapo chini:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia kwa usimbaji fiche wa chelezo ya data kamili. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba fiche data nzima ya kucheleza, ingiza nenosiri la hapo chini:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-th/strings.xml b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
new file mode 100644
index 0000000..3e938df
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"เราได้รับการขอให้ทำการสำรองข้อมูลทั้งหมดลงในคอมพิวเตอร์เดสก์ท็อปที่เชื่อมต่ออยู่ คุณต้องการอนุญาตให้ดำเนินการตามนี้หรือไม่"\n\n" หากคุณไม่ได้เป็นผู้ขอให้ทำการสำรองข้อมูลดังกล่าว โปรดอย่าอนุญาตให้ดำเนินการ"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"สำรองข้อมูลของฉัน"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"ไม่ต้องสำรองข้อมูล"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"เราได้รับการขอให้ทำการคืนค่าข้อมูลทั้งหมดจากคอมพิวเตอร์เดสก์ท็อปที่เชื่อมต่ออยู่ คุณต้องการอนุญาตให้ดำเนินการตามนี้หรือไม่"\n\n" หากคุณไม่ได้เป็นผู้ขอให้ทำการคืนค่าดังกล่าว โปรดอย่าอนุญาตให้ดำเนินการ การดำเนินการนี้จะแทนค่าข้อมูลปัจจุบันทั้งหมดในอุปกรณ์"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"คืินค่าข้อมูลของฉัน"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"ไม่คืนค่า"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"โปรดป้อนรหัสผ่านการสำรองข้อมูลปัจจุบันของคุณด้านล่างนี้:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"โปรดป้อนรหัสผ่านเพื่อใช้สำหรับเข้ารหัสข้อมูลที่สำรองแบบเต็มรูปแบบ หากเว้นว่างไว้ รหัสผ่านการสำรองข้อมูลปัจจุบันของคุณจะถูกใช้:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"หากคุณต้องการเข้ารหัสข้อมูลที่สำรองเต็มรูปแบบ โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"หากมีการเข้ารหัสข้อมูลที่คืนค่า โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
new file mode 100644
index 0000000..2cb0a8b
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Hiniling ang isang buong pag-backup ng lahat ng data sa isang nakakonektang desktop computer. Gusto mo ba itong payagang maganap? "\n\n"Kung hindi ikaw mismo ang humiling ng pag-backup, huwag payagang magpatuloy ang pagpapatakbo."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"I-back up ang aking data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Huwag i-back up"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Hiniling ang isang buong pagpapanumbalik ng lahat ng data mula sa isang nakakonektang desktop computer. Gusto mo ba itong payagang maganap?"\n\n"Kung hindi ikaw mismo ang humiling ng pagpapanumbalik, huwag payagang magpatuloy ang pagpapatakbo. Papalitan nito ang anumang data na kasalukuyang nasa device!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Ipanumbalik ang aking data"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Huwag ipanumbalik"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Pakilagay ang iyong kasalukuyang backup na password sa ibaba:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Mangyaring maglagay ng password na gamitin sa pag-e-encrypt ng buong data sa pag-backup. Kung iiwanan itong blangko, gagamitin ang iyong kasalukuyang backup na password:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Kung nais mong i-encrypt ang buong data ng backup, maglagay ng password sa ibaba:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Kung naka-encrypt ang data sa pagpapanumbalik, pakilagay ang password sa ibaba:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
new file mode 100644
index 0000000..093e7dc
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Tüm verilerin bağlı bir masaüstü bilgisayara tam olarak yedeklenmesi için istekte bulunuldu?"\n\n"Yedekleme isteğinde siz bulunmadıysanız, işlemin devam etmesine izin vermeyin."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Verilerimi yedekle"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Yedekleme"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Tüm verilerin, bağlı bir masaüstü bilgisayardan tam olarak geri yüklenmesi için istekte bulunuldu. Bu işleme izin vermek istiyor musunuz?"\n\n"Geri yükleme isteğinde siz bulunmadıysanız, işlemin ilerlemesine izin vermeyin. Bu işlem, cihazınızdaki tüm verileri silip üzerine yazar!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Verilerimi geri yükle"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Geri yükleme"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Lütfen mevcut yedekleme şifrenizi aşağıya girin:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedekleme verilerini şifrelemek için lütfen bir şifre girin. Boş bırakılırsa, mevcut yedekleme şifreniz kullanılır:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Yedeklenen tüm verileri şifrelemek isterseniz, aşağıya bir şifre girin:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Geri yükleme verileri şifreliyse, lütfen şifreyi aşağıya girin:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
new file mode 100644
index 0000000..7b07b17
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Надійшов запит на повне резервне копіювання всіх даних на під’єднаний настільний комп’ютер. Дозволити це?"\n\n"Якщо ви не надсилали запит на резервне копіювання, не дозволяйте виконувати цю операцію."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Резервне копіювання даних"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Не створювати резервну копію"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Надійшов запит на повне відновлення всіх даних із під’єднаного настільного комп’ютера. Дозволити це?"\n\n"Якщо ви не надсилали запит на відновлення, не дозволяйте виконувати цю операцію. Усі розміщені зараз на пристрої дані буде замінено!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Відновити мої дані"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Не відновлювати"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Введіть свій поточний пароль резервного копіювання нижче:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Введіть пароль, який використовується для шифрування повного резервного копіювання даних. Якщо залишити це поле порожнім, буде використано поточний пароль резервного копіювання."</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Якщо ви хочете зашифрувати повне резервне копіювання даних, введіть пароль нижче:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Якщо дані для відновлення зашифровано, введіть пароль нижче:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
new file mode 100644
index 0000000..de88498
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Đã yêu cầu sao lưu đầy đủ toàn bộ dữ liệu tới máy tính được kết nối. Bạn có muốn cho phép điều này xảy ra không?"\n\n"Nếu không phải bản thân bạn yêu cầu sao lưu, đừng cho phép thao tác này tiếp tục."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sao lưu dữ liệu của tôi"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Không sao lưu"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Đã yêu cầu khôi phục đầy đủ toàn bộ dữ liệu từ máy tính được kết nối. Bạn có muốn cho phép điều này xảy ra không?"\n\n"Nếu không phải bản thân bạn yêu cầu khôi phục, đừng cho phép thao tác này tiếp tục. Thao tác này sẽ thay thế mọi dữ liệu hiện tại trên thiết bị!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Khôi phục dữ liệu của tôi"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Không khôi phục"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Vui lòng nhập mật khẩu sao lưu hiện tại của bạn bên dưới:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Vui lòng nhập mật khẩu dùng để mã hóa toàn bộ dữ liệu sao lưu. Nếu trường này bị bỏ trống, mật khẩu sao lưu hiện tại của bạn sẽ được sử dụng:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Nếu bạn muốn mã hóa toàn bộ dữ liệu sao lưu, hãy nhập mật khẩu bên dưới:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Nếu dữ liệu khôi phục được mã hóa, vui lòng nhập mật khẩu bên dưới:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..afdab4a
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"系统请求将所有数据完整备份至已连接的桌面计算机。允许此操作吗?"\n\n"如果您本人未要求备份,请阻止该操作。"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"备份我的数据"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"不备份"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"系统请求从连接的桌面计算机完整还原所有数据。允许此操作吗?"\n\n"如果您本人未要求还原,请阻止该操作。该操作会覆盖设备上当前的所有数据!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"恢复我的数据"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"不恢复"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"请在下方输入您的当前备份密码:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"请输入用于加密完整备份数据的密码。如果留空,系统将会使用您当前的备份密码:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想为整个备份数据加密,请在下方输入密码:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"如果恢复数据已加密,请在下方输入密码:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..8858b68
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份至連線電腦的要求,請問您允許進行備份嗎?"\n\n"如果您本人並未提出備份要求,請勿允許繼續進行這項作業。"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"備份我的資料"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"不要備份"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"系統收到從連線電腦完整還原所有資料的要求,請問您允許進行還原嗎?"\n\n"如果您本人並未提出還原要求,請勿允許繼續進行這項作業。這項作業將取代裝置上現有的全部資料!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"還原我的資料"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"不要還原"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"在下面輸入您目前的備份密碼:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入完整備份資料加密專用的密碼。如果您沒有輸入密碼,系統會使用您目前的備用密碼:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想要將完整備份資料進行加密,請在下面輸入一組密碼:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理,請在下面輸入密碼:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
new file mode 100644
index 0000000..8f7af99
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_text" msgid="1878021282758896593">"Kucelwe ukwesekelwa ngokulondoloza okuphelele kwayo yonke imininingo ekwi-desktop yekhompuyutha exhunyiwe. Angifuni ukuvumel alokhu ukuthi kwenzeke?"\n\n"Uma kuwukuthi awuzange ucele ukuthi kwesekelwe ngokulondoloza wena uqobo lwakho, ungavumeli ukuthi lolu hlelo luqhubekele phambili."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sekela ngokulondoloza imininingo yami"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Ungenzi isipele"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Kucelwe ukubuyiselwa esimweni okuphelele kwayo yonke imininingo yakho kwi-desktop yekhompuyutha exhunyiswe. Ngabe ufuna ukuvumela lokhu ukuthi kwenzeke?"\n\n"Uma ungazange ucele ukuthi lokhu kwenzeke wena uqobo, ungavumeli lokhu ukuthi kuqhubekele phambili. Lokhu kuzothatha indawo yayo yonke imininingo ekhona njengamanje kwi-device!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Buyisela esimweni imininingo yami"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Ungabuyiseli esimweni"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Sicela ufake i-password yakho yamanje yokwenza isipele ngezansi:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Sicela ufake i-password ezosetshenziselwa ukubhala ngokufihlekileyo imininingo eyesekwe ngokulondoloza. Uma lokhu kushiywe kungabhalwe lutho, kuzosetshenziswa i-password yokweseka ngokulondoloza yamanje:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Uma ufuna ukufaka ikhowudi kwimininingo yonke eyesekelwe ngokulondoloza faka i-passowrd engezansi:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Uma insiza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake i-password ngezansi:"</string>
+</resources>
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
index 5736d46..d7a591c 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_highlight.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_notify_alarm.png b/packages/SystemUI/res/drawable-hdpi/stat_notify_alarm.png
deleted file mode 100644
index ddbd3d7..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_notify_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..64b8f4f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png
index 37cad22..aee197c 100644
--- a/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png
+++ b/packages/SystemUI/res/drawable-hdpi/status_bar_bg_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_notify_alarm.png b/packages/SystemUI/res/drawable-mdpi/stat_notify_alarm.png
deleted file mode 100644
index 364cf75..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_notify_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..1d44294
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png
index 83d106d..6579ff9 100644
--- a/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png
+++ b/packages/SystemUI/res/drawable-mdpi/status_bar_bg_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png
index 1a9d88c..47f0745 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png
index a6d7507..490504e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png
index 1e1324a..348afb5 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png
index e4e13c5..2f20d67 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..6b3ab3e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..dd6651e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.png
new file mode 100644
index 0000000..d670177
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.png
new file mode 100644
index 0000000..c9f0302
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.png
new file mode 100644
index 0000000..dd8c498
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.png
new file mode 100644
index 0000000..dc42157
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..b42b713
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
index 4cb305d..16c5ca1 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png
new file mode 100644
index 0000000..3e59c8d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
index 85df060..c13abf0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight_land.png
index 97a07fa..3c4ce69 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_highlight_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
index 31d35c8..16ea9f6 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
index 334213b..1f76128 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
index 7c21c48..b7f6c11 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
index 1fe6b91..a5d3c6a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
index f0cc341..ad26f6c 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
index 7e8504c..39fc827 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_notify_more.png b/packages/SystemUI/res/drawable-xhdpi/stat_notify_more.png
new file mode 100644
index 0000000..16bf510
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_notify_more.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png
new file mode 100644
index 0000000..192d4af
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png
index 9e21348..d01b117 100644
--- a/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png
+++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_bg_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index a317268..d53dc61 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"رجوع"</string>
<string name="accessibility_home" msgid="8217216074895377641">"الرئيسية"</string>
<string name="accessibility_menu" msgid="316839303324695949">"القائمة"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"أحدث التطبيقات"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"التطبيقات الحديثة"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"زر تكبير/تصغير للتوافق."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"استخدام التكبير/التصغير لتحويل شاشة صغيرة إلى شاشة أكبر"</string>
@@ -117,7 +117,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"تم تعطيل بيانات الجوال"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"تم تعطيل البيانات"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"تم بلوغ الحد المحدد لاستخدام البيانات."\n\n"قد يؤدي استخدام بيانات إضافية إلى تحمل رسوم من مشغل شبكة الجوال."</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"تم بلوغ الحد المحدد لاستخدام البيانات."\n\n"قد يؤدي الاستخدام الإضافي للبيانات إلى تحصيل رسوم من قبل مشغل شبكة الجوال."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"إعادة تمكين البيانات"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"لا يوجد اتصال إنترنت"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 4bd8361..d5f8364 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -83,7 +83,7 @@
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Телефонът е с една чертичка."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Телефонът е с две чертички."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Телефонът е с три чертички."</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Сигналът за телефон е пълен."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Сигналът за телефона е пълен."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Няма данни."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Данните са с една чертичка."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Данните са с две чертички."</string>
@@ -112,7 +112,7 @@
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS се придобива."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter бе активиран."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Вибрира при звънене."</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Звънене в тих режим."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Звънът е заглушен."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G данните са деактивирани"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G данните са деактивирани"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мобилните данни са деактивирани"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 543bb9e..b200dd2 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Zpět"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Domů"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nedávno použité aplikace"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Naposledy použité aplikace"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačítko přepnutí metody vstupu"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačítko úpravy velikosti z důvodu kompatibility"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zvětšit menší obrázek na větší obrazovku."</string>
@@ -115,10 +115,10 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhraní TeleTypewriter zapnuto."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrační vyzvánění."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché vyzvánění."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datové přenosy 2G–3G jsou zakázány."</string>
- <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datové přenosy 4G jsou zakázány."</string>
- <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilní datové přenosy jsou zakázány."</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Datové přenosy jsou vypnuty"</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datové přenosy 2G a 3G jsou zakázány"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datové přenosy 4G jsou zakázány"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilní data jsou zakázána"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Přenos dat vypnut"</string>
<string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosáhli jste zadaného limitu množství přenesených dat."\n\n"Za další datové přenosy vám operátor může účtovat poplatky."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Znovu povolit data"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Žádné přip. k internetu"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 4753500..86d189c 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -60,7 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitetszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er udviklet til en mindre skærm, vises der en zoomfunktion ved uret."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skærmbilledet gemmes i Galleri"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke gemme screenshot. Ekstern lagring kan være i brug."</string>
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke gemme skærmbillede. Ekstern lagring kan være i brug."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Muligheder for USB-filoverførsel"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Isæt som en medieafspiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
@@ -112,13 +112,13 @@
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS samler data."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiveret."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringervibration."</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringeren er lydløs."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G/3G-data er deaktiveret"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Lydløs."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktiveret"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktiveret"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata er deaktiveret"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data er deaktiveret"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Den angivne grænse for dataforbrug er nået."\n\n"Yderligere databrug kan koste ekstra hos dit mobilselskab."</string>
- <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Aktiver data igen"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Den angivne grænse for dataforbrug er nået."\n\n"Yderligere dataforbrug kan koste ekstra hos mobilselskabet."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Genaktiver data"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen internetforb."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi er forbundet"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Søger efter GPS"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index f29619d..b88e288 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -70,7 +70,7 @@
<string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
<string name="accessibility_recent" msgid="3027675523629738534">"Πρόσφατες εφαρμογές"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί ζουμ συμβατότητας."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί εστίασης συμβατότητας."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Ζουμ από μικρότερη σε μεγαλύτερη οθόνη."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Το Bluetooth είναι συνδεδεμένο."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Το Bluetooth αποσυνδέθηκε."</string>
@@ -83,7 +83,7 @@
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Μία γραμμή τηλεφώνου."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Δύο γραμμές τηλεφώνου."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Τρεις γραμμές μπαταρίας."</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Σήμα τηλεφώνου πλήρες."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Πλήρες σήμα τηλεφώνου."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Δεν υπάρχουν δεδομένα."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Μία γραμμή δεδομένων."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Δύο γραμμές δεδομένων."</string>
@@ -102,7 +102,7 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Δεν υπάρχει SIM."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Σύνδεση Bluetooth"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Λειτουργία πτήσης."</string>
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
@@ -111,16 +111,16 @@
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Κουμπί ειδοοποιήσεων"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Κατάργηση ειδοποίησης."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Το GPS ενεργοποιήθηκε."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Ανάκτηση GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Προσδιορισμός GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Το TeleTypewriter ενεργοποιήθηκε."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Δόνηση ειδοποίησης ήχου"</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ήχος ειδοποίησης: Αθόρυβο."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Απενεργοποιήθηκαν τα δεδομένα 2G-3G"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Δόνηση ειδοποίησης ήχου."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ειδοποίηση ήχου στο αθόρυβο."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Τα δεδομένα 2G-3G απενεργοποιήθηκαν"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
- <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Απενεργοποιήθηκαν τα δεδομένα κινητής τηλεφωνίας"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Απενεργοποιήθηκαν τα δεδομένα"</string>
<string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Το καθορισμένο όριο χρήσης δεδομένων συμπληρώθηκε."\n\n"Πρόσθετη χρήση δεδομένων ενδέχεται να επιφέρει χρεώσεις από την εταιρεία κινητής τηλεφωνίας."</string>
- <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Εκ νέου ενεργοποίηση δεδομ."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Νέα ενεργοποίηση δεδομένων"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Χωρ. σύνδ. στο Διαδ."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi συνδεδεμένο"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Αναζήτηση για GPS"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 6634435..8fd697b 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -71,7 +71,7 @@
<string name="accessibility_recent" msgid="3027675523629738534">"برنامه‌های اخیر"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"کلید تغییر روش ورود متن."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"دکمه بزرگنمایی سازگار."</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"بزرگنمایی از صفحه‌های کوچک تا بزرگ"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"بزرگنمایی از صفحه‌های کوچک تا بزرگ."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"بلوتوث متصل است."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"بلوتوث قطع شده است."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"باتری موجود نیست."</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 73804c0..9995fd7 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -75,23 +75,23 @@
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth povezan."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth isključen."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Nema baterije."</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterija jedna linija."</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterija dvije linije."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterija jedan stupac."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterija dva stupca."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterija tri stupca."</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"Baterija je puna."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Nema telefona."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefonski signal jedan stupac."</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefonski signal dvije linije."</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefonski signal tri linije."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefonski signal dva stupca."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefonski signal tri stupca."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonski signal pun."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Nema podataka."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Podatkovni signal jedan stupac."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Podatkovni signal dva stupca."</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Podatkovni signal tri linije."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Podatkovni signal tri stupca."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Podatkovni signal pun."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Nema WiFi signala."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi signal jedan stupac."</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi signal dvije linije."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi signal dva stupca ."</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tri stupca."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"WiFi signal pun."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
@@ -108,16 +108,16 @@
<string name="accessibility_settings_button" msgid="7913780116850379698">"Gumb postavki."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Gumb obavijesti."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Ukloni obavijest."</string>
- <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS omogućen."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je omogućen."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Dohvaćanje GPS-a."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter omogućen."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter je omogućen."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibracija softvera zvona."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Softver zvona utišan."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G podaci onemogućeni"</string>
- <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G podaci onemogućeni"</string>
- <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilni podaci su onemogućeni"</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Podaci onemogućeni"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosegnuto je navedeno ograničenje upotrebe podataka."\n\n"Dodatna upotreba podataka može podlijegati naplati."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Onemogućeni su 2G-3G podaci"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Onemogućeni su 4G podaci"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Onemogućeni su mobilni podaci"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Podaci su onemogućeni"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosegnuto je navedeno ograničenje upotrebe podataka."\n\n"Dodatna upotreba podataka može se naplaćivati."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Ponovo omogući podatke"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nema internetske veze"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 1cc6197..152b103 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Vissza"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Főoldal"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"A legújabb alkalmazások"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nemrég használt alkalmazások"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kompatibilitási zoom gomb."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kicsinyítsen a nagyobb képernyőhöz."</string>
@@ -113,13 +113,13 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter engedélyezve."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Csengő rezeg."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Csengő néma."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G/3G-adatforgalom letiltva"</string>
- <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-adatforgalom letiltva"</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G adatforgalom letiltva"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G adatforgalom letiltva"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil adatforgalom letiltva"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Adatok letiltva"</string>
<string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Elérte a megadott adathasználati korlátot."\n\n"További adathasználatért a szolgáltató díjat számolhat fel."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Adatforgalom engedélyezése"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nincs internetkapcs."</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nincs internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi csatlakoztatva"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS keresése"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"A GPS beállította a helyet"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 7a4c845..8edea7b 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -60,18 +60,18 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom Kompatibilitas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Saat apl dirancang untuk layar yang lebih kecil, kontrol zoom akan tampil di dekat jam."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan layar disimpan ke Galeri"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak dapat menyimpan tangkapan layar. Penyimpan eksternal mungkin digunakan."</string>
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak dapat menyimpan tangkapan layar. Penyimpan eksternal mungkin sedang digunakan."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opsi transfer berkas USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pasang sebagai pemutar media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pasang sebagai kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Pasang aplikasi Transfer Berkas Android untuk Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Beranda"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Utama"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
<string name="accessibility_recent" msgid="3027675523629738534">"Aplikasi terbaru"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tombol perbesar/perkecil kompatibilitas."</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perkecil untuk layar yang lebih besar."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perbesar dari layar kecil ke besar."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tersambung."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth terputus."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Tidak ada baterai."</string>
@@ -90,7 +90,7 @@
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tiga batang."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Sinyal data penuh."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Tidak ada WiFi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wifi satu batang."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi satu batang."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi dua batang."</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tiga batang."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinyal WiFi penuh."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index c7ef3f6..0386079 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -84,7 +84,7 @@
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefono: due barre."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefono: tre barre."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Massimo segnale telefonico."</string>
- <string name="accessibility_no_data" msgid="4791966295096867555">"Nessun dato presente."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nessun dato."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Dati: una barra."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dati: due barre."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dati: tre barre."</string>
@@ -118,7 +118,7 @@
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dati 2G-3G disattivati"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dati 4G disattivati"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dati mobili disattivati"</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dati disabilitati"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dati disabilati"</string>
<string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Il limite di utilizzo dei dati specificato è stato raggiunto."\n\n"Un ulteriore utilizzo di dati può comportare l\'applicazione di costi da parte dell\'operatore."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Riattiva dati"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nessuna connessione"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b51c919..b7e26b9 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -29,7 +29,7 @@
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string>
<string name="battery_low_title" msgid="7923774589611311406">"חבר מטען"</string>
- <string name="battery_low_subtitle" msgid="1752040062087829196">"עוצמת הסוללה נחלשת."</string>
+ <string name="battery_low_subtitle" msgid="1752040062087829196">"הסוללה נחלשת."</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"נותרו <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
<string name="invalid_charger" msgid="4549105996740522523">"טעינה באמצעות USB אינה נתמכת."\n"השתמש אך ורק במטען שסופק."</string>
<string name="battery_low_why" msgid="7279169609518386372">"צריכת סוללה"</string>
@@ -44,16 +44,16 @@
<string name="recent_tasks_empty" msgid="1905484479067697884">"אין יישומים חדשים."</string>
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Google Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string>
- <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"הגדר שיטות קלט"</string>
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"הגדרת שיטות קלט"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"השתמש במקלדת הפיזית"</string>
- <string name="usb_device_permission_prompt" msgid="3816016361969816903">"האם לאפשר ליישום <xliff:g id="APPLICATION">%1$s</xliff:g> לגשת להתקן ה-USB?"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"האם לאפשר ליישום <xliff:g id="APPLICATION">%1$s</xliff:g> לגשת למכשיר ה-USB?"</string>
<string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"האם לאפשר ליישום <xliff:g id="APPLICATION">%1$s</xliff:g> לגשת לאביזר ה-USB?"</string>
- <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר התקן USB זה מחובר?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר מכשיר USB זה מחובר?"</string>
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר אביזר USB זה מחובר?"</string>
- <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"אין יישומים מותקנים הפועלים עם אביזר ה-USB. למידע נוסף אודות אביזר זה בכתובת <xliff:g id="URL">%1$s</xliff:g>"</string>
- <string name="title_usb_accessory" msgid="4966265263465181372">"עזרי USB"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"אין יישומים מותקנים הפועלים עם אביזר ה-USB. למידע נוסף על אביזר זה בקר בכתובת <xliff:g id="URL">%1$s</xliff:g>"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"אביזר USB"</string>
<string name="label_view" msgid="6304565553218192990">"הצג"</string>
- <string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור התקן USB זה"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור מכשיר USB זה"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"השתמש כברירת מחדל עבור אביזר USB זה"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"הגדל תצוגה כדי למלא את המסך"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"הקודם"</string>
<string name="accessibility_home" msgid="8217216074895377641">"בית"</string>
<string name="accessibility_menu" msgid="316839303324695949">"תפריט"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"יישומים חדשים"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"יישומים אחרונים"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"לחצן החלפת שיטת קלט."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"לחצן מרחק מתצוגה של תאימות."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"שנה מרחק מתצוגה של מסך קטן לגדול יותר."</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index d29d657..5ad4e2d 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"戻る"</string>
<string name="accessibility_home" msgid="8217216074895377641">"ホーム"</string>
<string name="accessibility_menu" msgid="316839303324695949">"メニュー"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"新着のアプリケーション"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"最近使ったアプリケーション"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"互換ズームボタン。"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"小さい画面から大きい画面に拡大。"</string>
@@ -120,7 +120,7 @@
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"モバイルデータが無効になりました"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"データが無効になりました"</string>
<string name="data_usage_disabled_dialog" msgid="6524467913290900042">"指定したデータ使用上限に達しました。"\n\n"これ以上データを使用すると、携帯通信会社への料金が発生する可能性があります。"</string>
- <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"データを再度有効にする"</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"データ接続を再度有効にする"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"インターネット未接続"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi接続済み"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSで検索中"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 202f351..79837eb 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -109,8 +109,8 @@
<string name="accessibility_notifications_button" msgid="2933903195211483438">"알림 버튼입니다."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"알림을 삭제합니다."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS가 사용 설정되었습니다."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS 가져오는 중입니다."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"전신 타자기가 사용 설정되었습니다."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS를 가져오는 중입니다."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"전신 타자기(TTY)가 사용 설정되었습니다."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"벨소리가 진동입니다."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"벨소리가 무음입니다."</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 데이터 사용중지됨"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 2dd1716..68708c5 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -96,7 +96,7 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"„Wi-Fi“ signalas stiprus."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Kraštas"</string>
@@ -117,7 +117,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G duomenys neleidžiami"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilieji duomenys neleidžiami"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Duomenys neleidžiami"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Pasiektas nurodytas duomenų naudojimo apribojimas."\n\n"Naudojant papildomus duomenis gali būti taikomi operatoriaus mokesčiai."</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Pasiektas nurodytas duomenų naudojimo apribojimas."\n\n"Naudojant papildomų duomenų gali būti taikomi operatoriaus mokesčiai."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Iš naujo įgalinti duomenis"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nėra interneto ryš."</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Prisij. prie „Wi-Fi“"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 8bc011c..f4f9a3a 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -83,12 +83,12 @@
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefoon: één streepje."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefoon: twee streepjes."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefoon: drie streepjes."</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefoonsignaal is op volledige sterkte."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefoonsignaal is op volle sterkte."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Geen gegevens."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Gegevens: één streepje."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Gegevens: twee streepjes."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Gegevens: drie streepjes."</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Gegevenssignaal is op volledige sterkte."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Gegevenssignaal is op volle sterkte."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Geen Wi-Fi."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: één streepje."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: twee streepjes."</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 495288c..4e72f21 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -71,10 +71,10 @@
<string name="accessibility_recent" msgid="3027675523629738534">"Najnowsze aplikacje"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Przycisk powiększenia na potrzeby zgodności."</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran na większy."</string>
- <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth podłączony."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran do większego."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth połączony."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth rozłączony."</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"Brak baterii."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Bateria rozładowana."</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateria: jeden pasek."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateria: dwa paski."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateria: trzy paski."</string>
@@ -83,17 +83,17 @@
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon: jeden pasek."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon: dwa paski."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon: trzy paski."</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Sygnał telefonu: pełny."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefon: pełna moc sygnału."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Brak danych."</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Jeden pasek sygnału danych."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Dane: jeden pasek."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dane: dwa paski."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dane: trzy paski."</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Pełna moc sygnału danych."</string>
- <string name="accessibility_no_wifi" msgid="4017628918351949575">"Brak Wi-Fi."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Dane: pełna moc sygnału."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Brak sieci Wi-Fi."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Sieć Wi-Fi: jeden pasek."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Sieć Wi-Fi: dwa paski."</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Sieć Wi-Fi: trzy paski."</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Pełna moc sygnału Wi-Fi."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sieć Wi-Fi: pełna moc sygnału."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
<string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
@@ -104,7 +104,7 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Brak karty SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Powiązanie Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Tryb samolotowy."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria: <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Przycisk Ustawienia."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Przycisk powiadomień."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Usuń powiadomienie."</string>
@@ -117,7 +117,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Wyłączono komórkową transmisję danych"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Wyłączono transmisję danych"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Osiągnięto określony limit transmisji danych."\n\n"Operator może pobierać opłaty za przesyłanie dodatkowych pakietów."</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Osiągnięto określony limit transmisji danych."\n\n"Operator może pobierać opłaty za przesyłanie dodatkowych danych."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Włącz transmisję danych"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 97c978b..07fb12b 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Voltar"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Aplicativos recentes"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicações recentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão de zoom da compatibilidade."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aumentar a tela com zoom."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 03ce115..527d769 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -117,7 +117,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datele 4G au fost dezactivate"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Datele mobile au fost dezactivate"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Utilizare date dezactivată"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"A fost atinsă limita specificată de utilizare a datelor."\n\n"Utilizarea unor date suplimentare poate atrage costuri impuse de operator."</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"A fost atinsă limita de utilizare a datelor specificată."\n\n"Utilizarea unor date suplimentare poate atrage costuri impuse de operator."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Reactivaţi datele"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Fără conex. internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectat"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index b6a774c..440b872 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -118,8 +118,8 @@
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dátové prenosy 2G a 3G sú zakázané"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dátové prenosy 4G sú zakázané"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilné dátové prenosy sú zakázané"</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dátové prenosy sú zakázané"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosiahli ste stanovené obmedzenie dátových prenosov."\n\n"Za ďalšie používanie dátových prenosov vám operátor môže účtovať poplatky."</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dáta boli zakázané"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosiahli ste zadané obmedzenie dátových prenosov."\n\n"Za ďalšie používanie dátových prenosov vám operátor môže účtovať poplatky."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Znova povoliť dátové prenosy"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Bez prip. na Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: pripojené"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index b7dc894..f51c88f 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Nazaj"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Začetni zaslon"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meni"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"Nedavni programi"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nedavna obvestila"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklop načina vnosa."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb povečave za združljivost."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Povečava manjšega na večji zaslon."</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index d00521a..91e2d2c 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -117,7 +117,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G подаци су онемогућени"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Подаци мобилне мреже су онемогућени"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Подаци су онемогућени"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Достигнуто је наведено ограничење потрошње података."\n\n"Мобилни оператер може додатно да наплати додатну потрошњу података."</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Достигнуто је наведено ограничење потрошње података."\n\n"Мобилни оператер може додатно да наплати даљу потрошњу података."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Поново омогући податке"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Нема интернет везе"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi је повезан"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index f69539a..b19b435 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -72,14 +72,14 @@
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ปุ่มซูมที่ใช้งานร่วมกันได้"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ซูมหน้าจอให้มีขนาดใหญ่ขึ้น"</string>
- <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"เชื่อมต่อบลูทูธอยู่"</string>
- <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ไม่ได้เชื่อมต่อบลูทูธ"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"เชื่อมต่อบลูทูธแล้ว"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ตัดการเชื่อมต่อบลูทูธแล้ว"</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"ไม่มีแบตเตอรี่"</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"แบตเตอรี่หนึ่งขีด"</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"แบตเตอรี่สองขีด"</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"แบตเตอรี่สามขีด"</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"แบตเตอรี่เต็ม"</string>
- <string name="accessibility_no_phone" msgid="4894708937052611281">"ไม่มีสัญญาณ"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"ไม่มีสัญญาณโทรศัพท์"</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"สัญญาณโทรศัพท์หนึ่งขีด"</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"สัญญาณโทรศัพท์สองขีด"</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"สัญญาณโทรศัพท์สามขีด"</string>
@@ -89,18 +89,18 @@
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"สัญญาณข้อมูลสองขีด"</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"สัญญาณข้อมูลสามขีด"</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"สัญญาณข้อมูลเต็ม"</string>
- <string name="accessibility_no_wifi" msgid="4017628918351949575">"ไม่มี Wi-Fi"</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"สัญญาณ Wi-Fi หนึ่งขีด"</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"สัญญาณ Wi-Fi สองขีด"</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"สัญญาณ Wi-Fi สามขีด"</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"สัญญาณ Wi-Fi เต็ม"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"ไม่มี WiFi"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"สัญญาณ WiFi หนึ่งขีด"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"สัญญาณ WiFi สองขีด"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"สัญญาณ WiFi สามขีด"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"สัญญาณ WiFi เต็ม"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
<string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
- <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ไม่มีซิมการ์ด"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"การปล่อยสัญญาณบลูทูธ"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"โหมดใช้งานบนเครื่องบิน"</string>
@@ -108,7 +108,7 @@
<string name="accessibility_settings_button" msgid="7913780116850379698">"ปุ่มการตั้งค่า"</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"ปุ่มแจ้งเตือน"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"นำการแจ้งเตือนออก"</string>
- <string name="accessibility_gps_enabled" msgid="3511469499240123019">"เปิดใช้งาน GPS อยู่"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"เปิดใช้งาน GPS แล้ว"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"การดึงข้อมูล GPS"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"เปิดใช้งาน TeleTypewriter อยู่"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"เสียงเรียกเข้าแบบสั่น"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index d59edd8..c74de20 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -113,11 +113,11 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Pinapagana ang TeleTypewriter."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pag-vibrate ng ringer."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Naka-silent ang ringer."</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Hindi pinagana ang data na 2G-3G"</string>
- <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Hindi pinagana ang data na 4G"</string>
- <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Hindi pinagana ang data ng mobile"</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Hindi pinagana ang data"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Naabot na ang tinukoy na limitasyon sa paggamit ng data."\n\n"Maaaring makatamo ng mga singilin ng carrier ang karagdagang paggamit ng data."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Di pinapagana ang 2G-3G na data"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Hindi pinapagana ang 4G na data"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Hindi pinapagana ang data ng mobile"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Hindi pinapagana ang data"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Naabot na ang tinukoy na limitasyon sa paggamit ng data."\n\n"Maaaring makaipon ng mga carrier na singilin ang karagdagang paggamit sa data."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Muling paganahin ang data"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Walang koneksyon sa Internet"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 1d764e2..12d2584 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -109,7 +109,7 @@
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Кнопка сповіщень."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Видалити сповіщення."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS увімкнено."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Отримання GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Встановлення зв’язку з GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп увімкнено."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Дзвінок на вібросигналі."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Дзвінок беззвучний."</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index bc8626b..f85394b 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -96,20 +96,20 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Tín hiệu WiFi đầy đủ."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Cạnh"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Không có SIM nào."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Chia sẻ kết nối Bluetooth."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Dùng làm điểm truy cập Internet qua Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Chế độ trên máy bay."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> phần trăm pin."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Nút cài đặt."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Nút thông báo."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Xóa thông báo."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"Đã bật GPS."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Giành được GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Nhận GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Đã bật TeleTypewriter."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Chuông rung."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Chuông im lặng."</string>
diff --git a/packages/SystemUI/res/values-xhdpi/dimens.xml b/packages/SystemUI/res/values-xhdpi/dimens.xml
new file mode 100644
index 0000000..aa75c20
--- /dev/null
+++ b/packages/SystemUI/res/values-xhdpi/dimens.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * 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.
+*/
+-->
+<resources>
+ <!-- thickness (height) of each notification row, including any separators or padding -->
+ <!-- note: this is the same value as in values/dimens.xml; the value is overridden in
+ values-hdpi/dimens.xml and so we need to re-assert the general value here -->
+ <dimen name="notification_height">65dp</dimen>
+
+ <!-- thickness (height) of dividers between each notification row -->
+ <!-- same as in values/dimens.xml; see note at notification_height -->
+ <dimen name="notification_divider_height">1dp</dimen>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 54fbefb..4e369b0 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -68,7 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"返回"</string>
<string name="accessibility_home" msgid="8217216074895377641">"主螢幕"</string>
<string name="accessibility_menu" msgid="316839303324695949">"選單"</string>
- <string name="accessibility_recent" msgid="3027675523629738534">"最近用過的應用程式"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"最近使用的應用程式"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string>
@@ -78,21 +78,21 @@
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"電池電量一格。"</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"電池電量兩格。"</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"電池電量三格。"</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"電池已充滿。"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"電池電量已滿。"</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"沒有電話訊號。"</string>
- <string name="accessibility_phone_one_bar" msgid="687699278132664115">"電話訊號強度為一格。"</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電話訊號強度為兩格。"</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電話訊號強度為三格。"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"電話訊號強度一格。"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電話訊號強度兩格。"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電話訊號強度三格。"</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"電話訊號滿格。"</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"沒有數據網路。"</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"數據網路訊號強度為一格。"</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"數據網路訊號強度為兩格。"</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"數據網路訊號強度為三格。"</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"數據網路訊號強度一格。"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"數據網路訊號強度兩格。"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"數據網路訊號強度三格。"</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"數據網路訊號滿格。"</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"沒有 WiFi 連線。"</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi 訊號強度為一格。"</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi 訊號強度為兩格。"</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi 訊號強度為三格。"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi 訊號強度一格。"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi 訊號強度兩格。"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi 訊號強度三格。"</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"WiFi 訊號滿格。"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
@@ -118,8 +118,8 @@
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"已停用行動數據"</string>
- <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"已停用數據"</string>
- <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"已達到指定的資料用量上限。"\n\n"如要使用額外的資料用量,行動通訊業者可能會向您收費。"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"數據已停用"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"已達到指定的資料用量上限。"\n\n"如果使用額外的資料用量,行動通訊業者可能會向您收費。"</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"重新啟用數據連線"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有網際網路連線"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 6db5fc4..f633825 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -63,4 +63,28 @@
<!-- thickness (height) of dividers between each notification row -->
<dimen name="notification_divider_height">1dp</dimen>
+
+ <!-- Notification drawer tuning parameters (phone UI) -->
+ <!-- Initial velocity of the shade when expanding on its own -->
+ <dimen name="self_expand_velocity">2000dp</dimen>
+ <!-- Initial velocity of the shade when collapsing on its own -->
+ <dimen name="self_collapse_velocity">2000dp</dimen>
+ <!-- Minimum final velocity of gestures interpreted as expand requests -->
+ <dimen name="fling_expand_min_velocity">200dp</dimen>
+ <!-- Minimum final velocity of gestures interpreted as collapse requests -->
+ <dimen name="fling_collapse_min_velocity">200dp</dimen>
+ <!-- Cap on contribution of x dimension of gesture to overall velocity -->
+ <dimen name="fling_gesture_max_x_velocity">200dp</dimen>
+
+ <!-- Minimum fraction of the display a gesture must travel, at any velocity, to qualify as a
+ collapse request -->
+ <item type="dimen" name="collapse_min_display_fraction">10%</item>
+ <!-- Minimum fraction of the display a gesture must travel to qualify as an expand request -->
+ <item type="dimen" name="expand_min_display_fraction">50%</item>
+
+ <!-- Initial acceleration of an expand animation after fling -->
+ <dimen name="expand_accel">2000dp</dimen>
+ <!-- Initial acceleration of an collapse animation after fling -->
+ <dimen name="collapse_accel">2000dp</dimen>
+
</resources>
diff --git a/packages/SystemUI/res/values/donottranslate.xml b/packages/SystemUI/res/values/donottranslate.xml
index c25a5b7..93ec481 100644
--- a/packages/SystemUI/res/values/donottranslate.xml
+++ b/packages/SystemUI/res/values/donottranslate.xml
@@ -17,8 +17,9 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- For formatting day of week and date in DateView. Day of week precedes date by default,
- but this may be overridden on a per-locale basis if necessary. -->
- <string name="status_bar_date_formatter">%1$s\n%2$s</string>
+ <!-- For formatting day of week and date in DateView. %1$s is DOW, %2$s is date.
+ In Roman locales we now show only the date, but DOW is available for other locales if
+ necessary. -->
+ <string name="status_bar_date_formatter">%2$s</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index e1231a5..492f3c2 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -16,41 +16,65 @@
package com.android.systemui;
-import java.io.IOException;
-
+import android.app.ActivityManager;
import android.app.WallpaperManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Region.Op;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
+import android.opengl.GLUtils;
+import android.renderscript.Matrix4f;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
-import android.util.Slog;
+import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
-import android.content.Context;
-import android.content.IntentFilter;
-import android.content.Intent;
-import android.content.BroadcastReceiver;
+import android.view.WindowManager;
+
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLContext;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.egl.EGLSurface;
+import javax.microedition.khronos.opengles.GL;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import static android.opengl.GLES20.*;
+import static javax.microedition.khronos.egl.EGL10.*;
/**
* Default built-in wallpaper that simply shows a static image.
*/
+@SuppressWarnings({"UnusedDeclaration"})
public class ImageWallpaper extends WallpaperService {
private static final String TAG = "ImageWallpaper";
+ private static final String GL_LOG_TAG = "ImageWallpaperGL";
private static final boolean DEBUG = false;
static final boolean FIXED_SIZED_SURFACE = true;
+ static final boolean USE_OPENGL = true;
WallpaperManager mWallpaperManager;
- private Handler mHandler;
+
+ boolean mIsHwAccelerated;
@Override
public void onCreate() {
super.onCreate();
mWallpaperManager = (WallpaperManager) getSystemService(WALLPAPER_SERVICE);
- mHandler = new Handler();
+
+ //noinspection PointlessBooleanExpression,ConstantConditions
+ if (FIXED_SIZED_SURFACE && USE_OPENGL) {
+ WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
+ Display display = windowManager.getDefaultDisplay();
+ mIsHwAccelerated = ActivityManager.isHighEndGfx(display);
+ }
}
public Engine onCreateEngine() {
@@ -58,9 +82,16 @@ public class ImageWallpaper extends WallpaperService {
}
class DrawableEngine extends Engine {
- private final Object mLock = new Object();
+ static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
+ static final int EGL_OPENGL_ES2_BIT = 4;
+
+ private final Object mLock = new Object[0];
+
+ // TODO: Not currently used, keeping around until we know we don't need it
+ @SuppressWarnings({"UnusedDeclaration"})
private WallpaperObserver mReceiver;
- Drawable mBackground;
+
+ Bitmap mBackground;
int mBackgroundWidth = -1, mBackgroundHeight = -1;
float mXOffset;
float mYOffset;
@@ -71,6 +102,35 @@ public class ImageWallpaper extends WallpaperService {
int mLastXTranslation;
int mLastYTranslation;
+ private EGL10 mEgl;
+ private EGLDisplay mEglDisplay;
+ private EGLConfig mEglConfig;
+ private EGLContext mEglContext;
+ private EGLSurface mEglSurface;
+ private GL mGL;
+
+ private static final String sSimpleVS =
+ "attribute vec4 position;\n" +
+ "attribute vec2 texCoords;\n" +
+ "varying vec2 outTexCoords;\n" +
+ "uniform mat4 projection;\n" +
+ "\nvoid main(void) {\n" +
+ " outTexCoords = texCoords;\n" +
+ " gl_Position = projection * position;\n" +
+ "}\n\n";
+ private static final String sSimpleFS =
+ "precision mediump float;\n\n" +
+ "varying vec2 outTexCoords;\n" +
+ "uniform sampler2D texture;\n" +
+ "\nvoid main(void) {\n" +
+ " gl_FragColor = texture2D(texture, outTexCoords);\n" +
+ "}\n\n";
+
+ private static final int FLOAT_SIZE_BYTES = 4;
+ private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
+ private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
+ private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
+
class WallpaperObserver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (DEBUG) {
@@ -94,7 +154,7 @@ public class ImageWallpaper extends WallpaperService {
super.onCreate(surfaceHolder);
- // Don't need this currently because the wallpaper service
+ // TODO: Don't need this currently because the wallpaper service
// will restart the image wallpaper whenever the image changes.
//IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
//mReceiver = new WallpaperObserver();
@@ -221,8 +281,7 @@ public class ImageWallpaper extends WallpaperService {
int yPixels = availh < 0 ? (int)(availh * mYOffset + .5f) : (availh / 2);
mOffsetsChanged = false;
- if (!mRedrawNeeded
- && xPixels == mLastXTranslation && yPixels == mLastYTranslation) {
+ if (!mRedrawNeeded && xPixels == mLastXTranslation && yPixels == mLastYTranslation) {
if (DEBUG) {
Log.d(TAG, "Suppressed drawFrame since the image has not "
+ "actually moved an integral number of pixels.");
@@ -240,27 +299,12 @@ public class ImageWallpaper extends WallpaperService {
updateWallpaperLocked();
}
- //Slog.i(TAG, "************** DRAWING WALLAPER ******************");
- Canvas c = sh.lockCanvas();
- if (c != null) {
- try {
- if (DEBUG) {
- Log.d(TAG, "Redrawing: xPixels=" + xPixels + ", yPixels=" + yPixels);
- }
-
- c.translate(xPixels, yPixels);
- if (availw < 0 || availh < 0) {
- c.save(Canvas.CLIP_SAVE_FLAG);
- c.clipRect(0, 0, mBackgroundWidth, mBackgroundHeight, Op.DIFFERENCE);
- c.drawColor(0xff000000);
- c.restore();
- }
- if (mBackground != null) {
- mBackground.draw(c);
- }
- } finally {
- sh.unlockCanvasAndPost(c);
+ if (mIsHwAccelerated) {
+ if (!drawWallpaperWithOpenGL(sh, availw, availh, xPixels, yPixels)) {
+ drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
}
+ } else {
+ drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
}
if (FIXED_SIZED_SURFACE) {
@@ -274,15 +318,15 @@ public class ImageWallpaper extends WallpaperService {
}
void updateWallpaperLocked() {
- //Slog.i(TAG, "************** LOADING WALLAPER ******************");
Throwable exception = null;
try {
- mBackground = mWallpaperManager.getFastDrawable();
+ mBackground = mWallpaperManager.getBitmap();
} catch (RuntimeException e) {
exception = e;
} catch (OutOfMemoryError e) {
exception = e;
}
+
if (exception != null) {
mBackground = null;
// Note that if we do fail at this, and the default wallpaper can't
@@ -296,8 +340,282 @@ public class ImageWallpaper extends WallpaperService {
Log.w(TAG, "Unable reset to default wallpaper!", ex);
}
}
- mBackgroundWidth = mBackground != null ? mBackground.getIntrinsicWidth() : 0;
- mBackgroundHeight = mBackground != null ? mBackground.getIntrinsicHeight() : 0;
+
+ mBackgroundWidth = mBackground != null ? mBackground.getWidth() : 0;
+ mBackgroundHeight = mBackground != null ? mBackground.getHeight() : 0;
+ }
+
+ private void drawWallpaperWithCanvas(SurfaceHolder sh, int w, int h, int x, int y) {
+ Canvas c = sh.lockCanvas();
+ if (c != null) {
+ try {
+ if (DEBUG) {
+ Log.d(TAG, "Redrawing: x=" + x + ", y=" + y);
+ }
+
+ c.translate(x, y);
+ if (w < 0 || h < 0) {
+ c.save(Canvas.CLIP_SAVE_FLAG);
+ c.clipRect(0, 0, mBackgroundWidth, mBackgroundHeight, Op.DIFFERENCE);
+ c.drawColor(0xff000000);
+ c.restore();
+ }
+ if (mBackground != null) {
+ c.drawBitmap(mBackground, 0, 0, null);
+ }
+ } finally {
+ sh.unlockCanvasAndPost(c);
+ }
+ }
+ }
+
+ private boolean drawWallpaperWithOpenGL(SurfaceHolder sh, int w, int h, int left, int top) {
+ if (!initGL(sh)) return false;
+
+ final float right = left + mBackgroundWidth;
+ final float bottom = top + mBackgroundHeight;
+
+ final Rect frame = sh.getSurfaceFrame();
+
+ final Matrix4f ortho = new Matrix4f();
+ ortho.loadOrtho(0.0f, frame.width(), frame.height(), 0.0f, -1.0f, 1.0f);
+
+ final FloatBuffer triangleVertices = createMesh(left, top, right, bottom);
+
+ final int texture = loadTexture(mBackground);
+ final int program = buildProgram(sSimpleVS, sSimpleFS);
+
+ final int attribPosition = glGetAttribLocation(program, "position");
+ final int attribTexCoords = glGetAttribLocation(program, "texCoords");
+ final int uniformTexture = glGetUniformLocation(program, "texture");
+ final int uniformProjection = glGetUniformLocation(program, "projection");
+
+ checkGlError();
+
+ glViewport(0, 0, frame.width(), frame.height());
+ glBindTexture(GL_TEXTURE_2D, texture);
+
+ glUseProgram(program);
+ glEnableVertexAttribArray(attribPosition);
+ glEnableVertexAttribArray(attribTexCoords);
+ glUniform1i(uniformTexture, 0);
+ glUniformMatrix4fv(uniformProjection, 1, false, ortho.getArray(), 0);
+
+ checkGlError();
+
+ if (w < 0 || h < 0) {
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+ }
+
+ // drawQuad
+ triangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
+ glVertexAttribPointer(attribPosition, 3, GL_FLOAT, false,
+ TRIANGLE_VERTICES_DATA_STRIDE_BYTES, triangleVertices);
+
+ triangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
+ glVertexAttribPointer(attribTexCoords, 3, GL_FLOAT, false,
+ TRIANGLE_VERTICES_DATA_STRIDE_BYTES, triangleVertices);
+
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+ if (!mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) {
+ throw new RuntimeException("Cannot swap buffers");
+ }
+ checkEglError();
+
+ finishGL();
+
+ return true;
+ }
+
+ private FloatBuffer createMesh(int left, int top, float right, float bottom) {
+ final float[] verticesData = {
+ // X, Y, Z, U, V
+ left, bottom, 0.0f, 0.0f, 1.0f,
+ right, bottom, 0.0f, 1.0f, 1.0f,
+ left, top, 0.0f, 0.0f, 0.0f,
+ right, top, 0.0f, 1.0f, 0.0f,
+ };
+
+ final int bytes = verticesData.length * FLOAT_SIZE_BYTES;
+ final FloatBuffer triangleVertices = ByteBuffer.allocateDirect(bytes).order(
+ ByteOrder.nativeOrder()).asFloatBuffer();
+ triangleVertices.put(verticesData).position(0);
+ return triangleVertices;
+ }
+
+ private int loadTexture(Bitmap bitmap) {
+ int[] textures = new int[1];
+
+ glActiveTexture(GL_TEXTURE0);
+ glGenTextures(1, textures, 0);
+ checkGlError();
+
+ int texture = textures[0];
+ glBindTexture(GL_TEXTURE_2D, texture);
+ checkGlError();
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ GLUtils.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmap, GL_UNSIGNED_BYTE, 0);
+ checkGlError();
+
+ bitmap.recycle();
+
+ return texture;
+ }
+
+ private int buildProgram(String vertex, String fragment) {
+ int vertexShader = buildShader(vertex, GL_VERTEX_SHADER);
+ if (vertexShader == 0) return 0;
+
+ int fragmentShader = buildShader(fragment, GL_FRAGMENT_SHADER);
+ if (fragmentShader == 0) return 0;
+
+ int program = glCreateProgram();
+ glAttachShader(program, vertexShader);
+ checkGlError();
+
+ glAttachShader(program, fragmentShader);
+ checkGlError();
+
+ glLinkProgram(program);
+ checkGlError();
+
+ int[] status = new int[1];
+ glGetProgramiv(program, GL_LINK_STATUS, status, 0);
+ if (status[0] != GL_TRUE) {
+ String error = glGetProgramInfoLog(program);
+ Log.d(GL_LOG_TAG, "Error while linking program:\n" + error);
+ glDeleteShader(vertexShader);
+ glDeleteShader(fragmentShader);
+ glDeleteProgram(program);
+ return 0;
+ }
+
+ return program;
+ }
+
+ private int buildShader(String source, int type) {
+ int shader = glCreateShader(type);
+
+ glShaderSource(shader, source);
+ checkGlError();
+
+ glCompileShader(shader);
+ checkGlError();
+
+ int[] status = new int[1];
+ glGetShaderiv(shader, GL_COMPILE_STATUS, status, 0);
+ if (status[0] != GL_TRUE) {
+ String error = glGetShaderInfoLog(shader);
+ Log.d(GL_LOG_TAG, "Error while compiling shader:\n" + error);
+ glDeleteShader(shader);
+ return 0;
+ }
+
+ return shader;
+ }
+
+ private void checkEglError() {
+ int error = mEgl.eglGetError();
+ if (error != EGL_SUCCESS) {
+ Log.w(GL_LOG_TAG, "EGL error = " + GLUtils.getEGLErrorString(error));
+ }
+ }
+
+ private void checkGlError() {
+ int error = glGetError();
+ if (error != GL_NO_ERROR) {
+ Log.w(GL_LOG_TAG, "GL error = 0x" + Integer.toHexString(error), new Throwable());
+ }
+ }
+
+ private void finishGL() {
+ mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ mEgl.eglDestroySurface(mEglDisplay, mEglSurface);
+ mEgl.eglDestroyContext(mEglDisplay, mEglContext);
+ }
+
+ private boolean initGL(SurfaceHolder surfaceHolder) {
+ mEgl = (EGL10) EGLContext.getEGL();
+
+ mEglDisplay = mEgl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ if (mEglDisplay == EGL_NO_DISPLAY) {
+ throw new RuntimeException("eglGetDisplay failed " +
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
+ }
+
+ int[] version = new int[2];
+ if (!mEgl.eglInitialize(mEglDisplay, version)) {
+ throw new RuntimeException("eglInitialize failed " +
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
+ }
+
+ mEglConfig = chooseEglConfig();
+ if (mEglConfig == null) {
+ throw new RuntimeException("eglConfig not initialized");
+ }
+
+ mEglContext = createContext(mEgl, mEglDisplay, mEglConfig);
+
+ mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null);
+
+ if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
+ int error = mEgl.eglGetError();
+ if (error == EGL_BAD_NATIVE_WINDOW) {
+ Log.e(GL_LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
+ return false;
+ }
+ throw new RuntimeException("createWindowSurface failed " +
+ GLUtils.getEGLErrorString(error));
+ }
+
+ if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
+ throw new RuntimeException("eglMakeCurrent failed " +
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
+ }
+
+ mGL = mEglContext.getGL();
+
+ return true;
+ }
+
+
+ EGLContext createContext(EGL10 egl, EGLDisplay eglDisplay, EGLConfig eglConfig) {
+ int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
+ return egl.eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, attrib_list);
+ }
+
+ private EGLConfig chooseEglConfig() {
+ int[] configsCount = new int[1];
+ EGLConfig[] configs = new EGLConfig[1];
+ int[] configSpec = getConfig();
+ if (!mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, configsCount)) {
+ throw new IllegalArgumentException("eglChooseConfig failed " +
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
+ } else if (configsCount[0] > 0) {
+ return configs[0];
+ }
+ return null;
+ }
+
+ private int[] getConfig() {
+ return new int[] {
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 0,
+ EGL_DEPTH_SIZE, 0,
+ EGL_STENCIL_SIZE, 0,
+ EGL_NONE
+ };
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index 61da1f5..37c77f6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar;
+import android.app.ActivityManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
@@ -26,6 +27,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog;
import android.util.Log;
+import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -117,6 +119,15 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac
| WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.RGBX_8888);
+
+ // the status bar should be in an overlay if possible
+ final Display defaultDisplay
+ = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
+ .getDefaultDisplay();
+ if (ActivityManager.isHighEndGfx(defaultDisplay)) {
+ lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
+ }
+
lp.gravity = getStatusBarGravity();
lp.setTitle("StatusBar");
lp.packageName = mContext.getPackageName();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index fe9eceb..6e6567b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -112,6 +112,18 @@ public class PhoneStatusBar extends StatusBar {
// will likely move to a resource or other tunable param at some point
private static final int INTRUDER_ALERT_DECAY_MS = 10000;
+ // fling gesture tuning parameters, scaled to display density
+ private float mSelfExpandVelocityPx; // classic value: 2000px/s
+ private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up")
+ private float mFlingExpandMinVelocityPx; // classic value: 200px/s
+ private float mFlingCollapseMinVelocityPx; // classic value: 200px/s
+ private float mCollapseMinDisplayFraction; // classic value: 0.08 (25px/min(320px,480px) on G1)
+ private float mExpandMinDisplayFraction; // classic value: 0.5 (drag open halfway to expand)
+ private float mFlingGestureMaxXVelocityPx; // classic value: 150px/s
+
+ private float mExpandAccelPx; // classic value: 2000px/s/s
+ private float mCollapseAccelPx; // classic value: 2000px/s/s (will be negated to collapse "up")
+
PhoneStatusBarPolicy mIconPolicy;
// These are no longer handled by the policy, because we need custom strategies for them
@@ -475,6 +487,10 @@ public class PhoneStatusBar extends StatusBar {
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
| WindowManager.LayoutParams.FLAG_SLIPPERY,
PixelFormat.OPAQUE);
+ // this will allow the navbar to run in an overlay on devices that support this
+ if (ActivityManager.isHighEndGfx(mDisplay)) {
+ lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
+ }
lp.setTitle("NavigationBar");
switch (rotation) {
@@ -1175,7 +1191,7 @@ public class PhoneStatusBar extends StatusBar {
}
prepareTracking(0, true);
- performFling(0, 2000.0f, true);
+ performFling(0, mSelfExpandVelocityPx, true);
}
public void animateCollapse() {
@@ -1211,7 +1227,7 @@ public class PhoneStatusBar extends StatusBar {
// and doesn't try to re-open the windowshade.
mExpanded = true;
prepareTracking(y, false);
- performFling(y, -2000.0f, true);
+ performFling(y, -mSelfCollapseVelocityPx, true);
}
void performExpand() {
@@ -1327,8 +1343,8 @@ public class PhoneStatusBar extends StatusBar {
mTracking = true;
mVelocityTracker = VelocityTracker.obtain();
if (opening) {
- mAnimAccel = 2000.0f;
- mAnimVel = 200;
+ mAnimAccel = mExpandAccelPx;
+ mAnimVel = mFlingExpandMinVelocityPx;
mAnimY = mStatusBarView.getHeight();
updateExpandedViewPos((int)mAnimY);
mAnimating = true;
@@ -1366,29 +1382,31 @@ public class PhoneStatusBar extends StatusBar {
if (mExpanded) {
if (!always && (
- vel > 200.0f
- || (y > (mDisplayMetrics.heightPixels-25) && vel > -200.0f))) {
+ vel > mFlingCollapseMinVelocityPx
+ || (y > (mDisplayMetrics.heightPixels*(1f-mCollapseMinDisplayFraction)) &&
+ vel > -mFlingExpandMinVelocityPx))) {
// We are expanded, but they didn't move sufficiently to cause
// us to retract. Animate back to the expanded position.
- mAnimAccel = 2000.0f;
+ mAnimAccel = mExpandAccelPx;
if (vel < 0) {
mAnimVel = 0;
}
}
else {
// We are expanded and are now going to animate away.
- mAnimAccel = -2000.0f;
+ mAnimAccel = -mCollapseAccelPx;
if (vel > 0) {
mAnimVel = 0;
}
}
} else {
if (always || (
- vel > 200.0f
- || (y > (mDisplayMetrics.heightPixels/2) && vel > -200.0f))) {
+ vel > mFlingExpandMinVelocityPx
+ || (y > (mDisplayMetrics.heightPixels*(1f-mExpandMinDisplayFraction)) &&
+ vel > -mFlingCollapseMinVelocityPx))) {
// We are collapsed, and they moved enough to allow us to
// expand. Animate in the notifications.
- mAnimAccel = 2000.0f;
+ mAnimAccel = mExpandAccelPx;
if (vel < 0) {
mAnimVel = 0;
}
@@ -1396,7 +1414,7 @@ public class PhoneStatusBar extends StatusBar {
else {
// We are collapsed, but they didn't move sufficiently to cause
// us to retract. Animate back to the collapsed position.
- mAnimAccel = -2000.0f;
+ mAnimAccel = -mCollapseAccelPx;
if (vel > 0) {
mAnimVel = 0;
}
@@ -1476,8 +1494,8 @@ public class PhoneStatusBar extends StatusBar {
if (xVel < 0) {
xVel = -xVel;
}
- if (xVel > 150.0f) {
- xVel = 150.0f; // limit how much we care about the x axis
+ if (xVel > mFlingGestureMaxXVelocityPx) {
+ xVel = mFlingGestureMaxXVelocityPx; // limit how much we care about the x axis
}
float vel = (float)Math.hypot(yVel, xVel);
@@ -1485,6 +1503,14 @@ public class PhoneStatusBar extends StatusBar {
vel = -vel;
}
+ if (CHATTY) {
+ Slog.d(TAG, String.format("gesture: vraw=(%f,%f) vnorm=(%f,%f) vlinear=%f",
+ mVelocityTracker.getXVelocity(),
+ mVelocityTracker.getYVelocity(),
+ xVel, yVel,
+ vel));
+ }
+
performFling((int)event.getRawY(), vel, false);
}
@@ -2129,6 +2155,19 @@ public class PhoneStatusBar extends StatusBar {
mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
+ mSelfExpandVelocityPx = res.getDimension(R.dimen.self_expand_velocity);
+ mSelfCollapseVelocityPx = res.getDimension(R.dimen.self_collapse_velocity);
+ mFlingExpandMinVelocityPx = res.getDimension(R.dimen.fling_expand_min_velocity);
+ mFlingCollapseMinVelocityPx = res.getDimension(R.dimen.fling_collapse_min_velocity);
+
+ mCollapseMinDisplayFraction = res.getFraction(R.dimen.collapse_min_display_fraction, 1, 1);
+ mExpandMinDisplayFraction = res.getFraction(R.dimen.expand_min_display_fraction, 1, 1);
+
+ mExpandAccelPx = res.getDimension(R.dimen.expand_accel);
+ mCollapseAccelPx = res.getDimension(R.dimen.collapse_accel);
+
+ mFlingGestureMaxXVelocityPx = res.getDimension(R.dimen.fling_gesture_max_x_velocity);
+
if (false) Slog.v(TAG, "updateResources");
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 322a8c8..ee270f9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -161,7 +161,7 @@ public class PhoneStatusBarPolicy {
mService.setIconVisibility("bluetooth", mBluetoothEnabled);
// Alarm clock
- mService.setIcon("alarm_clock", R.drawable.stat_notify_alarm, 0, null);
+ mService.setIcon("alarm_clock", R.drawable.stat_sys_alarm, 0, null);
mService.setIconVisibility("alarm_clock", false);
// Sync state
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index a171514..d3f9525 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -91,7 +91,7 @@ public final class DateView extends TextView {
final Context context = getContext();
Date now = new Date();
CharSequence dow = DateFormat.format("EEEE", now);
- CharSequence date = DateFormat.getMediumDateFormat(getContext()).format(now);
+ CharSequence date = DateFormat.getLongDateFormat(context).format(now);
setText(context.getString(R.string.status_bar_date_formatter, dow, date));
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index 6368d1d..840087c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -60,6 +60,7 @@ public class KeyButtonView extends ImageView {
Drawable mGlowBG;
float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
boolean mSupportsLongpress = true;
+ RectF mRect = new RectF(0f,0f,0f,0f);
Runnable mCheckLongPress = new Runnable() {
public void run() {
@@ -120,8 +121,9 @@ public class KeyButtonView extends ImageView {
mGlowBG.setAlpha((int)(mGlowAlpha * 255));
mGlowBG.draw(canvas);
canvas.restore();
-
- canvas.saveLayerAlpha(null, (int)(mDrawingAlpha * 255), Canvas.ALL_SAVE_FLAG);
+ mRect.right = w;
+ mRect.bottom = h;
+ canvas.saveLayerAlpha(mRect, (int)(mDrawingAlpha * 255), Canvas.ALL_SAVE_FLAG);
}
super.onDraw(canvas);
if (mGlowBG != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 16db1d7..60dfdac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -225,7 +225,7 @@ public class NetworkController extends BroadcastReceiver {
public void addSignalCluster(SignalCluster cluster) {
mSignalClusters.add(cluster);
cluster.setWifiIndicators(
- mWifiEnabled,
+ mWifiConnected, // only show wifi in the cluster if connected
mWifiIconId,
mWifiActivityIconId);
cluster.setMobileDataIndicators(
@@ -862,7 +862,7 @@ public class NetworkController extends BroadcastReceiver {
// NB: the mLast*s will be updated later
for (SignalCluster cluster : mSignalClusters) {
cluster.setWifiIndicators(
- mWifiEnabled,
+ mWifiConnected, // only show wifi in the cluster if connected
mWifiIconId,
mWifiActivityIconId);
cluster.setMobileDataIndicators(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index dd59667..2ab667d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -879,12 +879,11 @@ public class TabletStatusBar extends StatusBar implements
removeNotificationViews(key);
addNotificationViews(key, notification);
}
- // fullScreenIntent doesn't happen on updates. You need to clear & repost a new
- // notification.
- final boolean immersive = isImmersive();
- if (false && immersive) {
- // TODO: immersive mode
- } else {
+
+ // Restart the ticker if it's still running
+ if (notification.notification.tickerText != null
+ && !TextUtils.equals(notification.notification.tickerText,
+ oldEntry.notification.notification.tickerText)) {
tick(key, notification, false);
}
diff --git a/packages/VpnDialogs/res/values-ar/strings.xml b/packages/VpnDialogs/res/values-ar/strings.xml
index 2d54617..8b0d2a2 100644
--- a/packages/VpnDialogs/res/values-ar/strings.xml
+++ b/packages/VpnDialogs/res/values-ar/strings.xml
@@ -19,7 +19,7 @@
<string name="prompt" msgid="8359175999006833462">"يحاول <xliff:g id="APP">%s</xliff:g> إنشاء اتصال شبكة ظاهرية خاصة (VPN)."</string>
<string name="warning" msgid="5470743576660160079">"تعد المتابعة بمثابة إذن للتطبيق باعتراض جميع حركات مرور البيانات عبر الشبكة. "<b>"\"لا\" توافق إلا إذا كنت تثق في التطبيق."</b>" وإلا فقد تتعرض بياناتك لخطورة الاختراق بواسطة برامج ضارة."</string>
<string name="accept" msgid="2889226408765810173">"أثق في هذا التطبيق."</string>
- <string name="legacy_title" msgid="192936250066580964">"الشبكة الظاهرية الخاصة (VPN) متصلة"</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN متصلة"</string>
<string name="configure" msgid="4905518375574791375">"تهيئة"</string>
<string name="disconnect" msgid="971412338304200056">"قطع الاتصال"</string>
<string name="session" msgid="6470628549473641030">"الجلسة"</string>
diff --git a/packages/VpnDialogs/res/values-fr/strings.xml b/packages/VpnDialogs/res/values-fr/strings.xml
index 922a004..1ea0c66 100644
--- a/packages/VpnDialogs/res/values-fr/strings.xml
+++ b/packages/VpnDialogs/res/values-fr/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="prompt" msgid="8359175999006833462">"L\'application <xliff:g id="APP">%s</xliff:g> tente de créer une connexion VPN."</string>
+ <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> tente de créer une connexion VPN."</string>
<string name="warning" msgid="5470743576660160079">"En continuant, vous autorisez l\'application à intercepter l\'ensemble du trafic réseau. "<b>"N\'acceptez PAS, sauf si vous avez confiance en l\'application."</b>"Sinon, vos données risquent d\'être piratées par un logiciel malveillant."</string>
<string name="accept" msgid="2889226408765810173">"J\'ai confiance en cette application."</string>
<string name="legacy_title" msgid="192936250066580964">"VPN connecté"</string>
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 2d90727..5c85903 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -17,6 +17,7 @@
package com.android.internal.policy.impl;
import com.android.internal.R;
+import com.android.internal.policy.impl.LockPatternKeyguardView.UnlockMode;
import com.android.internal.telephony.IccCard;
import com.android.internal.widget.LockPatternUtils;
@@ -31,6 +32,7 @@ import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
@@ -44,8 +46,10 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
+import android.view.accessibility.AccessibilityManager;
import java.io.IOException;
@@ -82,6 +86,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
private boolean mScreenOn = false;
private boolean mEnableFallback = false; // assume no fallback UI until we know better
+ private boolean mShowLockBeforeUnlock = false;
+
/**
* The current {@link KeyguardScreen} will use this to communicate back to us.
*/
@@ -146,7 +152,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
* Keeps track of what mode the current unlock screen is (cached from most recent computation in
* {@link #getUnlockMode}).
*/
- private UnlockMode mUnlockScreenMode;
+ private UnlockMode mUnlockScreenMode = UnlockMode.Unknown;
private boolean mForgotPattern;
@@ -162,8 +168,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
*/
private final LockPatternUtils mLockPatternUtils;
- private UnlockMode mCurrentUnlockMode = UnlockMode.Unknown;
-
/**
* The current configuration.
*/
@@ -171,7 +175,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
private Runnable mRecreateRunnable = new Runnable() {
public void run() {
- recreateScreens();
+ updateScreen(mMode, false);
}
};
@@ -202,16 +206,11 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
mConfiguration = context.getResources().getConfiguration();
mEnableFallback = false;
-
- mRequiresSim =
- TextUtils.isEmpty(SystemProperties.get("keyguard.no_require_sim"));
-
+ mRequiresSim = TextUtils.isEmpty(SystemProperties.get("keyguard.no_require_sim"));
mUpdateMonitor = updateMonitor;
mLockPatternUtils = lockPatternUtils;
mWindowController = controller;
- mMode = getInitialMode();
-
mKeyguardScreenCallback = new KeyguardScreenCallback() {
public void goToLockScreen() {
@@ -222,7 +221,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
mIsVerifyUnlockOnly = false;
getCallback().keyguardDone(false);
} else {
- updateScreen(Mode.LockScreen);
+ updateScreen(Mode.LockScreen, false);
}
}
@@ -238,14 +237,14 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
if (!isSecure()) {
getCallback().keyguardDone(true);
} else {
- updateScreen(Mode.UnlockScreen);
+ updateScreen(Mode.UnlockScreen, false);
}
}
public void forgotPattern(boolean isForgotten) {
if (mEnableFallback) {
mForgotPattern = isForgotten;
- updateScreen(Mode.UnlockScreen);
+ updateScreen(Mode.UnlockScreen, false);
}
}
@@ -258,7 +257,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
public void recreateMe(Configuration config) {
- mConfiguration = config;
removeCallbacks(mRecreateRunnable);
post(mRecreateRunnable);
}
@@ -328,7 +326,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
showAlmostAtAccountLoginDialog();
} else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
mLockPatternUtils.setPermanentlyLocked(true);
- updateScreen(mMode);
+ updateScreen(mMode, false);
}
} else {
final boolean showTimeout =
@@ -356,21 +354,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
setFocusableInTouchMode(true);
setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
- // create both the lock and unlock screen so they are quickly available
- // when the screen turns on
- mLockScreen = createLockScreen();
- addView(mLockScreen);
- final UnlockMode unlockMode = getUnlockMode();
- if (DEBUG) Log.d(TAG,
- "LockPatternKeyguardView ctor: about to createUnlockScreenFor; mEnableFallback="
- + mEnableFallback);
- mUnlockScreen = createUnlockScreenFor(unlockMode);
- mUnlockScreenMode = unlockMode;
-
+ updateScreen(getInitialMode(), false);
maybeEnableFallback(context);
-
- addView(mUnlockScreen);
- updateScreen(mMode);
}
private class AccountAnalyzer implements AccountManagerCallback<Bundle> {
@@ -447,7 +432,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
public void reset() {
mIsVerifyUnlockOnly = false;
mForgotPattern = false;
- updateScreen(getInitialMode());
+ updateScreen(getInitialMode(), false);
}
@Override
@@ -455,7 +440,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
mScreenOn = false;
mForgotPattern = false;
if (mMode == Mode.LockScreen) {
- ((KeyguardScreen) mLockScreen).onPause();
+ ((KeyguardScreen) mLockScreen).onPause();
} else {
((KeyguardScreen) mUnlockScreen).onPause();
}
@@ -465,44 +450,40 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
public void onScreenTurnedOn() {
mScreenOn = true;
if (mMode == Mode.LockScreen) {
- ((KeyguardScreen) mLockScreen).onResume();
+ ((KeyguardScreen) mLockScreen).onResume();
} else {
((KeyguardScreen) mUnlockScreen).onResume();
}
}
private void recreateLockScreen() {
- if (mLockScreen.getVisibility() == View.VISIBLE) {
- ((KeyguardScreen) mLockScreen).onPause();
+ if (mLockScreen != null) {
+ if (mLockScreen.getVisibility() == View.VISIBLE) {
+ ((KeyguardScreen) mLockScreen).onPause();
+ }
+ ((KeyguardScreen) mLockScreen).cleanUp();
+ removeView(mLockScreen);
}
- ((KeyguardScreen) mLockScreen).cleanUp();
- removeView(mLockScreen);
mLockScreen = createLockScreen();
mLockScreen.setVisibility(View.INVISIBLE);
addView(mLockScreen);
}
- private void recreateUnlockScreen() {
- if (mUnlockScreen.getVisibility() == View.VISIBLE) {
- ((KeyguardScreen) mUnlockScreen).onPause();
+ private void recreateUnlockScreen(UnlockMode unlockMode) {
+ if (mUnlockScreen != null) {
+ if (mUnlockScreen.getVisibility() == View.VISIBLE) {
+ ((KeyguardScreen) mUnlockScreen).onPause();
+ }
+ ((KeyguardScreen) mUnlockScreen).cleanUp();
+ removeView(mUnlockScreen);
}
- ((KeyguardScreen) mUnlockScreen).cleanUp();
- removeView(mUnlockScreen);
- final UnlockMode unlockMode = getUnlockMode();
mUnlockScreen = createUnlockScreenFor(unlockMode);
mUnlockScreen.setVisibility(View.INVISIBLE);
- mUnlockScreenMode = unlockMode;
addView(mUnlockScreen);
}
- private void recreateScreens() {
- recreateLockScreen();
- recreateUnlockScreen();
- updateScreen(mMode);
- }
-
@Override
protected void onDetachedFromWindow() {
removeCallbacks(mRecreateRunnable);
@@ -510,12 +491,32 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
@Override
+ protected boolean dispatchHoverEvent(MotionEvent event) {
+ // Do not let the screen to get locked while the user is disabled and touch
+ // exploring. A blind user will need significantly more time to find and
+ // interact with the lock screen views.
+ AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(mContext);
+ if (accessibilityManager.isEnabled() && accessibilityManager.isTouchExplorationEnabled()) {
+ getCallback().pokeWakelock();
+ }
+ return super.dispatchHoverEvent(event);
+ }
+
+ protected void onConfigurationChanged(Configuration newConfig) {
+ Resources resources = getResources();
+ mShowLockBeforeUnlock = resources.getBoolean(R.bool.config_enableLockBeforeUnlockScreen);
+ mConfiguration = newConfig;
+ if (DEBUG_CONFIGURATION) Log.v(TAG, "**** re-creating lock screen since config changed");
+ updateScreen(mMode, true /* force */);
+ }
+
+ @Override
public void wakeWhenReadyTq(int keyCode) {
if (DEBUG) Log.d(TAG, "onWakeKey");
if (keyCode == KeyEvent.KEYCODE_MENU && isSecure() && (mMode == Mode.LockScreen)
&& (mUpdateMonitor.getSimState() != IccCard.State.PUK_REQUIRED)) {
if (DEBUG) Log.d(TAG, "switching screens to unlock screen because wake key was MENU");
- updateScreen(Mode.UnlockScreen);
+ updateScreen(Mode.UnlockScreen, false);
getCallback().pokeWakelock();
} else {
if (DEBUG) Log.d(TAG, "poking wake lock immediately");
@@ -528,24 +529,31 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
if (!isSecure()) {
// non-secure keyguard screens are successfull by default
getCallback().keyguardDone(true);
- } else if (mUnlockScreenMode != UnlockMode.Pattern) {
- // can only verify unlock when in pattern mode
+ } else if (mUnlockScreenMode != UnlockMode.Pattern
+ && mUnlockScreenMode != UnlockMode.Password) {
+ // can only verify unlock when in pattern/password mode
getCallback().keyguardDone(false);
} else {
// otherwise, go to the unlock screen, see if they can verify it
mIsVerifyUnlockOnly = true;
- updateScreen(Mode.UnlockScreen);
+ updateScreen(Mode.UnlockScreen, false);
}
}
@Override
public void cleanUp() {
- ((KeyguardScreen) mLockScreen).onPause();
- ((KeyguardScreen) mLockScreen).cleanUp();
- this.removeView(mLockScreen);
- ((KeyguardScreen) mUnlockScreen).onPause();
- ((KeyguardScreen) mUnlockScreen).cleanUp();
- this.removeView(mUnlockScreen);
+ if (mLockScreen != null) {
+ ((KeyguardScreen) mLockScreen).onPause();
+ ((KeyguardScreen) mLockScreen).cleanUp();
+ this.removeView(mLockScreen);
+ mLockScreen = null;
+ }
+ if (mUnlockScreen != null) {
+ ((KeyguardScreen) mUnlockScreen).onPause();
+ ((KeyguardScreen) mUnlockScreen).cleanUp();
+ this.removeView(mUnlockScreen);
+ mUnlockScreen = null;
+ }
}
private boolean isSecure() {
@@ -573,19 +581,30 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
return secure;
}
- private void updateScreen(final Mode mode) {
+ private void updateScreen(Mode mode, boolean force) {
if (DEBUG_CONFIGURATION) Log.v(TAG, "**** UPDATE SCREEN: mode=" + mode
+ " last mode=" + mMode, new RuntimeException());
mMode = mode;
+ // Re-create the lock screen if necessary
+ if (mode == Mode.LockScreen || mShowLockBeforeUnlock) {
+ if (force || mLockScreen == null) {
+ recreateLockScreen();
+ }
+ }
+
// Re-create the unlock screen if necessary. This is primarily required to properly handle
// SIM state changes. This typically happens when this method is called by reset()
- if (mode == Mode.UnlockScreen && mCurrentUnlockMode != getUnlockMode()) {
- recreateUnlockScreen();
+ if (mode == Mode.UnlockScreen) {
+ final UnlockMode unlockMode = getUnlockMode();
+ if (force || mUnlockScreen == null || unlockMode != mUnlockScreenMode) {
+ recreateUnlockScreen(unlockMode);
+ }
}
+ // visibleScreen should never be null
final View goneScreen = (mode == Mode.LockScreen) ? mUnlockScreen : mLockScreen;
final View visibleScreen = (mode == Mode.LockScreen) ? mLockScreen : mUnlockScreen;
@@ -599,7 +618,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
if (mScreenOn) {
- if (goneScreen.getVisibility() == View.VISIBLE) {
+ if (goneScreen != null && goneScreen.getVisibility() == View.VISIBLE) {
((KeyguardScreen) goneScreen).onPause();
}
if (visibleScreen.getVisibility() != View.VISIBLE) {
@@ -607,7 +626,9 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
}
- goneScreen.setVisibility(View.GONE);
+ if (goneScreen != null) {
+ goneScreen.setVisibility(View.GONE);
+ }
visibleScreen.setVisibility(View.VISIBLE);
requestLayout();
@@ -677,7 +698,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
// regular pattern unlock UI, regardless of the value of
// mUnlockScreenMode or whether or not we're in the
// "permanently locked" state.)
- unlockView = createUnlockScreenFor(UnlockMode.Pattern);
+ return createUnlockScreenFor(UnlockMode.Pattern);
}
} else if (unlockMode == UnlockMode.Password) {
unlockView = new PasswordUnlockScreen(
@@ -689,7 +710,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
} else {
throw new IllegalArgumentException("unknown unlock mode " + unlockMode);
}
- mCurrentUnlockMode = unlockMode;
+ mUnlockScreenMode = unlockMode;
return unlockView;
}
@@ -704,16 +725,10 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
!mLockPatternUtils.isPukUnlockScreenEnable())) {
return Mode.LockScreen;
} else {
- // Show LockScreen first for any screen other than Pattern unlock.
- final boolean usingLockPattern = mLockPatternUtils.getKeyguardStoredPasswordQuality()
- == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
-
- boolean showLockBeforeUnlock = getResources()
- .getBoolean(R.bool.config_enableLockBeforeUnlockScreen);
- if (isSecure() && (usingLockPattern || !showLockBeforeUnlock)) {
- return Mode.UnlockScreen;
- } else {
+ if (!isSecure() || mShowLockBeforeUnlock) {
return Mode.LockScreen;
+ } else {
+ return Mode.UnlockScreen;
}
}
}
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index ee0a6e9..ce3bc74 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -165,7 +165,7 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen
View switchImeButton = findViewById(R.id.switch_ime_button);
final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
- if (switchImeButton != null && hasMultipleEnabledIMEsOrSubtypes(imm, false)) {
+ if (mIsAlpha && switchImeButton != null && hasMultipleEnabledIMEsOrSubtypes(imm, false)) {
switchImeButton.setVisibility(View.VISIBLE);
switchImeButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index e2d6c5f..b69a7c2 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -888,7 +888,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// Mark as handled
st.isHandled = true;
- if ((flags & Menu.FLAG_PERFORM_NO_CLOSE) == 0) {
+ // Only close down the menu if we don't have an action bar keeping it open.
+ if ((flags & Menu.FLAG_PERFORM_NO_CLOSE) == 0 && mActionBar == null) {
closePanel(st, true);
}
}
@@ -909,7 +910,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
boolean res = st.menu.performIdentifierAction(id, flags);
- closePanel(st, true);
+ // Only close down the menu if we don't have an action bar keeping it open.
+ if (mActionBar == null) {
+ closePanel(st, true);
+ }
return res;
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index be129a8..dfd1b00 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -124,6 +124,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
import android.view.WindowManagerImpl;
import android.view.WindowManagerPolicy;
import android.view.KeyCharacterMap.FallbackAction;
+import android.view.accessibility.AccessibilityEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.media.IAudioService;
@@ -3104,7 +3105,29 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mHandler.post(new Runnable() {
@Override public void run() {
if (mBootMsgDialog == null) {
- mBootMsgDialog = new ProgressDialog(mContext);
+ mBootMsgDialog = new ProgressDialog(mContext) {
+ // This dialog will consume all events coming in to
+ // it, to avoid it trying to do things too early in boot.
+ @Override public boolean dispatchKeyEvent(KeyEvent event) {
+ return true;
+ }
+ @Override public boolean dispatchKeyShortcutEvent(KeyEvent event) {
+ return true;
+ }
+ @Override public boolean dispatchTouchEvent(MotionEvent ev) {
+ return true;
+ }
+ @Override public boolean dispatchTrackballEvent(MotionEvent ev) {
+ return true;
+ }
+ @Override public boolean dispatchGenericMotionEvent(MotionEvent ev) {
+ return true;
+ }
+ @Override public boolean dispatchPopulateAccessibilityEvent(
+ AccessibilityEvent event) {
+ return true;
+ }
+ };
mBootMsgDialog.setTitle(R.string.android_upgrading_title);
mBootMsgDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mBootMsgDialog.setIndeterminate(true);
diff --git a/preloaded-classes b/preloaded-classes
index 8136f8e..31d49ce 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -7,6 +7,9 @@ android.accounts.Account
android.accounts.Account$1
android.accounts.AccountManager
android.accounts.AccountManager$12
+android.accounts.AccountManager$AmsTask
+android.accounts.AccountManager$AmsTask$1
+android.accounts.AccountManager$AmsTask$Response
android.accounts.AccountManagerFuture
android.accounts.IAccountManager
android.accounts.IAccountManager$Stub
@@ -15,10 +18,17 @@ android.accounts.IAccountManagerResponse
android.accounts.IAccountManagerResponse$Stub
android.animation.Animator
android.animation.Animator$AnimatorListener
+android.animation.AnimatorListenerAdapter
android.animation.FloatEvaluator
+android.animation.FloatKeyframeSet
android.animation.IntEvaluator
+android.animation.Keyframe
+android.animation.Keyframe$FloatKeyframe
+android.animation.KeyframeSet
android.animation.LayoutTransition$TransitionListener
+android.animation.ObjectAnimator
android.animation.PropertyValuesHolder
+android.animation.PropertyValuesHolder$FloatPropertyValuesHolder
android.animation.TimeInterpolator
android.animation.TypeEvaluator
android.animation.ValueAnimator
@@ -27,10 +37,10 @@ android.animation.ValueAnimator$2
android.animation.ValueAnimator$3
android.animation.ValueAnimator$4
android.animation.ValueAnimator$5
+android.animation.ValueAnimator$AnimationHandler
android.app.ActionBar
android.app.ActionBar$LayoutParams
android.app.Activity
-android.app.Activity$NonConfigurationInstances
android.app.ActivityManager
android.app.ActivityManagerNative
android.app.ActivityManagerNative$1
@@ -54,7 +64,6 @@ android.app.ActivityThread$ResourcesKey
android.app.ActivityThread$ServiceArgsData
android.app.ActivityThread$StopInfo
android.app.AlertDialog
-android.app.AlertDialog$Builder
android.app.AppGlobals
android.app.Application
android.app.ApplicationErrorReport$CrashInfo
@@ -62,7 +71,6 @@ android.app.ApplicationLoaders
android.app.ApplicationPackageManager
android.app.ApplicationPackageManager$ResourceName
android.app.ApplicationThreadNative
-android.app.BackStackRecord
android.app.ContextImpl
android.app.ContextImpl$1
android.app.ContextImpl$10
@@ -87,6 +95,10 @@ android.app.ContextImpl$27
android.app.ContextImpl$28
android.app.ContextImpl$29
android.app.ContextImpl$3
+android.app.ContextImpl$30
+android.app.ContextImpl$31
+android.app.ContextImpl$32
+android.app.ContextImpl$33
android.app.ContextImpl$4
android.app.ContextImpl$5
android.app.ContextImpl$6
@@ -99,12 +111,9 @@ android.app.ContextImpl$StaticServiceFetcher
android.app.Dialog
android.app.Dialog$1
android.app.Dialog$ListenersHandler
-android.app.Fragment
android.app.FragmentManager
-android.app.FragmentManager$BackStackEntry
android.app.FragmentManagerImpl
android.app.FragmentManagerImpl$1
-android.app.FragmentTransaction
android.app.IActivityManager
android.app.IActivityManager$ContentProviderHolder
android.app.IActivityManager$ContentProviderHolder$1
@@ -114,15 +123,29 @@ android.app.IAlarmManager$Stub$Proxy
android.app.IApplicationThread
android.app.IInstrumentationWatcher
android.app.IInstrumentationWatcher$Stub
+android.app.INotificationManager
+android.app.INotificationManager$Stub
+android.app.INotificationManager$Stub$Proxy
+android.app.ISearchManager
+android.app.ISearchManager$Stub
+android.app.IServiceConnection
+android.app.IServiceConnection$Stub
android.app.Instrumentation
android.app.IntentReceiverLeaked
-android.app.ListActivity
+android.app.IntentService
+android.app.IntentService$ServiceHandler
android.app.LoadedApk
android.app.LoadedApk$ReceiverDispatcher
android.app.LoadedApk$ReceiverDispatcher$Args
android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
+android.app.LoadedApk$ServiceDispatcher
+android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
+android.app.LoadedApk$ServiceDispatcher$DeathMonitor
+android.app.LoadedApk$ServiceDispatcher$InnerConnection
+android.app.LoadedApk$ServiceDispatcher$RunConnection
android.app.LoadedApk$WarningContextClassLoader
android.app.NativeActivity
+android.app.NotificationManager
android.app.PendingIntent
android.app.PendingIntent$1
android.app.QueuedWork
@@ -130,6 +153,7 @@ android.app.ReceiverRestrictedContext
android.app.ResultInfo
android.app.ResultInfo$1
android.app.Service
+android.app.ServiceConnectionLeaked
android.app.SharedPreferencesImpl
android.app.SharedPreferencesImpl$1
android.app.SharedPreferencesImpl$2
@@ -143,6 +167,8 @@ android.app.backup.BackupDataOutput
android.app.backup.BackupHelperDispatcher
android.app.backup.BackupHelperDispatcher$Header
android.app.backup.FileBackupHelperBase
+android.app.backup.FullBackup
+android.appwidget.AppWidgetManager
android.bluetooth.BluetoothAudioGateway
android.bluetooth.BluetoothSocket
android.bluetooth.HeadsetBase
@@ -153,6 +179,7 @@ android.bluetooth.IBluetoothA2dp$Stub
android.content.BroadcastReceiver
android.content.BroadcastReceiver$PendingResult
android.content.ComponentCallbacks
+android.content.ComponentCallbacks2
android.content.ComponentName
android.content.ComponentName$1
android.content.ContentProvider
@@ -161,6 +188,7 @@ android.content.ContentProviderNative
android.content.ContentProviderProxy
android.content.ContentResolver
android.content.ContentResolver$CursorWrapperInner
+android.content.ContentResolver$ParcelFileDescriptorInner
android.content.ContentUris
android.content.ContentValues
android.content.ContentValues$1
@@ -226,6 +254,7 @@ android.content.res.ColorStateList
android.content.res.ColorStateList$1
android.content.res.CompatibilityInfo
android.content.res.CompatibilityInfo$1
+android.content.res.CompatibilityInfo$2
android.content.res.Configuration
android.content.res.Configuration$1
android.content.res.ObbInfo
@@ -235,6 +264,7 @@ android.content.res.Resources
android.content.res.Resources$1
android.content.res.Resources$Theme
android.content.res.StringBlock
+android.content.res.StringBlock$StyleIDs
android.content.res.TypedArray
android.content.res.XmlBlock
android.content.res.XmlBlock$Parser
@@ -252,6 +282,8 @@ android.database.ContentObserver$NotificationRunnable
android.database.ContentObserver$Transport
android.database.CrossProcessCursor
android.database.Cursor
+android.database.CursorToBulkCursorAdaptor
+android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
android.database.CursorWindow
android.database.CursorWindow$1
android.database.CursorWrapper
@@ -263,6 +295,8 @@ android.database.DefaultDatabaseErrorHandler
android.database.IBulkCursor
android.database.IContentObserver
android.database.IContentObserver$Stub
+android.database.IContentObserver$Stub$Proxy
+android.database.MatrixCursor
android.database.Observable
android.database.sqlite.DatabaseObjectNotClosedException
android.database.sqlite.SQLiteClosable
@@ -272,8 +306,8 @@ android.database.sqlite.SQLiteCursorDriver
android.database.sqlite.SQLiteDatabase
android.database.sqlite.SQLiteDatabase$1
android.database.sqlite.SQLiteDatabase$CustomFunction
+android.database.sqlite.SQLiteDatabase$DatabaseReentrantLock
android.database.sqlite.SQLiteDebug
-android.database.sqlite.SQLiteDebug$DbStats
android.database.sqlite.SQLiteDebug$PagerStats
android.database.sqlite.SQLiteDirectCursorDriver
android.database.sqlite.SQLiteOpenHelper
@@ -342,7 +376,9 @@ android.graphics.Picture
android.graphics.PixelFormat
android.graphics.PixelXorXfermode
android.graphics.Point
+android.graphics.Point$1
android.graphics.PointF
+android.graphics.PointF$1
android.graphics.PorterDuff$Mode
android.graphics.PorterDuffColorFilter
android.graphics.PorterDuffXfermode
@@ -362,6 +398,7 @@ android.graphics.SumPathEffect
android.graphics.SurfaceTexture
android.graphics.SweepGradient
android.graphics.TableMaskFilter
+android.graphics.TemporaryBuffer
android.graphics.Typeface
android.graphics.Xfermode
android.graphics.YuvImage
@@ -378,6 +415,7 @@ android.graphics.drawable.ColorDrawable
android.graphics.drawable.ColorDrawable$ColorState
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable$Callback
+android.graphics.drawable.Drawable$Callback2
android.graphics.drawable.Drawable$ConstantState
android.graphics.drawable.DrawableContainer
android.graphics.drawable.DrawableContainer$1
@@ -392,13 +430,25 @@ android.graphics.drawable.NinePatchDrawable
android.graphics.drawable.NinePatchDrawable$NinePatchState
android.graphics.drawable.RotateDrawable
android.graphics.drawable.RotateDrawable$RotateState
+android.graphics.drawable.ScaleDrawable
+android.graphics.drawable.ScaleDrawable$ScaleState
+android.graphics.drawable.ShapeDrawable
+android.graphics.drawable.ShapeDrawable$ShapeState
android.graphics.drawable.StateListDrawable
android.graphics.drawable.StateListDrawable$StateListState
android.graphics.drawable.TransitionDrawable
android.graphics.drawable.TransitionDrawable$TransitionState
+android.graphics.drawable.shapes.RectShape
+android.graphics.drawable.shapes.RoundRectShape
+android.graphics.drawable.shapes.Shape
android.hardware.Camera
android.hardware.Camera$CameraInfo
+android.hardware.Camera$Face
+android.hardware.Camera$Parameters
android.hardware.SensorManager
+android.hardware.usb.UsbDevice
+android.hardware.usb.UsbDeviceConnection
+android.hardware.usb.UsbRequest
android.inputmethodservice.ExtractEditText
android.location.GpsSatellite
android.location.GpsStatus
@@ -407,26 +457,40 @@ android.location.ILocationManager
android.location.ILocationManager$Stub
android.location.ILocationManager$Stub$Proxy
android.location.Location
+android.location.Location$1
+android.location.LocationListener
android.location.LocationManager
android.media.AudioFormat
android.media.AudioManager
android.media.AudioManager$1
+android.media.AudioManager$2
android.media.AudioManager$FocusEventHandlerDelegate
android.media.AudioManager$FocusEventHandlerDelegate$1
android.media.AudioRecord
android.media.AudioSystem
android.media.AudioTrack
-android.media.CamcorderProfile
+android.media.CameraProfile
android.media.DecoderCapabilities
android.media.IAudioFocusDispatcher
android.media.IAudioFocusDispatcher$Stub
+android.media.IAudioService
+android.media.IAudioService$Stub
+android.media.IAudioService$Stub$Proxy
+android.media.IRemoteControlClientDispatcher
+android.media.IRemoteControlClientDispatcher$Stub
android.media.JetPlayer
+android.media.MediaFile
android.media.MediaPlayer
+android.media.MediaPlayer$OnBufferingUpdateListener
+android.media.MediaPlayer$OnCompletionListener
+android.media.MediaPlayer$OnErrorListener
+android.media.MediaPlayer$OnInfoListener
+android.media.MediaPlayer$OnPreparedListener
+android.media.MediaScanner
android.media.ToneGenerator
android.net.ConnectivityManager
android.net.Credentials
-android.net.DhcpInfo
-android.net.DhcpInfo$1
+android.net.DhcpInfoInternal
android.net.IConnectivityManager
android.net.IConnectivityManager$Stub
android.net.IConnectivityManager$Stub$Proxy
@@ -441,8 +505,9 @@ android.net.NetworkInfo$DetailedState
android.net.NetworkInfo$State
android.net.NetworkUtils
android.net.Proxy
-android.net.ProxyProperties
-android.net.ProxyProperties$1
+android.net.SSLCertificateSocketFactory
+android.net.SSLCertificateSocketFactory$1
+android.net.SSLSessionCache
android.net.TrafficStats
android.net.Uri
android.net.Uri$1
@@ -450,12 +515,18 @@ android.net.Uri$AbstractHierarchicalUri
android.net.Uri$AbstractPart
android.net.Uri$Builder
android.net.Uri$HierarchicalUri
+android.net.Uri$OpaqueUri
android.net.Uri$Part
android.net.Uri$Part$EmptyPart
android.net.Uri$PathPart
android.net.Uri$PathSegments
android.net.Uri$PathSegmentsBuilder
android.net.Uri$StringUri
+android.net.WebAddress
+android.net.http.AndroidHttpClient
+android.net.http.AndroidHttpClient$1
+android.net.http.AndroidHttpClient$2
+android.net.http.AndroidHttpClient$CurlLogger
android.net.wifi.WifiNative
android.nfc.NdefMessage
android.nfc.NdefRecord
@@ -477,6 +548,7 @@ android.os.AsyncTask$SerialExecutor
android.os.AsyncTask$SerialExecutor$1
android.os.AsyncTask$Status
android.os.AsyncTask$WorkerRunnable
+android.os.BatteryStats
android.os.Binder
android.os.BinderProxy
android.os.Build
@@ -510,6 +582,7 @@ android.os.Parcel$1
android.os.ParcelFileDescriptor
android.os.ParcelFileDescriptor$1
android.os.Parcelable
+android.os.Parcelable$ClassLoaderCreator
android.os.Parcelable$Creator
android.os.PatternMatcher
android.os.PatternMatcher$1
@@ -535,6 +608,7 @@ android.os.StrictMode$AndroidBlockGuardPolicy
android.os.StrictMode$AndroidBlockGuardPolicy$1
android.os.StrictMode$AndroidCloseGuardReporter
android.os.StrictMode$InstanceCountViolation
+android.os.StrictMode$InstanceTracker
android.os.StrictMode$LogStackTrace
android.os.StrictMode$Span
android.os.StrictMode$StrictModeDiskReadViolation
@@ -548,7 +622,11 @@ android.os.StrictMode$VmPolicy$Builder
android.os.SystemClock
android.os.SystemProperties
android.os.UEventObserver
-android.pim.EventRecurrence
+android.os.Vibrator
+android.os.storage.IMountService
+android.os.storage.IMountService$Stub
+android.os.storage.IMountService$Stub$Proxy
+android.preference.PreferenceActivity
android.preference.PreferenceManager
android.provider.BaseColumns
android.provider.Settings$NameValueCache
@@ -559,6 +637,7 @@ android.renderscript.RenderScript
android.server.BluetoothA2dpService
android.server.BluetoothEventLoop
android.server.BluetoothService
+android.telephony.PhoneNumberUtils
android.telephony.TelephonyManager
android.text.AndroidBidi
android.text.AndroidCharacter
@@ -585,6 +664,7 @@ android.text.PackedObjectVector
android.text.ParcelableSpan
android.text.Selection
android.text.Selection$END
+android.text.Selection$PositionIterator
android.text.Selection$START
android.text.SpanWatcher
android.text.Spannable
@@ -595,6 +675,16 @@ android.text.SpannableStringInternal
android.text.Spanned
android.text.SpannedString
android.text.StaticLayout
+android.text.TextDirectionHeuristic
+android.text.TextDirectionHeuristics
+android.text.TextDirectionHeuristics$1
+android.text.TextDirectionHeuristics$AnyStrong
+android.text.TextDirectionHeuristics$CharCount
+android.text.TextDirectionHeuristics$FirstStrong
+android.text.TextDirectionHeuristics$TextDirectionAlgorithm
+android.text.TextDirectionHeuristics$TextDirectionHeuristicImpl
+android.text.TextDirectionHeuristics$TextDirectionHeuristicInternal
+android.text.TextDirectionHeuristics$TriState
android.text.TextLine
android.text.TextPaint
android.text.TextUtils
@@ -603,12 +693,14 @@ android.text.TextUtils$EllipsizeCallback
android.text.TextUtils$TruncateAt
android.text.TextWatcher
android.text.format.Time
+android.text.method.AllCapsTransformationMethod
android.text.method.ArrowKeyMovementMethod
android.text.method.BaseKeyListener
android.text.method.BaseMovementMethod
android.text.method.KeyListener
android.text.method.MetaKeyKeyListener
android.text.method.MovementMethod
+android.text.method.QwertyKeyListener
android.text.method.ReplacementTransformationMethod
android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
@@ -616,6 +708,9 @@ android.text.method.SingleLineTransformationMethod
android.text.method.TextKeyListener
android.text.method.TextKeyListener$Capitalize
android.text.method.TransformationMethod
+android.text.method.TransformationMethod2
+android.text.method.WordIterator
+android.text.method.WordIterator$1
android.text.style.AlignmentSpan
android.text.style.CharacterStyle
android.text.style.LeadingMarginSpan
@@ -624,29 +719,35 @@ android.text.style.LineHeightSpan
android.text.style.MetricAffectingSpan
android.text.style.ParagraphStyle
android.text.style.ReplacementSpan
+android.text.style.StyleSpan
+android.text.style.SuggestionSpan
android.text.style.UpdateAppearance
android.text.style.UpdateLayout
android.text.style.WrapTogetherSpan
android.util.AndroidException
android.util.AndroidRuntimeException
android.util.AttributeSet
-android.util.DebugUtils
android.util.DisplayMetrics
android.util.EventLog
android.util.EventLog$Event
android.util.FinitePool
android.util.FloatMath
+android.util.FloatProperty
+android.util.LocaleUtil
android.util.Log
android.util.Log$1
android.util.Log$TerribleFailureHandler
android.util.LongSparseArray
+android.util.LruCache
android.util.Pair
android.util.Patterns
android.util.Pool
android.util.Poolable
android.util.PoolableManager
android.util.Pools
+android.util.Property
android.util.Singleton
+android.util.Slog
android.util.SparseArray
android.util.SparseBooleanArray
android.util.SparseIntArray
@@ -659,24 +760,36 @@ android.view.AbsSavedState$1
android.view.AbsSavedState$2
android.view.ActionMode
android.view.ActionMode$Callback
+android.view.CompatibilityInfoHolder
android.view.ContextMenu
android.view.ContextMenu$ContextMenuInfo
android.view.ContextThemeWrapper
android.view.Display
+android.view.DisplayList
android.view.FallbackEventHandler
android.view.FocusFinder
android.view.FocusFinder$1
android.view.FocusFinder$SequentialFocusComparator
android.view.GLES20Canvas
android.view.GLES20Canvas$CanvasFinalizer
+android.view.GLES20DisplayList
+android.view.GLES20DisplayList$DisplayListFinalizer
+android.view.GLES20Layer
+android.view.GLES20Layer$Finalizer
+android.view.GLES20RecordingCanvas
+android.view.GLES20RecordingCanvas$1
+android.view.GLES20RenderLayer
+android.view.GestureDetector$OnDoubleTapListener
+android.view.GestureDetector$OnGestureListener
android.view.Gravity
android.view.HardwareCanvas
+android.view.HardwareLayer
android.view.HardwareRenderer
android.view.HardwareRenderer$Gl20Renderer
android.view.HardwareRenderer$GlRenderer
-android.view.HardwareRenderer$GlRenderer$ComponentSizeChooser
-android.view.HardwareRenderer$GlRenderer$EglConfigChooser
android.view.HardwareRenderer$HardwareDrawCallbacks
+android.view.IRotationWatcher
+android.view.IRotationWatcher$Stub
android.view.IWindow
android.view.IWindow$Stub
android.view.IWindowManager
@@ -689,6 +802,8 @@ android.view.InputChannel
android.view.InputChannel$1
android.view.InputEvent
android.view.InputEvent$1
+android.view.InputEventConsistencyVerifier
+android.view.InputEventConsistencyVerifier$KeyState
android.view.InputHandler
android.view.InputQueue
android.view.InputQueue$Callback
@@ -702,12 +817,17 @@ android.view.KeyEvent$DispatcherState
android.view.LayoutInflater
android.view.LayoutInflater$Factory
android.view.LayoutInflater$Factory2
+android.view.LayoutInflater$Filter
android.view.Menu
android.view.MenuInflater
android.view.MenuInflater$MenuState
android.view.MenuItem
android.view.MotionEvent
android.view.MotionEvent$1
+android.view.MotionEvent$PointerCoords
+android.view.MotionEvent$PointerProperties
+android.view.PointerIcon
+android.view.PointerIcon$1
android.view.Surface
android.view.Surface$1
android.view.Surface$CompatibleCanvas
@@ -719,10 +839,22 @@ android.view.SurfaceView
android.view.SurfaceView$1
android.view.SurfaceView$2
android.view.SurfaceView$3
+android.view.SurfaceView$4
+android.view.SurfaceView$MyWindow
+android.view.TextureView
android.view.VelocityTracker
android.view.VelocityTracker$1
-android.view.VelocityTracker$Pointer
android.view.View
+android.view.View$10
+android.view.View$11
+android.view.View$12
+android.view.View$13
+android.view.View$4
+android.view.View$5
+android.view.View$6
+android.view.View$7
+android.view.View$8
+android.view.View$9
android.view.View$AttachInfo
android.view.View$AttachInfo$Callbacks
android.view.View$BaseSavedState
@@ -733,29 +865,31 @@ android.view.View$OnClickListener
android.view.View$OnCreateContextMenuListener
android.view.View$OnFocusChangeListener
android.view.View$OnKeyListener
+android.view.View$OnLayoutChangeListener
android.view.View$OnLongClickListener
android.view.View$OnTouchListener
android.view.View$PerformClick
android.view.View$ScrollabilityCache
android.view.View$UnsetPressedState
android.view.ViewConfiguration
-android.view.ViewDebug
android.view.ViewGroup
android.view.ViewGroup$3
android.view.ViewGroup$LayoutParams
android.view.ViewGroup$MarginLayoutParams
+android.view.ViewGroup$OnHierarchyChangeListener
android.view.ViewGroup$TouchTarget
android.view.ViewManager
android.view.ViewParent
-android.view.ViewRoot
-android.view.ViewRoot$1
-android.view.ViewRoot$2
-android.view.ViewRoot$InputMethodCallback
-android.view.ViewRoot$ResizedInfo
-android.view.ViewRoot$RunQueue
-android.view.ViewRoot$RunQueue$HandlerAction
-android.view.ViewRoot$TrackballAxis
-android.view.ViewRoot$W
+android.view.ViewRootImpl
+android.view.ViewRootImpl$2
+android.view.ViewRootImpl$3
+android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
+android.view.ViewRootImpl$InputMethodCallback
+android.view.ViewRootImpl$ResizedInfo
+android.view.ViewRootImpl$RunQueue
+android.view.ViewRootImpl$RunQueue$HandlerAction
+android.view.ViewRootImpl$TrackballAxis
+android.view.ViewRootImpl$W
android.view.ViewStub
android.view.ViewTreeObserver
android.view.ViewTreeObserver$InternalInsetsInfo
@@ -771,17 +905,21 @@ android.view.WindowManager
android.view.WindowManager$LayoutParams
android.view.WindowManager$LayoutParams$1
android.view.WindowManagerImpl
+android.view.WindowManagerImpl$CompatModeWrapper
android.view.accessibility.AccessibilityEvent
android.view.accessibility.AccessibilityEventSource
android.view.accessibility.AccessibilityManager
android.view.accessibility.AccessibilityManager$1
+android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
android.view.accessibility.AccessibilityManager$MyHandler
+android.view.accessibility.AccessibilityRecord
android.view.accessibility.IAccessibilityManager
android.view.accessibility.IAccessibilityManager$Stub
android.view.accessibility.IAccessibilityManager$Stub$Proxy
android.view.accessibility.IAccessibilityManagerClient
android.view.accessibility.IAccessibilityManagerClient$Stub
android.view.animation.AccelerateDecelerateInterpolator
+android.view.animation.AccelerateInterpolator
android.view.animation.AlphaAnimation
android.view.animation.Animation
android.view.animation.AnimationUtils
@@ -794,27 +932,30 @@ android.view.inputmethod.ComposingText
android.view.inputmethod.EditorInfo
android.view.inputmethod.EditorInfo$1
android.view.inputmethod.ExtractedText
-android.view.inputmethod.ExtractedTextRequest
-android.view.inputmethod.ExtractedTextRequest$1
+android.view.inputmethod.ExtractedText$1
android.view.inputmethod.InputConnection
android.view.inputmethod.InputMethodManager
android.view.inputmethod.InputMethodManager$1
android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
android.view.inputmethod.InputMethodManager$H
-android.webkit.LoadListener
+android.webkit.JniUtil
android.webkit.PluginManager
+android.webkit.WebTextView
android.webkit.WebView
-android.webkit.WebView$HitTestResult
android.webkit.WebViewCore
-android.webkit.WebViewCore$TouchUpData
android.widget.AbsListView
+android.widget.AbsListView$1
android.widget.AbsListView$2
android.widget.AbsListView$AdapterDataSetObserver
+android.widget.AbsListView$CheckForTap
android.widget.AbsListView$LayoutParams
android.widget.AbsListView$OnScrollListener
+android.widget.AbsListView$PerformClick
android.widget.AbsListView$RecycleBin
android.widget.AbsListView$SavedState
android.widget.AbsListView$SavedState$1
+android.widget.AbsListView$SelectionBoundsAdjuster
+android.widget.AbsListView$WindowRunnnable
android.widget.AbsSpinner
android.widget.AbsSpinner$RecycleBin
android.widget.Adapter
@@ -825,21 +966,30 @@ android.widget.AdapterView$OnItemSelectedListener
android.widget.AdapterViewAnimator
android.widget.ArrayAdapter
android.widget.AutoCompleteTextView
+android.widget.AutoCompleteTextView$DropDownItemClickListener
+android.widget.AutoCompleteTextView$MyWatcher
+android.widget.AutoCompleteTextView$PassThroughClickListener
android.widget.BaseAdapter
android.widget.Button
android.widget.CheckBox
android.widget.Checkable
+android.widget.CheckedTextView
android.widget.CompoundButton
+android.widget.CursorAdapter
+android.widget.CursorFilter$CursorFilterClient
android.widget.EdgeGlow
android.widget.EditText
android.widget.ExpandableListView
android.widget.Filter
android.widget.Filter$FilterListener
+android.widget.Filter$ResultsHandler
android.widget.Filterable
android.widget.FrameLayout
android.widget.FrameLayout$LayoutParams
android.widget.Gallery
+android.widget.GridLayout
android.widget.GridView
+android.widget.HorizontalScrollView
android.widget.ImageButton
android.widget.ImageView
android.widget.ImageView$ScaleType
@@ -848,62 +998,81 @@ android.widget.LinearLayout$LayoutParams
android.widget.ListAdapter
android.widget.ListPopupWindow
android.widget.ListPopupWindow$ListSelectorHider
+android.widget.ListPopupWindow$PopupDataSetObserver
android.widget.ListPopupWindow$PopupScrollListener
android.widget.ListPopupWindow$PopupTouchInterceptor
android.widget.ListPopupWindow$ResizePopupRunnable
android.widget.ListView
android.widget.ListView$ArrowScrollFocusResult
+android.widget.NumberPicker
android.widget.OverScroller
android.widget.OverScroller$SplineOverScroller
android.widget.PopupWindow
android.widget.PopupWindow$1
android.widget.ProgressBar
+android.widget.ProgressBar$SavedState
+android.widget.ProgressBar$SavedState$1
android.widget.RelativeLayout
android.widget.RelativeLayout$DependencyGraph
android.widget.RelativeLayout$DependencyGraph$Node
android.widget.RelativeLayout$DependencyGraph$Node$1
android.widget.RelativeLayout$LayoutParams
+android.widget.RemoteViews
+android.widget.RemoteViews$1
+android.widget.RemoteViews$Action
+android.widget.RemoteViews$MemoryUsageCounter
+android.widget.RemoteViews$ReflectionAction
android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
android.widget.ScrollBarDrawable
android.widget.ScrollView
android.widget.Scroller
+android.widget.SearchView
+android.widget.Spinner
android.widget.SpinnerAdapter
-android.widget.Switch
+android.widget.StackView
+android.widget.TabHost
android.widget.TabWidget
android.widget.TableLayout
android.widget.TableRow
android.widget.TextView
android.widget.TextView$3
+android.widget.TextView$Blink
android.widget.TextView$BufferType
android.widget.TextView$ChangeWatcher
android.widget.TextView$CharWrapper
android.widget.TextView$Drawables
android.widget.TextView$InputContentType
+android.widget.TextView$InputMethodState
android.widget.TextView$OnEditorActionListener
android.widget.TextView$SavedState
-android.widget.TextView$SavedState$1
+android.widget.TextView$TextAlign
+android.widget.VideoView
+android.widget.ViewAnimator
+com.android.i18n.phonenumbers.AsYouTypeFormatter
+com.android.i18n.phonenumbers.PhoneNumberUtil
com.android.internal.R$styleable
com.android.internal.app.ActionBarImpl
com.android.internal.app.ActionBarImpl$1
com.android.internal.app.ActionBarImpl$2
-com.android.internal.app.ActionBarImpl$3
-com.android.internal.app.ActionBarImpl$4
com.android.internal.app.AlertController
com.android.internal.app.AlertController$1
com.android.internal.app.AlertController$ButtonHandler
com.android.internal.appwidget.IAppWidgetService
com.android.internal.appwidget.IAppWidgetService$Stub
-com.android.internal.graphics.NativeUtils
+com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
+com.android.internal.content.NativeLibraryHelper
com.android.internal.logging.AndroidConfig
com.android.internal.logging.AndroidHandler
com.android.internal.logging.AndroidHandler$1
com.android.internal.os.AndroidPrintStream
+com.android.internal.os.BatteryStatsImpl
com.android.internal.os.BinderInternal
com.android.internal.os.BinderInternal$GcWatcher
com.android.internal.os.LoggingPrintStream
com.android.internal.os.LoggingPrintStream$1
com.android.internal.os.RuntimeInit
com.android.internal.os.RuntimeInit$1
+com.android.internal.os.RuntimeInit$Arguments
com.android.internal.os.RuntimeInit$UncaughtHandler
com.android.internal.os.SamplingProfilerIntegration
com.android.internal.os.ZygoteConnection
@@ -916,19 +1085,24 @@ com.android.internal.policy.impl.PhoneFallbackEventHandler
com.android.internal.policy.impl.PhoneLayoutInflater
com.android.internal.policy.impl.PhoneWindow
com.android.internal.policy.impl.PhoneWindow$1
-com.android.internal.policy.impl.PhoneWindow$2
+com.android.internal.policy.impl.PhoneWindow$ActionMenuPresenterCallback
com.android.internal.policy.impl.PhoneWindow$DecorView
com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1
+com.android.internal.policy.impl.PhoneWindow$RotationWatcher
+com.android.internal.policy.impl.PhoneWindow$RotationWatcher$1
com.android.internal.policy.impl.Policy
+com.android.internal.telephony.ITelephony
+com.android.internal.telephony.ITelephony$Stub
com.android.internal.telephony.ITelephonyRegistry
com.android.internal.telephony.ITelephonyRegistry$Stub
com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
com.android.internal.telephony.Phone$State
com.android.internal.util.ArrayUtils
com.android.internal.util.FastXmlSerializer
+com.android.internal.util.Preconditions
com.android.internal.util.XmlUtils
com.android.internal.view.BaseIWindow
com.android.internal.view.IInputConnectionWrapper
@@ -951,21 +1125,136 @@ com.android.internal.view.InputBindResult
com.android.internal.view.InputBindResult$1
com.android.internal.view.RootViewSurfaceTaker
com.android.internal.view.menu.ActionMenuItem
+com.android.internal.view.menu.ActionMenuItemView
+com.android.internal.view.menu.ActionMenuPresenter
+com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton
+com.android.internal.view.menu.ActionMenuPresenter$PopupPresenterCallback
com.android.internal.view.menu.ActionMenuView
-com.android.internal.view.menu.ActionMenuView$1
-com.android.internal.view.menu.ActionMenuView$OverflowMenuButton
+com.android.internal.view.menu.ActionMenuView$ActionMenuChildView
+com.android.internal.view.menu.ActionMenuView$LayoutParams
+com.android.internal.view.menu.BaseMenuPresenter
com.android.internal.view.menu.MenuBuilder
com.android.internal.view.menu.MenuBuilder$Callback
com.android.internal.view.menu.MenuBuilder$ItemInvoker
-com.android.internal.view.menu.MenuBuilder$MenuType
com.android.internal.view.menu.MenuItemImpl
+com.android.internal.view.menu.MenuPresenter
+com.android.internal.view.menu.MenuPresenter$Callback
com.android.internal.view.menu.MenuView
+com.android.internal.view.menu.MenuView$ItemView
+com.android.internal.widget.AbsActionBarView
+com.android.internal.widget.AbsActionBarView$VisibilityAnimListener
com.android.internal.widget.ActionBarContainer
com.android.internal.widget.ActionBarContextView
com.android.internal.widget.ActionBarView
com.android.internal.widget.ActionBarView$1
com.android.internal.widget.ActionBarView$2
+com.android.internal.widget.ActionBarView$3
+com.android.internal.widget.ActionBarView$ExpandedActionViewMenuPresenter
+com.android.internal.widget.ActionBarView$HomeView
+com.android.internal.widget.ActionBarView$SavedState
+com.android.internal.widget.ActionBarView$SavedState$1
com.android.internal.widget.DialogTitle
+com.android.internal.widget.EditableInputConnection
+com.android.internal.widget.ScrollingTabContainerView
+com.android.org.bouncycastle.asn1.ASN1Choice
+com.android.org.bouncycastle.asn1.ASN1Encodable
+com.android.org.bouncycastle.asn1.ASN1EncodableVector
+com.android.org.bouncycastle.asn1.ASN1InputStream
+com.android.org.bouncycastle.asn1.ASN1Integer
+com.android.org.bouncycastle.asn1.ASN1Null
+com.android.org.bouncycastle.asn1.ASN1Object
+com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier
+com.android.org.bouncycastle.asn1.ASN1OctetString
+com.android.org.bouncycastle.asn1.ASN1OctetStringParser
+com.android.org.bouncycastle.asn1.ASN1Sequence
+com.android.org.bouncycastle.asn1.ASN1Set
+com.android.org.bouncycastle.asn1.ASN1StreamParser
+com.android.org.bouncycastle.asn1.ASN1String
+com.android.org.bouncycastle.asn1.ASN1TaggedObject
+com.android.org.bouncycastle.asn1.ASN1TaggedObjectParser
+com.android.org.bouncycastle.asn1.DERBitString
+com.android.org.bouncycastle.asn1.DERBoolean
+com.android.org.bouncycastle.asn1.DEREncodable
+com.android.org.bouncycastle.asn1.DEREncodableVector
+com.android.org.bouncycastle.asn1.DERFactory
+com.android.org.bouncycastle.asn1.DERIA5String
+com.android.org.bouncycastle.asn1.DERInteger
+com.android.org.bouncycastle.asn1.DERNull
+com.android.org.bouncycastle.asn1.DERObject
+com.android.org.bouncycastle.asn1.DERObjectIdentifier
+com.android.org.bouncycastle.asn1.DEROctetString
+com.android.org.bouncycastle.asn1.DEROutputStream
+com.android.org.bouncycastle.asn1.DERPrintableString
+com.android.org.bouncycastle.asn1.DERSequence
+com.android.org.bouncycastle.asn1.DERSet
+com.android.org.bouncycastle.asn1.DERString
+com.android.org.bouncycastle.asn1.DERT61String
+com.android.org.bouncycastle.asn1.DERTaggedObject
+com.android.org.bouncycastle.asn1.DERTags
+com.android.org.bouncycastle.asn1.DERUniversalString
+com.android.org.bouncycastle.asn1.DefiniteLengthInputStream
+com.android.org.bouncycastle.asn1.InMemoryRepresentable
+com.android.org.bouncycastle.asn1.IndefiniteLengthInputStream
+com.android.org.bouncycastle.asn1.LimitedInputStream
+com.android.org.bouncycastle.asn1.OIDTokenizer
+com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
+com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
+com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
+com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
+com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
+com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier
+com.android.org.bouncycastle.asn1.x509.BasicConstraints
+com.android.org.bouncycastle.asn1.x509.DigestInfo
+com.android.org.bouncycastle.asn1.x509.GeneralName
+com.android.org.bouncycastle.asn1.x509.GeneralNames
+com.android.org.bouncycastle.asn1.x509.RSAPublicKeyStructure
+com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
+com.android.org.bouncycastle.asn1.x509.X509Extensions
+com.android.org.bouncycastle.asn1.x509.X509Name
+com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
+com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
+com.android.org.bouncycastle.crypto.AsymmetricBlockCipher
+com.android.org.bouncycastle.crypto.CipherParameters
+com.android.org.bouncycastle.crypto.Digest
+com.android.org.bouncycastle.crypto.ExtendedDigest
+com.android.org.bouncycastle.crypto.digests.GeneralDigest
+com.android.org.bouncycastle.crypto.digests.SHA1Digest
+com.android.org.bouncycastle.crypto.encodings.PKCS1Encoding
+com.android.org.bouncycastle.crypto.encodings.PKCS1Encoding$1
+com.android.org.bouncycastle.crypto.engines.RSABlindedEngine
+com.android.org.bouncycastle.crypto.engines.RSACoreEngine
+com.android.org.bouncycastle.crypto.params.AsymmetricKeyParameter
+com.android.org.bouncycastle.crypto.params.ParametersWithRandom
+com.android.org.bouncycastle.crypto.params.RSAKeyParameters
+com.android.org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters
+com.android.org.bouncycastle.crypto.util.Pack
+com.android.org.bouncycastle.jce.interfaces.BCKeyStore
+com.android.org.bouncycastle.jce.interfaces.ConfigurableProvider
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
+com.android.org.bouncycastle.jce.provider.CertPathValidatorUtilities
+com.android.org.bouncycastle.jce.provider.JCERSAPublicKey
+com.android.org.bouncycastle.jce.provider.JDKDigestSignature
+com.android.org.bouncycastle.jce.provider.JDKDigestSignature$SHA1WithRSAEncryption
+com.android.org.bouncycastle.jce.provider.JDKKeyFactory
+com.android.org.bouncycastle.jce.provider.JDKKeyFactory$RSA
+com.android.org.bouncycastle.jce.provider.JDKKeyStore
+com.android.org.bouncycastle.jce.provider.PKIXCRLUtil
+com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi
+com.android.org.bouncycastle.jce.provider.PKIXNameConstraintValidator
+com.android.org.bouncycastle.jce.provider.PKIXPolicyNode
+com.android.org.bouncycastle.jce.provider.RFC3280CertPathUtilities
+com.android.org.bouncycastle.jce.provider.RSAUtil
+com.android.org.bouncycastle.jce.provider.asymmetric.EC$Mappings
+com.android.org.bouncycastle.jce.provider.symmetric.AES$Mappings
+com.android.org.bouncycastle.jce.provider.symmetric.ARC4$Mappings
+com.android.org.bouncycastle.jce.provider.symmetric.Blowfish$Mappings
+com.android.org.bouncycastle.jce.provider.symmetric.DESede$Mappings
+com.android.org.bouncycastle.util.io.Streams
+com.android.org.bouncycastle.x509.ExtendedPKIXParameters
+com.android.server.NetworkManagementSocketTagger
+com.android.server.NetworkManagementSocketTagger$1
+com.android.server.NetworkManagementSocketTagger$SocketTags
com.android.server.Watchdog
com.google.android.collect.Lists
com.google.android.collect.Maps
@@ -975,23 +1264,25 @@ com.google.android.gles_jni.EGLDisplayImpl
com.google.android.gles_jni.EGLImpl
com.google.android.gles_jni.EGLSurfaceImpl
com.google.android.gles_jni.GLImpl
-com.android.i18n.phonenumbers.PhoneNumberUtil
+dalvik.system.BaseDexClassLoader
dalvik.system.BlockGuard
dalvik.system.BlockGuard$1
dalvik.system.BlockGuard$2
dalvik.system.BlockGuard$BlockGuardPolicyException
dalvik.system.BlockGuard$Policy
-dalvik.system.BlockGuard$WrappedFileSystem
-dalvik.system.BlockGuard$WrappedNetworkSystem
dalvik.system.CloseGuard
dalvik.system.CloseGuard$DefaultReporter
dalvik.system.CloseGuard$Reporter
dalvik.system.DalvikLogHandler
dalvik.system.DalvikLogging
dalvik.system.DexFile
+dalvik.system.DexPathList
+dalvik.system.DexPathList$Element
dalvik.system.NativeStart
dalvik.system.PathClassLoader
-dalvik.system.TouchDex
+dalvik.system.SocketTagger
+dalvik.system.SocketTagger$1
+dalvik.system.StaleDexCacheError
dalvik.system.VMDebug
dalvik.system.VMRuntime
dalvik.system.VMStack
@@ -1019,58 +1310,78 @@ java.io.Flushable
java.io.IOException
java.io.InputStream
java.io.InputStreamReader
-java.io.InterruptedIOException
java.io.ObjectStreamClass
java.io.ObjectStreamField
java.io.OutputStream
java.io.OutputStreamWriter
java.io.PrintStream
java.io.PrintWriter
-java.io.PushbackInputStream
java.io.RandomAccessFile
java.io.Reader
java.io.Serializable
java.io.StringWriter
java.io.Writer
+java.lang.AbstractMethodError
java.lang.AbstractStringBuilder
java.lang.Appendable
+java.lang.ArithmeticException
java.lang.ArrayIndexOutOfBoundsException
+java.lang.ArrayStoreException
+java.lang.AutoCloseable
java.lang.Boolean
java.lang.BootClassLoader
java.lang.Byte
java.lang.CaseMapper
java.lang.CharSequence
java.lang.Character
+java.lang.Character$UnicodeBlock
java.lang.Class
-java.lang.ClassCache
-java.lang.ClassCache$EnumComparator
java.lang.ClassCastException
+java.lang.ClassCircularityError
+java.lang.ClassFormatError
java.lang.ClassLoader
java.lang.ClassLoader$SystemClassLoader
java.lang.ClassNotFoundException
java.lang.Cloneable
java.lang.Comparable
+java.lang.Daemons
+java.lang.Daemons$Daemon
+java.lang.Daemons$FinalizerDaemon
+java.lang.Daemons$FinalizerWatchdogDaemon
+java.lang.Daemons$ReferenceQueueDaemon
java.lang.Double
java.lang.Enum
+java.lang.Enum$1
java.lang.Error
java.lang.Exception
java.lang.ExceptionInInitializerError
java.lang.Float
+java.lang.IllegalAccessError
+java.lang.IllegalAccessException
java.lang.IllegalArgumentException
+java.lang.IllegalMonitorStateException
java.lang.IllegalStateException
+java.lang.IllegalThreadStateException
+java.lang.IncompatibleClassChangeError
java.lang.IndexOutOfBoundsException
+java.lang.InstantiationError
+java.lang.InstantiationException
java.lang.Integer
java.lang.IntegralToString
java.lang.IntegralToString$1
java.lang.InternalError
java.lang.InterruptedException
java.lang.Iterable
-java.lang.LangAccessImpl
java.lang.LinkageError
java.lang.Long
java.lang.Math
+java.lang.NegativeArraySizeException
java.lang.NoClassDefFoundError
+java.lang.NoSuchFieldError
+java.lang.NoSuchFieldException
+java.lang.NoSuchMethodError
java.lang.NoSuchMethodException
+java.lang.NullPointerException
java.lang.Number
java.lang.NumberFormatException
java.lang.Object
@@ -1082,7 +1393,6 @@ java.lang.Runnable
java.lang.Runtime
java.lang.RuntimeException
java.lang.RuntimePermission
-java.lang.SecurityException
java.lang.Short
java.lang.StackOverflowError
java.lang.StackTraceElement
@@ -1091,8 +1401,10 @@ java.lang.String
java.lang.String$CaseInsensitiveComparator
java.lang.StringBuffer
java.lang.StringBuilder
+java.lang.StringIndexOutOfBoundsException
+java.lang.StringToReal
+java.lang.StringToReal$StringExponentPair
java.lang.System
-java.lang.SystemProperties
java.lang.Thread
java.lang.Thread$State
java.lang.Thread$UncaughtExceptionHandler
@@ -1100,15 +1412,18 @@ java.lang.ThreadGroup
java.lang.ThreadLocal
java.lang.ThreadLocal$Values
java.lang.Throwable
+java.lang.TypeNotPresentException
java.lang.UnsafeByteSequence
java.lang.UnsatisfiedLinkError
java.lang.UnsupportedOperationException
java.lang.VMClassLoader
java.lang.VMThread
+java.lang.VerifyError
java.lang.VirtualMachineError
java.lang.Void
java.lang.annotation.Annotation
-java.lang.ref.PhantomReference
+java.lang.ref.FinalizerReference
+java.lang.ref.FinalizerReference$Sentinel
java.lang.ref.Reference
java.lang.ref.ReferenceQueue
java.lang.ref.SoftReference
@@ -1118,6 +1433,7 @@ java.lang.reflect.AnnotatedElement
java.lang.reflect.Array
java.lang.reflect.Constructor
java.lang.reflect.Field
+java.lang.reflect.Field$1
java.lang.reflect.GenericDeclaration
java.lang.reflect.InvocationHandler
java.lang.reflect.Member
@@ -1125,46 +1441,39 @@ java.lang.reflect.Method
java.lang.reflect.Method$1
java.lang.reflect.Modifier
java.lang.reflect.Proxy
-java.lang.reflect.ReflectionAccessImpl
java.lang.reflect.Type
java.math.BigDecimal
java.math.BigInt
java.math.BigInteger
+java.math.Multiplication
java.math.NativeBN
java.math.RoundingMode
java.net.AddressCache
-java.net.AddressCache$1
java.net.AddressCache$AddressCacheEntry
java.net.ContentHandler
-java.net.DatagramPacket
java.net.HttpURLConnection
java.net.Inet4Address
+java.net.Inet6Address
java.net.InetAddress
-java.net.InetAddress$1
-java.net.InetAddress$WaitReachable
java.net.InetSocketAddress
-java.net.InterfaceAddress
java.net.JarURLConnection
-java.net.MulticastGroupRequest
-java.net.NetPermission
-java.net.NetworkInterface
+java.net.PlainSocketImpl
java.net.Proxy
java.net.Proxy$Type
java.net.ProxySelector
java.net.ProxySelectorImpl
java.net.Socket
java.net.SocketAddress
-java.net.SocketException
java.net.SocketImpl
-java.net.SocketImplFactory
java.net.SocketOptions
-java.net.SocketTimeoutException
java.net.URI
-java.net.URIEncoderDecoder
+java.net.URI$1
+java.net.URI$PartEncoder
java.net.URL
java.net.URLConnection
java.net.URLConnection$DefaultContentHandler
java.net.URLEncoder
+java.net.URLEncoder$1
java.net.URLStreamHandler
java.nio.BaseByteBuffer
java.nio.Buffer
@@ -1182,11 +1491,9 @@ java.nio.NioUtils
java.nio.ReadWriteCharArrayBuffer
java.nio.ReadWriteDirectByteBuffer
java.nio.ReadWriteHeapByteBuffer
-java.nio.WriteOnlyFileChannel
java.nio.channels.ByteChannel
java.nio.channels.Channel
java.nio.channels.FileChannel
-java.nio.channels.FileChannel$MapMode
java.nio.channels.GatheringByteChannel
java.nio.channels.InterruptibleChannel
java.nio.channels.ReadableByteChannel
@@ -1195,54 +1502,83 @@ java.nio.channels.WritableByteChannel
java.nio.channels.spi.AbstractInterruptibleChannel
java.nio.channels.spi.AbstractInterruptibleChannel$1
java.nio.charset.Charset
-java.nio.charset.Charset$1
java.nio.charset.CharsetDecoder
+java.nio.charset.CharsetDecoderICU
java.nio.charset.CharsetEncoder
+java.nio.charset.CharsetEncoderICU
+java.nio.charset.CharsetICU
java.nio.charset.Charsets
java.nio.charset.CoderResult
java.nio.charset.CodingErrorAction
java.nio.charset.ModifiedUtf8
-java.security.AccessControlContext
java.security.AccessController
java.security.BasicPermission
+java.security.GeneralSecurityException
java.security.Guard
java.security.Key
+java.security.KeyFactory
+java.security.KeyFactorySpi
java.security.KeyStore
-java.security.KeyStore$1
java.security.KeyStoreSpi
+java.security.MessageDigest
+java.security.MessageDigestSpi
+java.security.NoSuchAlgorithmException
java.security.Permission
java.security.Principal
java.security.PrivilegedAction
-java.security.PrivilegedExceptionAction
-java.security.ProtectionDomain
java.security.Provider
java.security.Provider$Service
-java.security.Provider$Service$1
+java.security.PublicKey
java.security.SecureRandom
java.security.SecureRandomSpi
java.security.Security
-java.security.Security$1
java.security.Security$SecurityDoor
+java.security.Signature
+java.security.Signature$SignatureImpl
+java.security.SignatureSpi
+java.security.cert.CertPath
java.security.cert.CertPathParameters
java.security.cert.CertPathValidator
+java.security.cert.CertPathValidatorResult
java.security.cert.CertPathValidatorSpi
+java.security.cert.CertSelector
java.security.cert.Certificate
java.security.cert.CertificateFactory
java.security.cert.CertificateFactorySpi
+java.security.cert.PKIXCertPathValidatorResult
java.security.cert.PKIXParameters
+java.security.cert.PolicyNode
java.security.cert.TrustAnchor
+java.security.cert.X509CertSelector
java.security.cert.X509Certificate
java.security.cert.X509Extension
+java.security.interfaces.DSAKey
+java.security.interfaces.DSAPublicKey
+java.security.interfaces.RSAKey
+java.security.interfaces.RSAPublicKey
+java.security.spec.EncodedKeySpec
java.security.spec.KeySpec
+java.security.spec.RSAPublicKeySpec
+java.security.spec.X509EncodedKeySpec
+java.text.AttributedCharacterIterator$Attribute
+java.text.Bidi
+java.text.Bidi$Run
+java.text.BreakIterator
+java.text.CharacterIterator
java.text.DateFormat
java.text.DateFormatSymbols
java.text.DecimalFormat
java.text.DecimalFormat$1
java.text.DecimalFormatSymbols
+java.text.FieldPosition
java.text.Format
+java.text.Format$Field
java.text.NumberFormat
+java.text.NumberFormat$Field
java.text.ParsePosition
+java.text.RuleBasedBreakIterator
java.text.SimpleDateFormat
+java.text.StringCharacterIterator
java.util.AbstractCollection
java.util.AbstractList
java.util.AbstractList$FullListIterator
@@ -1256,10 +1592,11 @@ java.util.ArrayList
java.util.ArrayList$ArrayListIterator
java.util.Arrays
java.util.Arrays$ArrayList
-java.util.BitSet
java.util.Calendar
java.util.Collection
java.util.Collections
+java.util.Collections$1
+java.util.Collections$2
java.util.Collections$EmptyList
java.util.Collections$EmptyMap
java.util.Collections$EmptySet
@@ -1277,7 +1614,6 @@ java.util.Date
java.util.Deque
java.util.Dictionary
java.util.EnumMap
-java.util.EnumSet
java.util.Enumeration
java.util.EventObject
java.util.Formattable
@@ -1306,6 +1642,7 @@ java.util.Hashtable$ValueIterator
java.util.Hashtable$Values
java.util.Iterator
java.util.LinkedHashMap
+java.util.LinkedHashMap$EntryIterator
java.util.LinkedHashMap$KeyIterator
java.util.LinkedHashMap$LinkedEntry
java.util.LinkedHashMap$LinkedHashIterator
@@ -1321,7 +1658,6 @@ java.util.Map$Entry
java.util.NavigableMap
java.util.NavigableSet
java.util.Properties
-java.util.PropertyPermission
java.util.Queue
java.util.Random
java.util.RandomAccess
@@ -1341,6 +1677,8 @@ java.util.TreeMap$Bound$2
java.util.TreeMap$Bound$3
java.util.TreeMap$EntrySet
java.util.TreeMap$EntrySet$1
+java.util.TreeMap$KeySet
+java.util.TreeMap$KeySet$1
java.util.TreeMap$MapIterator
java.util.TreeMap$Node
java.util.TreeMap$Relation
@@ -1349,11 +1687,17 @@ java.util.Vector
java.util.Vector$1
java.util.WeakHashMap
java.util.WeakHashMap$Entry
+java.util.WeakHashMap$Entry$Type
+java.util.WeakHashMap$HashIterator
java.util.concurrent.AbstractExecutorService
java.util.concurrent.BlockingQueue
java.util.concurrent.Callable
+java.util.concurrent.ConcurrentHashMap
+java.util.concurrent.ConcurrentHashMap$HashEntry
+java.util.concurrent.ConcurrentHashMap$Segment
java.util.concurrent.ConcurrentLinkedQueue
java.util.concurrent.ConcurrentLinkedQueue$Node
+java.util.concurrent.ConcurrentMap
java.util.concurrent.CopyOnWriteArrayList
java.util.concurrent.CopyOnWriteArrayList$CowIterator
java.util.concurrent.CountDownLatch
@@ -1400,6 +1744,7 @@ java.util.concurrent.locks.ReentrantLock$FairSync
java.util.concurrent.locks.ReentrantLock$NonfairSync
java.util.concurrent.locks.ReentrantLock$Sync
java.util.concurrent.locks.ReentrantReadWriteLock
+java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
java.util.concurrent.locks.ReentrantReadWriteLock$Sync
java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
@@ -1420,9 +1765,6 @@ java.util.logging.Handler
java.util.logging.Level
java.util.logging.LogManager
java.util.logging.LogManager$1
-java.util.logging.LogManager$2
-java.util.logging.LogManager$2$1
-java.util.logging.LogManager$4
java.util.logging.Logger
java.util.logging.Logger$1
java.util.logging.LoggingPermission
@@ -1437,12 +1779,13 @@ java.util.zip.Adler32
java.util.zip.CRC32
java.util.zip.Checksum
java.util.zip.Deflater
+java.util.zip.GZIPInputStream
java.util.zip.Inflater
java.util.zip.InflaterInputStream
java.util.zip.ZipConstants
java.util.zip.ZipEntry
java.util.zip.ZipFile
-java.util.zip.ZipFile$2
+java.util.zip.ZipFile$1
java.util.zip.ZipFile$RAFStream
java.util.zip.ZipFile$ZipInflaterInputStream
javax.microedition.khronos.egl.EGL
@@ -1463,30 +1806,19 @@ javax.net.ssl.HostnameVerifier
javax.net.ssl.HttpsURLConnection
javax.net.ssl.KeyManager
javax.net.ssl.KeyManagerFactory
-javax.net.ssl.KeyManagerFactory$1
javax.net.ssl.KeyManagerFactorySpi
javax.net.ssl.SSLContextSpi
+javax.net.ssl.SSLSession
javax.net.ssl.SSLSessionContext
javax.net.ssl.SSLSocket
javax.net.ssl.SSLSocketFactory
-javax.net.ssl.SSLSocketFactory$1
javax.net.ssl.TrustManager
javax.net.ssl.TrustManagerFactory
-javax.net.ssl.TrustManagerFactory$1
javax.net.ssl.TrustManagerFactorySpi
javax.net.ssl.X509ExtendedKeyManager
javax.net.ssl.X509KeyManager
javax.net.ssl.X509TrustManager
javax.security.auth.x500.X500Principal
-libcore.base.CollectionUtils
-libcore.base.CollectionUtils$1
-libcore.base.CollectionUtils$1$1
-libcore.base.EmptyArray
-libcore.base.Objects
-libcore.base.Streams
-libcore.icu.CharsetDecoderICU
-libcore.icu.CharsetEncoderICU
-libcore.icu.CharsetICU
libcore.icu.ErrorCode
libcore.icu.ICU
libcore.icu.LocaleData
@@ -1499,59 +1831,82 @@ libcore.icu.NativeIDN
libcore.icu.NativeNormalizer
libcore.icu.NativePluralRules
libcore.icu.TimeZones
-libcore.icu.TimeZones$CachedTimeZones
+libcore.internal.StringPool
+libcore.io.AsynchronousCloseMonitor
+libcore.io.Base64
+libcore.io.BlockGuardOs
libcore.io.BufferIterator
+libcore.io.ErrnoException
+libcore.io.ForwardingOs
+libcore.io.GaiException
libcore.io.HeapBufferIterator
+libcore.io.IoBridge
libcore.io.IoUtils
+libcore.io.Libcore
+libcore.io.Memory
libcore.io.MemoryMappedFile
libcore.io.NioBufferIterator
-libcore.math.MathUtils
+libcore.io.Os
+libcore.io.OsConstants
+libcore.io.Posix
+libcore.io.Streams
+libcore.io.StructAddrinfo
+libcore.io.StructFlock
+libcore.io.StructGroupReq
+libcore.io.StructLinger
+libcore.io.StructPasswd
+libcore.io.StructPollfd
+libcore.io.StructStat
+libcore.io.StructStatFs
+libcore.io.StructTimeval
+libcore.io.StructUtsname
libcore.net.MimeUtils
libcore.net.RawSocket
+libcore.net.UriCodec
+libcore.net.url.FileHandler
+libcore.net.url.FileURLConnection
+libcore.net.url.JarHandler
+libcore.net.url.JarURLConnectionImpl
+libcore.net.url.JarURLConnectionImpl$JarURLConnectionInputStream
+libcore.net.url.UrlUtils
+libcore.util.BasicLruCache
+libcore.util.CollectionUtils
+libcore.util.CollectionUtils$1
+libcore.util.CollectionUtils$1$1
+libcore.util.EmptyArray
+libcore.util.MutableInt
+libcore.util.MutableLong
+libcore.util.Objects
+libcore.util.ZoneInfo
+libcore.util.ZoneInfoDB
org.apache.commons.logging.Log
org.apache.commons.logging.LogFactory
org.apache.commons.logging.impl.Jdk14Logger
org.apache.commons.logging.impl.WeakHashtable
-org.apache.harmony.archive.util.Util
org.apache.harmony.dalvik.NativeTestTarget
org.apache.harmony.dalvik.ddmc.Chunk
org.apache.harmony.dalvik.ddmc.ChunkHandler
org.apache.harmony.dalvik.ddmc.DdmServer
-org.apache.harmony.kernel.vm.LangAccess
-org.apache.harmony.kernel.vm.ReflectionAccess
org.apache.harmony.lang.annotation.AnnotationFactory
org.apache.harmony.lang.annotation.AnnotationMember
-org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection
-org.apache.harmony.luni.internal.net.www.protocol.file.Handler
-org.apache.harmony.luni.internal.net.www.protocol.jar.Handler
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnectionImpl
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnectionImpl$JarURLConnectionInputStream
org.apache.harmony.luni.internal.util.TimezoneGetter
-org.apache.harmony.luni.internal.util.ZoneInfo
-org.apache.harmony.luni.internal.util.ZoneInfoDB
-org.apache.harmony.luni.net.PlainSocketImpl
-org.apache.harmony.luni.net.SocketInputStream
-org.apache.harmony.luni.net.SocketOutputStream
-org.apache.harmony.luni.platform.IFileSystem
-org.apache.harmony.luni.platform.INetworkSystem
-org.apache.harmony.luni.platform.OSFileSystem
-org.apache.harmony.luni.platform.OSMemory
-org.apache.harmony.luni.platform.OSNetworkSystem
-org.apache.harmony.luni.platform.Platform
-org.apache.harmony.luni.util.FloatingPointParser
-org.apache.harmony.luni.util.FloatingPointParser$StringExponentPair
-org.apache.harmony.luni.util.PriviAction
org.apache.harmony.luni.util.TwoKeyHashMap
org.apache.harmony.luni.util.TwoKeyHashMap$Entry
org.apache.harmony.luni.util.TwoKeyHashMap$EntryIteratorImpl
org.apache.harmony.luni.util.TwoKeyHashMap$ValueIteratorImpl
org.apache.harmony.luni.util.TwoKeyHashMap$ValuesCollectionImpl
-org.apache.harmony.luni.util.Util
-org.apache.harmony.security.Util
org.apache.harmony.security.asn1.ASN1Any
+org.apache.harmony.security.asn1.ASN1BitString
+org.apache.harmony.security.asn1.ASN1BitString$ASN1NamedBitList
+org.apache.harmony.security.asn1.ASN1Boolean
org.apache.harmony.security.asn1.ASN1Choice
org.apache.harmony.security.asn1.ASN1Constants
-org.apache.harmony.security.asn1.ASN1Constructured
+org.apache.harmony.security.asn1.ASN1Constructed
+org.apache.harmony.security.asn1.ASN1Explicit
+org.apache.harmony.security.asn1.ASN1GeneralizedTime
+org.apache.harmony.security.asn1.ASN1Implicit
+org.apache.harmony.security.asn1.ASN1Integer
+org.apache.harmony.security.asn1.ASN1OctetString
org.apache.harmony.security.asn1.ASN1Oid
org.apache.harmony.security.asn1.ASN1Oid$1
org.apache.harmony.security.asn1.ASN1Primitive
@@ -1566,26 +1921,34 @@ org.apache.harmony.security.asn1.ASN1StringType$4
org.apache.harmony.security.asn1.ASN1StringType$5
org.apache.harmony.security.asn1.ASN1StringType$6
org.apache.harmony.security.asn1.ASN1StringType$7
+org.apache.harmony.security.asn1.ASN1Time
org.apache.harmony.security.asn1.ASN1Type
org.apache.harmony.security.asn1.ASN1TypeCollection
+org.apache.harmony.security.asn1.ASN1UTCTime
org.apache.harmony.security.asn1.ASN1ValueCollection
org.apache.harmony.security.asn1.BerInputStream
+org.apache.harmony.security.asn1.BerOutputStream
+org.apache.harmony.security.asn1.BitString
org.apache.harmony.security.asn1.DerInputStream
+org.apache.harmony.security.asn1.DerOutputStream
+org.apache.harmony.security.asn1.ObjectIdentifier
org.apache.harmony.security.fortress.Engine
org.apache.harmony.security.fortress.Engine$ServiceCacheEntry
org.apache.harmony.security.fortress.Engine$SpiAndProvider
org.apache.harmony.security.fortress.SecurityAccess
-org.apache.harmony.security.fortress.SecurityUtils
org.apache.harmony.security.fortress.Services
-org.apache.harmony.security.fortress.Services$1
+org.apache.harmony.security.pkcs7.ContentInfo
+org.apache.harmony.security.pkcs7.ContentInfo$1
org.apache.harmony.security.provider.cert.Cache
org.apache.harmony.security.provider.cert.DRLCertFactory
-org.apache.harmony.security.provider.cert.DRLCertFactory$1
org.apache.harmony.security.provider.cert.X509CertFactoryImpl
+org.apache.harmony.security.provider.cert.X509CertImpl
+org.apache.harmony.security.provider.cert.X509CertPathImpl
+org.apache.harmony.security.provider.cert.X509CertPathImpl$1
+org.apache.harmony.security.provider.cert.X509CertPathImpl$2
+org.apache.harmony.security.provider.cert.X509CertPathImpl$3
org.apache.harmony.security.provider.crypto.CryptoProvider
-org.apache.harmony.security.provider.crypto.CryptoProvider$1
org.apache.harmony.security.provider.crypto.RandomBitsSupplier
-org.apache.harmony.security.provider.crypto.RandomBitsSupplier$1
org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl
org.apache.harmony.security.provider.crypto.SHA1_Data
org.apache.harmony.security.utils.AlgNameMapper
@@ -1599,53 +1962,89 @@ org.apache.harmony.security.x501.DirectoryString
org.apache.harmony.security.x501.DirectoryString$1
org.apache.harmony.security.x501.Name
org.apache.harmony.security.x501.Name$1
+org.apache.harmony.security.x509.AlgorithmIdentifier
+org.apache.harmony.security.x509.AlgorithmIdentifier$1
+org.apache.harmony.security.x509.BasicConstraints
+org.apache.harmony.security.x509.BasicConstraints$1
+org.apache.harmony.security.x509.Certificate
+org.apache.harmony.security.x509.Certificate$1
+org.apache.harmony.security.x509.EDIPartyName
+org.apache.harmony.security.x509.EDIPartyName$1
+org.apache.harmony.security.x509.Extension
+org.apache.harmony.security.x509.Extension$1
+org.apache.harmony.security.x509.Extension$2
+org.apache.harmony.security.x509.ExtensionValue
+org.apache.harmony.security.x509.Extensions
+org.apache.harmony.security.x509.Extensions$1
org.apache.harmony.security.x509.GeneralName
-org.apache.harmony.text.BidiRun
-org.apache.harmony.text.NativeBidi
+org.apache.harmony.security.x509.GeneralName$1
+org.apache.harmony.security.x509.GeneralNames
+org.apache.harmony.security.x509.GeneralNames$1
+org.apache.harmony.security.x509.KeyUsage
+org.apache.harmony.security.x509.ORAddress
+org.apache.harmony.security.x509.ORAddress$1
+org.apache.harmony.security.x509.ORAddress$2
+org.apache.harmony.security.x509.OtherName
+org.apache.harmony.security.x509.OtherName$1
+org.apache.harmony.security.x509.SubjectPublicKeyInfo
+org.apache.harmony.security.x509.SubjectPublicKeyInfo$1
+org.apache.harmony.security.x509.TBSCertificate
+org.apache.harmony.security.x509.TBSCertificate$1
+org.apache.harmony.security.x509.Time
+org.apache.harmony.security.x509.Time$1
+org.apache.harmony.security.x509.Validity
+org.apache.harmony.security.x509.Validity$1
org.apache.harmony.xml.ExpatAttributes
org.apache.harmony.xml.ExpatParser
-org.apache.harmony.xml.ExpatParser$ClonedAttributes
-org.apache.harmony.xml.ExpatParser$CurrentAttributes
-org.apache.harmony.xml.ExpatParser$ExpatLocator
-org.apache.harmony.xml.ExpatPullParser
-org.apache.harmony.xml.ExpatPullParser$ByteDocument
-org.apache.harmony.xml.ExpatPullParser$Document
-org.apache.harmony.xml.ExpatPullParser$Document$SaxHandler
-org.apache.harmony.xml.ExpatPullParser$EndTagEvent
-org.apache.harmony.xml.ExpatPullParser$Event
-org.apache.harmony.xml.ExpatPullParser$NamespaceStack
-org.apache.harmony.xml.ExpatPullParser$NamespaceStack$Builder
-org.apache.harmony.xml.ExpatPullParser$StartDocumentEvent
-org.apache.harmony.xml.ExpatPullParser$StartTagEvent
-org.apache.harmony.xml.ExpatPullParser$TextEvent
-org.apache.harmony.xml.ExpatReader
org.apache.harmony.xnet.provider.jsse.AbstractSessionContext
org.apache.harmony.xnet.provider.jsse.AbstractSessionContext$1
+org.apache.harmony.xnet.provider.jsse.ByteArray
org.apache.harmony.xnet.provider.jsse.ClientSessionContext
+org.apache.harmony.xnet.provider.jsse.ClientSessionContext$HostAndPort
org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl
-org.apache.harmony.xnet.provider.jsse.IndexedPKIXParameters
+org.apache.harmony.xnet.provider.jsse.FileClientSessionCache
+org.apache.harmony.xnet.provider.jsse.FileClientSessionCache$Impl
org.apache.harmony.xnet.provider.jsse.JSSEProvider
-org.apache.harmony.xnet.provider.jsse.JSSEProvider$1
org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl
-org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl$1
org.apache.harmony.xnet.provider.jsse.KeyManagerImpl
org.apache.harmony.xnet.provider.jsse.NativeCrypto
org.apache.harmony.xnet.provider.jsse.NativeCrypto$SSLHandshakeCallbacks
org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl
+org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK
+org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK$MD5
+org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK$SHA1
org.apache.harmony.xnet.provider.jsse.OpenSSLProvider
+org.apache.harmony.xnet.provider.jsse.OpenSSLSessionImpl
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$MD5RSA
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA1DSA
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA1RSA
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA256RSA
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA384RSA
+org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA512RSA
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl
+org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream
+org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream
+org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplWrapper
org.apache.harmony.xnet.provider.jsse.ProtocolVersion
+org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache
org.apache.harmony.xnet.provider.jsse.SSLContextImpl
org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
org.apache.harmony.xnet.provider.jsse.ServerSessionContext
org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl
-org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$1
-org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$2
org.apache.harmony.xnet.provider.jsse.TrustManagerImpl
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateIndex
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateKeyStoreSpi
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$1
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$2
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$3
+org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$CertSelector
org.apache.http.ConnectionReuseStrategy
org.apache.http.FormattedHeader
org.apache.http.Header
+org.apache.http.HeaderElement
org.apache.http.HeaderElementIterator
org.apache.http.HeaderIterator
org.apache.http.HttpClientConnection
@@ -1662,6 +2061,7 @@ org.apache.http.HttpResponse
org.apache.http.HttpResponseFactory
org.apache.http.HttpResponseInterceptor
org.apache.http.HttpVersion
+org.apache.http.NameValuePair
org.apache.http.ProtocolVersion
org.apache.http.ReasonPhraseCatalog
org.apache.http.RequestLine
@@ -1678,6 +2078,9 @@ org.apache.http.client.RequestDirector
org.apache.http.client.ResponseHandler
org.apache.http.client.UserTokenHandler
org.apache.http.client.methods.AbortableHttpRequest
+org.apache.http.client.methods.HttpEntityEnclosingRequestBase
+org.apache.http.client.methods.HttpGet
+org.apache.http.client.methods.HttpPost
org.apache.http.client.methods.HttpRequestBase
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.params.HttpClientParams
@@ -1701,6 +2104,7 @@ org.apache.http.conn.params.ConnManagerPNames
org.apache.http.conn.params.ConnManagerParams
org.apache.http.conn.params.ConnManagerParams$1
org.apache.http.conn.params.ConnPerRoute
+org.apache.http.conn.params.ConnPerRouteBean
org.apache.http.conn.params.ConnRoutePNames
org.apache.http.conn.params.ConnRouteParams
org.apache.http.conn.routing.BasicRouteDirector
@@ -1727,6 +2131,7 @@ org.apache.http.cookie.CookieSpecFactory
org.apache.http.cookie.CookieSpecRegistry
org.apache.http.entity.AbstractHttpEntity
org.apache.http.entity.BasicHttpEntity
+org.apache.http.entity.ByteArrayEntity
org.apache.http.entity.ContentLengthStrategy
org.apache.http.entity.HttpEntityWrapper
org.apache.http.impl.AbstractHttpClientConnection
@@ -1749,6 +2154,7 @@ org.apache.http.impl.client.DefaultRedirectHandler
org.apache.http.impl.client.DefaultRequestDirector
org.apache.http.impl.client.DefaultTargetAuthenticationHandler
org.apache.http.impl.client.DefaultUserTokenHandler
+org.apache.http.impl.client.EntityEnclosingRequestWrapper
org.apache.http.impl.client.RequestWrapper
org.apache.http.impl.client.RoutedRequest
org.apache.http.impl.conn.AbstractClientConnAdapter
@@ -1787,7 +2193,9 @@ org.apache.http.impl.io.AbstractMessageParser
org.apache.http.impl.io.AbstractMessageWriter
org.apache.http.impl.io.AbstractSessionInputBuffer
org.apache.http.impl.io.AbstractSessionOutputBuffer
+org.apache.http.impl.io.ChunkedInputStream
org.apache.http.impl.io.ContentLengthInputStream
+org.apache.http.impl.io.ContentLengthOutputStream
org.apache.http.impl.io.HttpRequestWriter
org.apache.http.impl.io.HttpTransportMetricsImpl
org.apache.http.impl.io.SocketInputBuffer
@@ -1799,12 +2207,14 @@ org.apache.http.io.SessionInputBuffer
org.apache.http.io.SessionOutputBuffer
org.apache.http.message.AbstractHttpMessage
org.apache.http.message.BasicHeader
+org.apache.http.message.BasicHeaderElement
org.apache.http.message.BasicHeaderElementIterator
org.apache.http.message.BasicHeaderValueParser
org.apache.http.message.BasicHttpResponse
org.apache.http.message.BasicLineFormatter
org.apache.http.message.BasicLineParser
org.apache.http.message.BasicListHeaderIterator
+org.apache.http.message.BasicNameValuePair
org.apache.http.message.BasicRequestLine
org.apache.http.message.BasicStatusLine
org.apache.http.message.BufferedHeader
@@ -1836,99 +2246,17 @@ org.apache.http.protocol.RequestUserAgent
org.apache.http.util.ByteArrayBuffer
org.apache.http.util.CharArrayBuffer
org.apache.http.util.LangUtils
-com.android.org.bouncycastle.asn1.ASN1Choice
-com.android.org.bouncycastle.asn1.ASN1Collection
-com.android.org.bouncycastle.asn1.ASN1Collection$ASN1CollectionEnumeration
-com.android.org.bouncycastle.asn1.ASN1Encodable
-com.android.org.bouncycastle.asn1.ASN1EncodableVector
-com.android.org.bouncycastle.asn1.ASN1InputStream
-com.android.org.bouncycastle.asn1.ASN1Null
-com.android.org.bouncycastle.asn1.ASN1Object
-com.android.org.bouncycastle.asn1.ASN1OctetString
-com.android.org.bouncycastle.asn1.ASN1OctetStringParser
-com.android.org.bouncycastle.asn1.ASN1OutputStream
-com.android.org.bouncycastle.asn1.ASN1Sequence
-com.android.org.bouncycastle.asn1.ASN1SequenceParser
-com.android.org.bouncycastle.asn1.ASN1Set
-com.android.org.bouncycastle.asn1.ASN1StreamParser
-com.android.org.bouncycastle.asn1.ASN1TaggedObject
-com.android.org.bouncycastle.asn1.ASN1TaggedObjectParser
-com.android.org.bouncycastle.asn1.BERTaggedObjectParser
-com.android.org.bouncycastle.asn1.DERBitString
-com.android.org.bouncycastle.asn1.DERBoolean
-com.android.org.bouncycastle.asn1.DEREncodable
-com.android.org.bouncycastle.asn1.DEREncodableVector
-com.android.org.bouncycastle.asn1.DERFactory
-com.android.org.bouncycastle.asn1.DERIA5String
-com.android.org.bouncycastle.asn1.DERInteger
-com.android.org.bouncycastle.asn1.DERNull
-com.android.org.bouncycastle.asn1.DERObject
-com.android.org.bouncycastle.asn1.DERObjectIdentifier
-com.android.org.bouncycastle.asn1.DEROctetString
-com.android.org.bouncycastle.asn1.DEROctetStringParser
-com.android.org.bouncycastle.asn1.DEROutputStream
-com.android.org.bouncycastle.asn1.DERPrintableString
-com.android.org.bouncycastle.asn1.DERSequence
-com.android.org.bouncycastle.asn1.DERSequenceParser
-com.android.org.bouncycastle.asn1.DERSet
-com.android.org.bouncycastle.asn1.DERString
-com.android.org.bouncycastle.asn1.DERT61String
-com.android.org.bouncycastle.asn1.DERTaggedObject
-com.android.org.bouncycastle.asn1.DERTags
-com.android.org.bouncycastle.asn1.DERUTCTime
-com.android.org.bouncycastle.asn1.DERUTF8String
-com.android.org.bouncycastle.asn1.DERUniversalString
-com.android.org.bouncycastle.asn1.DefiniteLengthInputStream
-com.android.org.bouncycastle.asn1.IndefiniteLengthInputStream
-com.android.org.bouncycastle.asn1.LimitedInputStream
-com.android.org.bouncycastle.asn1.OIDTokenizer
-com.android.org.bouncycastle.asn1.OrderedTable
-com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
-com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
-com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
-com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
-com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
-com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier
-com.android.org.bouncycastle.asn1.x509.BasicConstraints
-com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
-com.android.org.bouncycastle.asn1.x509.TBSCertificateStructure
-com.android.org.bouncycastle.asn1.x509.Time
-com.android.org.bouncycastle.asn1.x509.X509CertificateStructure
-com.android.org.bouncycastle.asn1.x509.X509Extension
-com.android.org.bouncycastle.asn1.x509.X509Extensions
-com.android.org.bouncycastle.asn1.x509.X509Name
-com.android.org.bouncycastle.asn1.x509.X509NameElementList
-com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
-com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
-com.android.org.bouncycastle.crypto.Digest
-com.android.org.bouncycastle.crypto.ExtendedDigest
-com.android.org.bouncycastle.crypto.Mac
-com.android.org.bouncycastle.crypto.digests.OpenSSLDigest
-com.android.org.bouncycastle.crypto.digests.OpenSSLDigest$MD5
-com.android.org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1
-com.android.org.bouncycastle.crypto.macs.HMac
-com.android.org.bouncycastle.jce.ProviderConfigurationPermission
-com.android.org.bouncycastle.jce.interfaces.BCKeyStore
-com.android.org.bouncycastle.jce.interfaces.ConfigurableProvider
-com.android.org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
-com.android.org.bouncycastle.jce.provider.JDKKeyStore
-com.android.org.bouncycastle.jce.provider.JDKKeyStore$StoreEntry
-com.android.org.bouncycastle.jce.provider.JDKX509CertificateFactory
-com.android.org.bouncycastle.jce.provider.PEMUtil
-com.android.org.bouncycastle.jce.provider.PKCS12BagAttributeCarrierImpl
-com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi
-com.android.org.bouncycastle.jce.provider.ProviderUtil
-com.android.org.bouncycastle.jce.provider.X509CertificateObject
-com.android.org.bouncycastle.jce.provider.asymmetric.ECMappings
-com.android.org.bouncycastle.jce.provider.symmetric.AESMappings
-com.android.org.bouncycastle.util.Strings
-com.android.org.bouncycastle.util.io.Streams
+org.kxml2.io.KXmlParser
+org.kxml2.io.KXmlParser$ValueContext
org.xml.sax.Attributes
org.xml.sax.ContentHandler
+org.xml.sax.DTDHandler
+org.xml.sax.EntityResolver
+org.xml.sax.ErrorHandler
+org.xml.sax.InputSource
org.xml.sax.Locator
org.xml.sax.XMLReader
+org.xml.sax.helpers.DefaultHandler
org.xmlpull.v1.XmlPullParser
org.xmlpull.v1.XmlSerializer
sun.misc.Unsafe
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 744fa50..d617af8 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -151,7 +151,7 @@ static const char *audio_interfaces[] = {
AudioFlinger::AudioFlinger()
: BnAudioFlinger(),
mPrimaryHardwareDev(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1),
- mBtNrec(false)
+ mBtNrecIsOff(false)
{
}
@@ -751,15 +751,15 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs)
String8 value;
if (param.get(String8(AUDIO_PARAMETER_KEY_BT_NREC), value) == NO_ERROR) {
Mutex::Autolock _l(mLock);
- bool btNrec = (value == AUDIO_PARAMETER_VALUE_ON);
- if (mBtNrec != btNrec) {
+ bool btNrecIsOff = (value == AUDIO_PARAMETER_VALUE_OFF);
+ if (mBtNrecIsOff != btNrecIsOff) {
for (size_t i = 0; i < mRecordThreads.size(); i++) {
sp<RecordThread> thread = mRecordThreads.valueAt(i);
RecordThread::RecordTrack *track = thread->track();
if (track != NULL) {
audio_devices_t device = (audio_devices_t)(
thread->device() & AUDIO_DEVICE_IN_ALL);
- bool suspend = audio_is_bluetooth_sco_device(device) && btNrec;
+ bool suspend = audio_is_bluetooth_sco_device(device) && btNrecIsOff;
thread->setEffectSuspended(FX_IID_AEC,
suspend,
track->sessionId());
@@ -768,7 +768,7 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs)
track->sessionId());
}
}
- mBtNrec = btNrec;
+ mBtNrecIsOff = btNrecIsOff;
}
}
return final_result;
@@ -4394,7 +4394,7 @@ sp<AudioFlinger::RecordThread::RecordTrack> AudioFlinger::RecordThread::createR
mTrack = track.get();
// disable AEC and NS if the device is a BT SCO headset supporting those pre processings
bool suspend = audio_is_bluetooth_sco_device(
- (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrec();
+ (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrecIsOff();
setEffectSuspended_l(FX_IID_AEC, suspend, sessionId);
setEffectSuspended_l(FX_IID_NS, suspend, sessionId);
}
@@ -4619,7 +4619,7 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l()
// disable AEC and NS if the device is a BT SCO headset supporting those pre processings
if (mTrack != NULL) {
bool suspend = audio_is_bluetooth_sco_device(
- (audio_devices_t)value) && mAudioFlinger->btNrec();
+ (audio_devices_t)value) && mAudioFlinger->btNrecIsOff();
setEffectSuspended_l(FX_IID_AEC, suspend, mTrack->sessionId());
setEffectSuspended_l(FX_IID_NS, suspend, mTrack->sessionId());
}
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 1141f6c..1ceb0ec 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -210,7 +210,7 @@ public:
uint32_t getMode() { return mMode; }
- bool btNrec() { return mBtNrec; }
+ bool btNrecIsOff() { return mBtNrecIsOff; }
private:
AudioFlinger();
@@ -1389,7 +1389,7 @@ private:
DefaultKeyedVector< pid_t, sp<NotificationClient> > mNotificationClients;
volatile int32_t mNextUniqueId;
uint32_t mMode;
- bool mBtNrec;
+ bool mBtNrecIsOff;
Vector<AudioSessionRef*> mAudioSessionRefs;
};
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index bfcf8e0..e39712e 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -2491,7 +2491,8 @@ void TouchInputMapper::configure(nsecs_t when,
bool resetNeeded = false;
if (!changes || (changes & (InputReaderConfiguration::CHANGE_DISPLAY_INFO
- | InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT))) {
+ | InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT
+ | InputReaderConfiguration::CHANGE_SHOW_TOUCHES))) {
// Configure device sources, surface dimensions, orientation and
// scaling factors.
configureSurface(when, &resetNeeded);
@@ -2523,17 +2524,17 @@ void TouchInputMapper::configureParameters() {
}
}
- if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X)
+ if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_DIRECT)) {
+ // The device is a touch screen.
+ mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN;
+ } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_POINTER)) {
+ // The device is a pointing device like a track pad.
+ mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
+ } else if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X)
|| getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) {
// The device is a cursor device with a touch pad attached.
// By default don't use the touch pad to move the pointer.
mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD;
- } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_POINTER)) {
- // The device is a pointing device like a track pad.
- mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
- } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_DIRECT)) {
- // The device is a touch screen.
- mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN;
} else {
// The device is a touch pad of unknown purpose.
mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
@@ -2681,16 +2682,17 @@ void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
bool deviceModeChanged;
if (mDeviceMode != oldDeviceMode) {
deviceModeChanged = true;
+ mOrientedRanges.clear();
+ }
- if (mDeviceMode == DEVICE_MODE_POINTER) {
- if (mPointerController == NULL) {
- mPointerController = getPolicy()->obtainPointerController(getDeviceId());
- }
- } else {
- mPointerController.clear();
+ // Create pointer controller if needed.
+ if (mDeviceMode == DEVICE_MODE_POINTER ||
+ (mDeviceMode == DEVICE_MODE_DIRECT && mConfig.showTouches)) {
+ if (mPointerController == NULL) {
+ mPointerController = getPolicy()->obtainPointerController(getDeviceId());
}
-
- mOrientedRanges.clear();
+ } else {
+ mPointerController.clear();
}
bool orientationChanged = mSurfaceOrientation != orientation;
@@ -3380,7 +3382,7 @@ void TouchInputMapper::sync(nsecs_t when) {
cookPointerData();
// Dispatch the touches either directly or by translation through a pointer on screen.
- if (mPointerController != NULL) {
+ if (mDeviceMode == DEVICE_MODE_POINTER) {
for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); ) {
uint32_t id = idBits.clearFirstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
@@ -3418,6 +3420,17 @@ void TouchInputMapper::sync(nsecs_t when) {
dispatchPointerUsage(when, policyFlags, pointerUsage);
} else {
+ if (mDeviceMode == DEVICE_MODE_DIRECT
+ && mConfig.showTouches && mPointerController != NULL) {
+ mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_SPOT);
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+
+ mPointerController->setButtonState(mCurrentButtonState);
+ mPointerController->setSpots(mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ mCurrentCookedPointerData.touchingIdBits);
+ }
+
dispatchHoverExit(when, policyFlags);
dispatchTouches(when, policyFlags);
dispatchHoverEnterAndMove(when, policyFlags);
@@ -3442,7 +3455,7 @@ void TouchInputMapper::sync(nsecs_t when) {
}
void TouchInputMapper::timeoutExpired(nsecs_t when) {
- if (mPointerController != NULL) {
+ if (mDeviceMode == DEVICE_MODE_POINTER) {
if (mPointerUsage == POINTER_USAGE_GESTURES) {
dispatchPointerGestures(when, 0 /*policyFlags*/, true /*isTimeout*/);
}
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index bad96df..cd3ea37 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -56,6 +56,9 @@ struct InputReaderConfiguration {
// The display size or orientation changed.
CHANGE_DISPLAY_INFO = 1 << 2,
+ // The visible touches option changed.
+ CHANGE_SHOW_TOUCHES = 1 << 3,
+
// All devices must be reopened.
CHANGE_MUST_REOPEN = 1 << 31,
};
@@ -140,6 +143,9 @@ struct InputReaderConfiguration {
// will cover this portion of the display diagonal.
float pointerGestureZoomSpeedRatio;
+ // True to show the location of touches on the touch screen as spots.
+ bool showTouches;
+
InputReaderConfiguration() :
virtualKeyQuietTime(0),
pointerVelocityControlParameters(1.0f, 500.0f, 3000.0f, 3.0f),
@@ -155,7 +161,8 @@ struct InputReaderConfiguration {
pointerGestureSwipeTransitionAngleCosine(0.2588f), // cosine of 75 degrees
pointerGestureSwipeMaxWidthRatio(0.25f),
pointerGestureMovementSpeedRatio(0.8f),
- pointerGestureZoomSpeedRatio(0.3f) { }
+ pointerGestureZoomSpeedRatio(0.3f),
+ showTouches(false) { }
bool getDisplayInfo(int32_t displayId, bool external,
int32_t* width, int32_t* height, int32_t* orientation) const;
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 5e54d61..5ffcdc5 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -764,12 +764,18 @@ class AlarmManagerService extends IAlarmManager.Stub {
public void scheduleTimeTickEvent() {
Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());
+ final long currentTime = System.currentTimeMillis();
+ calendar.setTimeInMillis(currentTime);
calendar.add(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
-
- set(AlarmManager.RTC, calendar.getTimeInMillis(), mTimeTickSender);
+
+ // Schedule this event for the amount of time that it would take to get to
+ // the top of the next minute.
+ final long tickEventDelay = calendar.getTimeInMillis() - currentTime;
+
+ set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + tickEventDelay,
+ mTimeTickSender);
}
public void scheduleDateChangedEvent() {
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 6b64dd0..38bcebc 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -619,10 +619,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
void updateImeWindowStatusLocked() {
- if (mStatusBar != null) {
- mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
- mBackDisposition);
- }
+ setImeWindowStatus(mCurToken, mImeWindowVis, mBackDisposition);
}
@Override
@@ -995,6 +992,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
sessionState.session.finishSession();
} catch (RemoteException e) {
Slog.w(TAG, "Session failed to close due to remote exception", e);
+ mImeWindowVis = 0;
+ updateImeWindowStatusLocked();
}
}
}
@@ -1121,6 +1120,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
+ @SuppressWarnings("deprecation")
@Override
public void setImeWindowStatus(IBinder token, int vis, int backDisposition) {
int uid = Binder.getCallingUid();
@@ -2018,8 +2018,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (DEBUG) Slog.v(TAG, "Show switching menu");
final Context context = mContext;
-
final PackageManager pm = context.getPackageManager();
+ final boolean isScreenLocked = mKeyguardManager != null
+ && mKeyguardManager.isKeyguardLocked() && mKeyguardManager.isKeyguardSecure();
String lastInputMethodId = Settings.Secure.getString(context
.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
@@ -2075,7 +2076,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
final String subtypeHashCode = String.valueOf(subtype.hashCode());
// We show all enabled IMEs and subtypes when an IME is shown.
if (enabledSubtypeSet.contains(subtypeHashCode)
- && (mInputShown || !subtype.isAuxiliary())) {
+ && ((mInputShown && !isScreenLocked) || !subtype.isAuxiliary())) {
final CharSequence title;
final String mode = subtype.getMode();
title = TextUtils.concat(subtype.getDisplayName(context,
@@ -2162,8 +2163,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
});
- if (showSubtypes && mKeyguardManager != null && !(mKeyguardManager.isKeyguardLocked()
- && mKeyguardManager.isKeyguardSecure())) {
+ if (showSubtypes && !isScreenLocked) {
mDialogBuilder.setPositiveButton(
com.android.internal.R.string.configure_input_methods,
new DialogInterface.OnClickListener() {
@@ -2591,6 +2591,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
// TODO: We should change the return type from List to List<Parcelable>
+ @SuppressWarnings("rawtypes")
@Override
public List getShortcutInputMethodsAndSubtypes() {
synchronized (mMethodMap) {
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 06077dd..85d8cece 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import static android.Manifest.permission.DUMP;
import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.SET_DEFAULT;
@@ -51,10 +52,12 @@ import com.google.android.collect.Sets;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
+import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.PrintWriter;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.ArrayList;
@@ -69,7 +72,8 @@ import libcore.io.IoUtils;
/**
* @hide
*/
-class NetworkManagementService extends INetworkManagementService.Stub implements Watchdog.Monitor {
+public class NetworkManagementService extends INetworkManagementService.Stub
+ implements Watchdog.Monitor {
private static final String TAG = "NetworkManagementService";
private static final boolean DBG = false;
private static final String NETD_TAG = "NetdConnector";
@@ -87,6 +91,12 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
/** Path to {@code /proc/net/xt_qtaguid/iface_stat}. */
private final File mStatsXtIface;
+ /**
+ * Name representing {@link #setGlobalAlert(long)} limit when delivered to
+ * {@link INetworkManagementEventObserver#limitReached(String, String)}.
+ */
+ public static final String LIMIT_GLOBAL_ALERT = "globalAlert";
+
/** {@link #mStatsXtUid} headers. */
private static final String KEY_IFACE = "iface";
private static final String KEY_UID = "uid_tag_int";
@@ -281,7 +291,6 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
for (INetworkManagementEventObserver obs : mObservers) {
try {
obs.limitReached(limitName, iface);
- Slog.d(TAG, "Observer notified limit reached for " + limitName + " " + iface);
} catch (Exception ex) {
Slog.w(TAG, "Observer notifier failed", ex);
}
@@ -1024,7 +1033,6 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
final NetworkStats.Entry entry = new NetworkStats.Entry();
- final HashSet<String> activeIfaces = Sets.newHashSet();
final ArrayList<String> values = Lists.newArrayList();
BufferedReader reader = null;
@@ -1050,26 +1058,24 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
entry.txBytes = Long.parseLong(values.get(9));
entry.txPackets = Long.parseLong(values.get(10));
- activeIfaces.add(entry.iface);
stats.addValues(entry);
} catch (NumberFormatException e) {
Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
}
}
+ } catch (NullPointerException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
} catch (IOException e) {
- Slog.w(TAG, "problem parsing stats: " + e);
+ throw new IllegalStateException("problem parsing stats: " + e);
} finally {
IoUtils.closeQuietly(reader);
}
- if (DBG) Slog.d(TAG, "recorded active stats from " + activeIfaces);
-
- // splice in stats from any disabled ifaces
+ // splice in historical stats not reflected in mStatsIface
if (mBandwidthControlEnabled) {
- final HashSet<String> xtIfaces = Sets.newHashSet(fileListWithoutNull(mStatsXtIface));
- xtIfaces.removeAll(activeIfaces);
-
- for (String iface : xtIfaces) {
+ for (String iface : fileListWithoutNull(mStatsXtIface)) {
final File ifacePath = new File(mStatsXtIface, iface);
entry.iface = iface;
@@ -1081,10 +1087,8 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
- stats.addValues(entry);
+ stats.combineValues(entry);
}
-
- if (DBG) Slog.d(TAG, "recorded stale stats from " + xtIfaces);
}
return stats;
@@ -1338,8 +1342,12 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
}
}
+ } catch (NullPointerException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException("problem parsing stats: " + e);
} catch (IOException e) {
- Slog.w(TAG, "problem parsing stats: " + e);
+ throw new IllegalStateException("problem parsing stats: " + e);
} finally {
IoUtils.closeQuietly(reader);
}
@@ -1568,4 +1576,26 @@ class NetworkManagementService extends INetworkManagementService.Stub implements
mConnector.monitor();
}
}
+
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ mContext.enforceCallingOrSelfPermission(DUMP, TAG);
+
+ pw.print("Bandwidth control enabled: "); pw.println(mBandwidthControlEnabled);
+
+ synchronized (mQuotaLock) {
+ pw.print("Active quota ifaces: "); pw.println(mActiveQuotaIfaces.toString());
+ pw.print("Active alert ifaces: "); pw.println(mActiveAlertIfaces.toString());
+ }
+
+ synchronized (mUidRejectOnQuota) {
+ pw.print("UID reject on quota ifaces: [");
+ final int size = mUidRejectOnQuota.size();
+ for (int i = 0; i < size; i++) {
+ pw.print(mUidRejectOnQuota.keyAt(i));
+ if (i < size - 1) pw.print(",");
+ }
+ pw.println("]");
+ }
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index e6f92a5..d0e8b5e 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -182,7 +182,7 @@ class ServerThread extends Thread {
// only initialize the power service after we have started the
// lights service, content providers and the battery service.
- power.init(context, lights, ActivityManagerService.getDefault(), battery);
+ power.init(context, lights, ActivityManagerService.self(), battery);
Slog.i(TAG, "Alarm Manager");
alarm = new AlarmManagerService(context);
@@ -197,8 +197,7 @@ class ServerThread extends Thread {
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
- ((ActivityManagerService)ServiceManager.getService("activity"))
- .setWindowManager(wm);
+ ActivityManagerService.self().setWindowManager(wm);
// Skip Bluetooth if we have an emulator kernel
// TODO: Use a more reliable check to see if this product should
@@ -265,7 +264,7 @@ class ServerThread extends Thread {
} catch (Throwable e) {
reportWtf("making display ready", e);
}
-
+
try {
pm.performBootDexOpt();
} catch (Throwable e) {
@@ -618,8 +617,7 @@ class ServerThread extends Thread {
// where third party code can really run (but before it has actually
// started launching the initial applications), for us to complete our
// initialization.
- ((ActivityManagerService)ActivityManagerNative.getDefault())
- .systemReady(new Runnable() {
+ ActivityManagerService.self().systemReady(new Runnable() {
public void run() {
Slog.i(TAG, "Making services ready");
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index dd54c16..4447ad0 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -421,11 +421,13 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
modified = true;
}
if (modified) {
- Slog.d(TAG, "onDataConnectionStateChanged(" + state + ", " + networkType + ")");
+ Slog.d(TAG, "onDataConnectionStateChanged(" + mDataConnectionState
+ + ", " + mDataConnectionNetworkType + ")");
for (Record r : mRecords) {
if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try {
- r.callback.onDataConnectionStateChanged(state, networkType);
+ r.callback.onDataConnectionStateChanged(mDataConnectionState,
+ mDataConnectionNetworkType);
} catch (RemoteException ex) {
mRemoveList.add(r.binder);
}
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java
index 18ddabd..f6c369e 100644
--- a/services/java/com/android/server/TextServicesManagerService.java
+++ b/services/java/com/android/server/TextServicesManagerService.java
@@ -131,6 +131,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
if (DBG) Slog.d(TAG, "Add: " + compName);
try {
final SpellCheckerInfo sci = new SpellCheckerInfo(context, ri);
+ if (sci.getSubtypeCount() <= 0) {
+ Slog.w(TAG, "Skipping text service " + compName
+ + ": it does not contain subtypes.");
+ continue;
+ }
list.add(sci);
map.put(sci.getId(), sci);
} catch (XmlPullParserException e) {
@@ -173,7 +178,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
@Override
public SpellCheckerInfo getCurrentSpellChecker(String locale) {
synchronized (mSpellCheckerMap) {
- String curSpellCheckerId =
+ final String curSpellCheckerId =
Settings.Secure.getString(mContext.getContentResolver(),
Settings.Secure.SELECTED_SPELL_CHECKER);
if (DBG) {
@@ -186,9 +191,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
}
+ // TODO: Respect allowImplicitlySelectedSubtype
// TODO: Save SpellCheckerSubtype by supported languages.
@Override
- public SpellCheckerSubtype getCurrentSpellCheckerSubtype(String locale) {
+ public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
+ String locale, boolean allowImplicitlySelectedSubtype) {
synchronized (mSpellCheckerMap) {
final String subtypeHashCodeStr =
Settings.Secure.getString(mContext.getContentResolver(),
@@ -197,21 +204,46 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
Slog.w(TAG, "getCurrentSpellChecker: " + subtypeHashCodeStr);
}
final SpellCheckerInfo sci = getCurrentSpellChecker(null);
- if (sci.getSubtypeCount() == 0) {
+ if (sci == null || sci.getSubtypeCount() == 0) {
+ if (DBG) {
+ Slog.w(TAG, "Subtype not found.");
+ }
return null;
}
- if (TextUtils.isEmpty(subtypeHashCodeStr)) {
- // Return the first Subtype if there is no settings for the current subtype.
- return sci.getSubtypeAt(0);
+ final int hashCode;
+ if (!TextUtils.isEmpty(subtypeHashCodeStr)) {
+ hashCode = Integer.valueOf(subtypeHashCodeStr);
+ } else {
+ hashCode = 0;
}
- final int hashCode = Integer.valueOf(subtypeHashCodeStr);
+ if (hashCode == 0 && !allowImplicitlySelectedSubtype) {
+ return null;
+ }
+ final String systemLocale =
+ mContext.getResources().getConfiguration().locale.toString();
+ SpellCheckerSubtype candidate = null;
for (int i = 0; i < sci.getSubtypeCount(); ++i) {
final SpellCheckerSubtype scs = sci.getSubtypeAt(i);
- if (scs.hashCode() == hashCode) {
+ if (hashCode == 0) {
+ if (systemLocale.equals(locale)) {
+ return scs;
+ } else if (candidate == null) {
+ final String scsLocale = scs.getLocale();
+ if (systemLocale.length() >= 2
+ && scsLocale.length() >= 2
+ && systemLocale.substring(0, 2).equals(
+ scsLocale.substring(0, 2))) {
+ candidate = scs;
+ }
+ }
+ } else if (scs.hashCode() == hashCode) {
+ if (DBG) {
+ Slog.w(TAG, "Return subtype " + scs.hashCode());
+ }
return scs;
}
}
- return sci.getSubtypeAt(0);
+ return candidate;
}
}
@@ -283,6 +315,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
return;
}
+ @Override
+ public boolean isSpellCheckerEnabled() {
+ synchronized(mSpellCheckerMap) {
+ return isSpellCheckerEnabledLocked();
+ }
+ }
+
private void startSpellCheckerServiceInnerLocked(SpellCheckerInfo info, String locale,
ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener,
int uid, Bundle bundle) {
@@ -354,7 +393,21 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
"Requires permission "
+ android.Manifest.permission.WRITE_SECURE_SETTINGS);
}
- setCurrentSpellCheckerLocked(hashCode);
+ setCurrentSpellCheckerSubtypeLocked(hashCode);
+ }
+ }
+
+ @Override
+ public void setSpellCheckerEnabled(boolean enabled) {
+ synchronized(mSpellCheckerMap) {
+ if (mContext.checkCallingOrSelfPermission(
+ android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException(
+ "Requires permission "
+ + android.Manifest.permission.WRITE_SECURE_SETTINGS);
+ }
+ setSpellCheckerEnabledLocked(enabled);
}
}
@@ -363,35 +416,64 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
Slog.w(TAG, "setCurrentSpellChecker: " + sciId);
}
if (TextUtils.isEmpty(sciId) || !mSpellCheckerMap.containsKey(sciId)) return;
+ final SpellCheckerInfo currentSci = getCurrentSpellChecker(null);
+ if (currentSci != null && currentSci.getId().equals(sciId)) {
+ // Do nothing if the current spell checker is same as new spell checker.
+ return;
+ }
final long ident = Binder.clearCallingIdentity();
try {
Settings.Secure.putString(mContext.getContentResolver(),
Settings.Secure.SELECTED_SPELL_CHECKER, sciId);
+ setCurrentSpellCheckerSubtypeLocked(0);
} finally {
Binder.restoreCallingIdentity(ident);
}
}
- private void setCurrentSpellCheckerLocked(int hashCode) {
+ private void setCurrentSpellCheckerSubtypeLocked(int hashCode) {
if (DBG) {
Slog.w(TAG, "setCurrentSpellCheckerSubtype: " + hashCode);
}
final SpellCheckerInfo sci = getCurrentSpellChecker(null);
- if (sci == null) return;
- boolean found = false;
- for (int i = 0; i < sci.getSubtypeCount(); ++i) {
+ int tempHashCode = 0;
+ for (int i = 0; sci != null && i < sci.getSubtypeCount(); ++i) {
if(sci.getSubtypeAt(i).hashCode() == hashCode) {
- found = true;
+ tempHashCode = hashCode;
break;
}
}
- if (!found) {
- return;
- }
final long ident = Binder.clearCallingIdentity();
try {
Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, String.valueOf(hashCode));
+ Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, String.valueOf(tempHashCode));
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ private void setSpellCheckerEnabledLocked(boolean enabled) {
+ if (DBG) {
+ Slog.w(TAG, "setSpellCheckerEnabled: " + enabled);
+ }
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.SPELL_CHECKER_ENABLED, enabled ? 1 : 0);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ private boolean isSpellCheckerEnabledLocked() {
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ final boolean retval = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.SPELL_CHECKER_ENABLED, 1) == 1;
+ if (DBG) {
+ Slog.w(TAG, "getSpellCheckerEnabled: " + retval);
+ }
+ return retval;
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index 24b6ac3..2155147 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -532,9 +532,12 @@ public class ThrottleService extends IThrottleManager.Stub {
mLastRead = 0;
mLastWrite = 0;
}
+ } catch (IllegalStateException e) {
+ Slog.e(TAG, "problem during onPollAlarm: " + e);
} catch (RemoteException e) {
- Slog.e(TAG, "got remoteException in onPollAlarm:" + e);
+ Slog.e(TAG, "problem during onPollAlarm: " + e);
}
+
// don't count this data if we're roaming.
boolean roaming = "true".equals(
SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ISROAMING));
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index 9765f2a..6ceccaf 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -75,7 +75,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
static final String TAG = "WallpaperService";
static final boolean DEBUG = false;
- Object mLock = new Object();
+ final Object mLock = new Object[0];
/**
* Minimum time between crashes of a wallpaper service for us to consider
@@ -118,9 +118,10 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
File changedFile = new File(WALLPAPER_DIR, path);
if (WALLPAPER_FILE.equals(changedFile)) {
notifyCallbacksLocked();
- if (mWallpaperComponent == null ||
- mWallpaperComponent.equals(mImageWallpaperComponent)) {
- bindWallpaperComponentLocked(mWallpaperComponent, true);
+ if (mWallpaperComponent == null || mImageWallpaperPending) {
+ mImageWallpaperPending = false;
+ bindWallpaperComponentLocked(mImageWallpaperComponent, true);
+ saveSettingsLocked();
}
}
}
@@ -133,7 +134,12 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
int mWidth = -1;
int mHeight = -1;
-
+
+ /**
+ * Client is currently writing a new image wallpaper.
+ */
+ boolean mImageWallpaperPending;
+
/**
* Resource name if using a picture from the wallpaper gallery
*/
@@ -343,6 +349,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
}
final long ident = Binder.clearCallingIdentity();
try {
+ mImageWallpaperPending = false;
bindWallpaperComponentLocked(null, false);
} catch (IllegalArgumentException e) {
// This can happen if the default wallpaper component doesn't
@@ -433,9 +440,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
try {
ParcelFileDescriptor pfd = updateWallpaperBitmapLocked(name);
if (pfd != null) {
- // Bind the wallpaper to an ImageWallpaper
- bindWallpaperComponentLocked(mImageWallpaperComponent, false);
- saveSettingsLocked();
+ mImageWallpaperPending = true;
}
return pfd;
} finally {
@@ -463,6 +468,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
synchronized (mLock) {
final long ident = Binder.clearCallingIdentity();
try {
+ mImageWallpaperPending = false;
bindWallpaperComponentLocked(name, false);
} finally {
Binder.restoreCallingIdentity(ident);
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index af01c5b..09ddc2f 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -40,7 +40,6 @@ import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.TextUtils.SimpleStringSplitter;
@@ -72,7 +71,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
/**
* This class is instantiated by the system as a system level service and can be
@@ -871,10 +869,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
boolean mIsAutomation;
- final Callback mCallback = new Callback();
-
- final AtomicInteger mInteractionIdCounter = new AtomicInteger();
-
final Rect mTempBounds = new Rect();
// the events pending events to be dispatched to this service
@@ -974,14 +968,16 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
}
- public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId)
+ public float findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId,
+ int interactionId, IAccessibilityInteractionConnectionCallback callback,
+ long interrogatingTid)
throws RemoteException {
IAccessibilityInteractionConnection connection = null;
synchronized (mLock) {
mSecurityPolicy.enforceCanRetrieveWindowContent(this);
final boolean permissionGranted = mSecurityPolicy.canRetrieveWindowContent(this);
if (!permissionGranted) {
- return null;
+ return 0;
} else {
connection = getConnectionToRetrievalAllowingWindowLocked();
if (connection == null) {
@@ -989,22 +985,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
Slog.e(LOG_TAG, "No interaction connection to a retrieve "
+ "allowing window.");
}
- return null;
+ return 0;
}
}
}
+ final int interrogatingPid = Binder.getCallingPid();
final long identityToken = Binder.clearCallingIdentity();
try {
- final int interactionId = mInteractionIdCounter.getAndIncrement();
- connection.findAccessibilityNodeInfoByViewId(viewId, interactionId, mCallback);
- AccessibilityNodeInfo info = mCallback.getFindAccessibilityNodeInfoResultAndClear(
- interactionId);
- if (info != null) {
- applyCompatibilityScaleIfNeeded(info);
- info.setConnection(this);
- info.setSealed(true);
- }
- return info;
+ connection.findAccessibilityNodeInfoByViewId(viewId, interactionId, callback,
+ interrogatingPid, interrogatingTid);
} catch (RemoteException re) {
if (DEBUG) {
Slog.e(LOG_TAG, "Error finding node.");
@@ -1012,51 +1001,44 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
} finally {
Binder.restoreCallingIdentity(identityToken);
}
- return null;
+ return getCompatibilityScale(mSecurityPolicy.getRetrievalAllowingWindowLocked());
}
- public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewTextInActiveWindow(
- String text) throws RemoteException {
+ public float findAccessibilityNodeInfosByViewTextInActiveWindow(
+ String text, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long threadId)
+ throws RemoteException {
return findAccessibilityNodeInfosByViewText(text,
- mSecurityPolicy.mRetrievalAlowingWindowId, View.NO_ID);
+ mSecurityPolicy.mRetrievalAlowingWindowId, View.NO_ID, interactionId, callback,
+ threadId);
}
- public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewText(String text,
- int accessibilityWindowId, int accessibilityViewId) throws RemoteException {
+ public float findAccessibilityNodeInfosByViewText(String text,
+ int accessibilityWindowId, int accessibilityViewId, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
+ throws RemoteException {
IAccessibilityInteractionConnection connection = null;
synchronized (mLock) {
mSecurityPolicy.enforceCanRetrieveWindowContent(this);
final boolean permissionGranted =
mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId);
if (!permissionGranted) {
- return null;
+ return 0;
} else {
connection = getConnectionToRetrievalAllowingWindowLocked();
if (connection == null) {
if (DEBUG) {
Slog.e(LOG_TAG, "No interaction connection to focused window.");
}
- return null;
+ return 0;
}
}
}
+ final int interrogatingPid = Binder.getCallingPid();
final long identityToken = Binder.clearCallingIdentity();
try {
- final int interactionId = mInteractionIdCounter.getAndIncrement();
connection.findAccessibilityNodeInfosByViewText(text, accessibilityViewId,
- interactionId, mCallback);
- List<AccessibilityNodeInfo> infos =
- mCallback.getFindAccessibilityNodeInfosResultAndClear(interactionId);
- if (infos != null) {
- final int infoCount = infos.size();
- for (int i = 0; i < infoCount; i++) {
- AccessibilityNodeInfo info = infos.get(i);
- applyCompatibilityScaleIfNeeded(info);
- info.setConnection(this);
- info.setSealed(true);
- }
- }
- return infos;
+ interactionId, callback, interrogatingPid, interrogatingTid);
} catch (RemoteException re) {
if (DEBUG) {
Slog.e(LOG_TAG, "Error finding node.");
@@ -1064,18 +1046,20 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
} finally {
Binder.restoreCallingIdentity(identityToken);
}
- return null;
+ return getCompatibilityScale(accessibilityWindowId);
}
- public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId(
- int accessibilityWindowId, int accessibilityViewId) throws RemoteException {
+ public float findAccessibilityNodeInfoByAccessibilityId(int accessibilityWindowId,
+ int accessibilityViewId, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
+ throws RemoteException {
IAccessibilityInteractionConnection connection = null;
synchronized (mLock) {
mSecurityPolicy.enforceCanRetrieveWindowContent(this);
final boolean permissionGranted =
mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId);
if (!permissionGranted) {
- return null;
+ return 0;
} else {
connection = mWindowIdToInteractionConnectionMap.get(accessibilityWindowId);
if (connection == null) {
@@ -1083,23 +1067,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
Slog.e(LOG_TAG, "No interaction connection to window: "
+ accessibilityWindowId);
}
- return null;
+ return 0;
}
}
}
+ final int interrogatingPid = Binder.getCallingPid();
final long identityToken = Binder.clearCallingIdentity();
try {
- final int interactionId = mInteractionIdCounter.getAndIncrement();
connection.findAccessibilityNodeInfoByAccessibilityId(accessibilityViewId,
- interactionId, mCallback);
- AccessibilityNodeInfo info =
- mCallback.getFindAccessibilityNodeInfoResultAndClear(interactionId);
- if (info != null) {
- applyCompatibilityScaleIfNeeded(info);
- info.setConnection(this);
- info.setSealed(true);
- }
- return info;
+ interactionId, callback, interrogatingPid, interrogatingTid);
} catch (RemoteException re) {
if (DEBUG) {
Slog.e(LOG_TAG, "Error requesting node with accessibilityViewId: "
@@ -1108,11 +1084,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
} finally {
Binder.restoreCallingIdentity(identityToken);
}
- return null;
+ return getCompatibilityScale(accessibilityWindowId);
}
public boolean performAccessibilityAction(int accessibilityWindowId,
- int accessibilityViewId, int action) {
+ int accessibilityViewId, int action, int interactionId,
+ IAccessibilityInteractionConnectionCallback callback, long interrogatingTid) {
IAccessibilityInteractionConnection connection = null;
synchronized (mLock) {
final boolean permissionGranted = mSecurityPolicy.canPerformActionLocked(this,
@@ -1130,12 +1107,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
}
}
+ final int interrogatingPid = Binder.getCallingPid();
final long identityToken = Binder.clearCallingIdentity();
try {
- final int interactionId = mInteractionIdCounter.getAndIncrement();
connection.performAccessibilityAction(accessibilityViewId, action, interactionId,
- mCallback);
- return mCallback.getPerformAccessibilityActionResult(interactionId);
+ callback, interrogatingPid, interrogatingTid);
} catch (RemoteException re) {
if (DEBUG) {
Slog.e(LOG_TAG, "Error requesting node with accessibilityViewId: "
@@ -1144,7 +1120,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
} finally {
Binder.restoreCallingIdentity(identityToken);
}
- return false;
+ return true;
}
public void onServiceDisconnected(ComponentName componentName) {
@@ -1173,22 +1149,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
return mWindowIdToInteractionConnectionMap.get(windowId);
}
- private void applyCompatibilityScaleIfNeeded(AccessibilityNodeInfo info) {
- IBinder windowToken = mWindowIdToWindowTokenMap.get(info.getWindowId());
- final float scale = mWindowManagerService.getWindowCompatibilityScale(windowToken);
-
- if (scale == 1.0f) {
- return;
- }
-
- Rect bounds = mTempBounds;
- info.getBoundsInParent(bounds);
- bounds.scale(scale);
- info.setBoundsInParent(bounds);
-
- info.getBoundsInScreen(bounds);
- bounds.scale(scale);
- info.setBoundsInScreen(bounds);
+ private float getCompatibilityScale(int windowId) {
+ IBinder windowToken = mWindowIdToWindowTokenMap.get(windowId);
+ return mWindowManagerService.getWindowCompatibilityScale(windowToken);
}
}
@@ -1275,99 +1238,4 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
}
}
-
- final class Callback extends IAccessibilityInteractionConnectionCallback.Stub {
- private static final long TIMEOUT_INTERACTION_MILLIS = 5000;
-
- private int mInteractionId = -1;
- private AccessibilityNodeInfo mFindAccessibilityNodeInfoResult;
- private List<AccessibilityNodeInfo> mFindAccessibilityNodeInfosResult;
- private boolean mPerformAccessibilityActionResult;
-
- public void setFindAccessibilityNodeInfoResult(AccessibilityNodeInfo info,
- int interactionId) {
- synchronized (mLock) {
- if (interactionId > mInteractionId) {
- mFindAccessibilityNodeInfoResult = info;
- mInteractionId = interactionId;
- }
- mLock.notifyAll();
- }
- }
-
- public AccessibilityNodeInfo getFindAccessibilityNodeInfoResultAndClear(int interactionId) {
- synchronized (mLock) {
- waitForResultTimedLocked(TIMEOUT_INTERACTION_MILLIS, interactionId);
- AccessibilityNodeInfo result = mFindAccessibilityNodeInfoResult;
- clearLocked();
- return result;
- }
- }
-
- public void setFindAccessibilityNodeInfosResult(List<AccessibilityNodeInfo> infos,
- int interactionId) {
- synchronized (mLock) {
- if (interactionId > mInteractionId) {
- mFindAccessibilityNodeInfosResult = infos;
- mInteractionId = interactionId;
- }
- mLock.notifyAll();
- }
- }
-
- public List<AccessibilityNodeInfo> getFindAccessibilityNodeInfosResultAndClear(
- int interactionId) {
- synchronized (mLock) {
- waitForResultTimedLocked(TIMEOUT_INTERACTION_MILLIS, interactionId);
- List<AccessibilityNodeInfo> result = mFindAccessibilityNodeInfosResult;
- clearLocked();
- return result;
- }
- }
-
- public void setPerformAccessibilityActionResult(boolean succeeded, int interactionId) {
- synchronized (mLock) {
- if (interactionId > mInteractionId) {
- mPerformAccessibilityActionResult = succeeded;
- mInteractionId = interactionId;
- }
- mLock.notifyAll();
- }
- }
-
- public boolean getPerformAccessibilityActionResult(int interactionId) {
- synchronized (mLock) {
- waitForResultTimedLocked(TIMEOUT_INTERACTION_MILLIS, interactionId);
- final boolean result = mPerformAccessibilityActionResult;
- clearLocked();
- return result;
- }
- }
-
- public void clearLocked() {
- mInteractionId = -1;
- mFindAccessibilityNodeInfoResult = null;
- mFindAccessibilityNodeInfosResult = null;
- mPerformAccessibilityActionResult = false;
- }
-
- private void waitForResultTimedLocked(long waitTimeMillis, int interactionId) {
- final long startTimeMillis = SystemClock.uptimeMillis();
- while (true) {
- try {
- if (mInteractionId == interactionId) {
- return;
- }
- final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
- waitTimeMillis = TIMEOUT_INTERACTION_MILLIS - elapsedTimeMillis;
- if (waitTimeMillis <= 0) {
- return;
- }
- mLock.wait(waitTimeMillis);
- } catch (InterruptedException ie) {
- /* ignore */
- }
- }
- }
- }
}
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index 4ad2916..496210c 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -21,11 +21,8 @@ import static android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATI
import android.content.Context;
import android.os.Handler;
-import android.os.SystemClock;
import android.util.Slog;
import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
import android.view.ViewConfiguration;
import android.view.WindowManagerPolicy;
import android.view.accessibility.AccessibilityEvent;
@@ -75,11 +72,6 @@ public class TouchExplorer implements Explorer {
// Invalid pointer ID.
private static final int INVALID_POINTER_ID = -1;
- // The coefficient by which to multiply
- // ViewConfiguration.#getScaledTouchExplorationTapSlop()
- // to compute #mDraggingDistance.
- private static final int COEFFICIENT_DRAGGING_DISTANCE = 2;
-
// The time slop in milliseconds for activating an item after it has
// been touch explored. Tapping on an item within this slop will perform
// a click and tapping and holding down a long press.
@@ -95,23 +87,14 @@ public class TouchExplorer implements Explorer {
private static final float MIN_ANGLE_COS = 0.866025404f; // cos(pi/6)
// The delay for sending a hover enter event.
- private static final long DELAY_SEND_HOVER_MOVE = 200;
+ private static final long DELAY_SEND_HOVER_ENTER = 200;
+
+ // Constant referring to the ids bits of all pointers.
+ private static final int ALL_POINTER_ID_BITS = 0xFFFFFFFF;
// Temporary array for storing pointer IDs.
private final int[] mTempPointerIds = new int[MAX_POINTER_COUNT];
- // Temporary array for storing PointerProperties
- private final PointerProperties[] mTempPointerProperties =
- PointerProperties.createArray(MAX_POINTER_COUNT);
-
- // Temporary array for storing PointerCoords
- private final PointerCoords[] mTempPointerCoords =
- PointerCoords.createArray(MAX_POINTER_COUNT);
-
- // The maximal distance between two pointers so they are
- // considered to be performing a drag operation.
- private final float mDraggingDistance;
-
// The distance from the last touch explored location tapping within
// which would perform a click and tapping and holding a long press.
private final int mTouchExplorationTapSlop;
@@ -159,7 +142,6 @@ public class TouchExplorer implements Explorer {
mInputFilter = inputFilter;
mTouchExplorationTapSlop =
ViewConfiguration.get(context).getScaledTouchExplorationTapSlop();
- mDraggingDistance = mTouchExplorationTapSlop * COEFFICIENT_DRAGGING_DISTANCE;
mPointerTracker = new PointerTracker(context);
mHandler = new Handler(context.getMainLooper());
mSendHoverDelayed = new SendHoverDelayed();
@@ -220,18 +202,21 @@ public class TouchExplorer implements Explorer {
+ "touch exploring state!");
}
case 1: {
- // Send hover if pending.
- mSendHoverDelayed.forceSendAndRemove();
+ mSendHoverDelayed.remove();
// Send a hover for every finger down so the user gets feedback.
final int pointerId = pointerTracker.getPrimaryActivePointerId();
final int pointerIdBits = (1 << pointerId);
final int lastAction = pointerTracker.getLastInjectedHoverAction();
- // If a hover enter for another pointer is delivered we send move.
- final int action = (lastAction == MotionEvent.ACTION_HOVER_ENTER)
- ? MotionEvent.ACTION_HOVER_MOVE
- : MotionEvent.ACTION_HOVER_ENTER;
- mSendHoverDelayed.post(event, action, pointerIdBits, policyFlags,
- DELAY_SEND_HOVER_MOVE);
+
+ // Deliver hover enter with a delay to have a change to detect
+ // whether the user actually starts a scrolling gesture.
+ if (lastAction == MotionEvent.ACTION_HOVER_EXIT) {
+ mSendHoverDelayed.post(event, MotionEvent.ACTION_HOVER_ENTER,
+ pointerIdBits, policyFlags, DELAY_SEND_HOVER_ENTER);
+ } else {
+ sendMotionEvent(event, MotionEvent.ACTION_HOVER_MOVE, pointerIdBits,
+ policyFlags);
+ }
if (mLastTouchExploreEvent == null) {
break;
@@ -318,12 +303,11 @@ public class TouchExplorer implements Explorer {
}
} break;
case 2: {
- mSendHoverDelayed.forceSendAndRemove();
+ mSendHoverDelayed.remove();
mPerformLongPressDelayed.remove();
// We want to no longer hover over the location so subsequent
// touch at the same spot will generate a hover enter.
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT, pointerIdBits,
- policyFlags);
+ ensureHoverExitSent(event, pointerIdBits, policyFlags);
if (isDraggingGesture(event)) {
// Two pointers moving in the same direction within
@@ -340,6 +324,7 @@ public class TouchExplorer implements Explorer {
} else {
// Two pointers moving arbitrary are delegated to the view hierarchy.
mCurrentState = STATE_DELEGATING;
+ mSendHoverDelayed.remove();
if (mTouchExploreGestureInProgress) {
sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_END);
mTouchExploreGestureInProgress = false;
@@ -349,12 +334,11 @@ public class TouchExplorer implements Explorer {
}
} break;
default: {
- mSendHoverDelayed.forceSendAndRemove();
+ mSendHoverDelayed.remove();
mPerformLongPressDelayed.remove();
// We want to no longer hover over the location so subsequent
// touch at the same spot will generate a hover enter.
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT, pointerIdBits,
- policyFlags);
+ ensureHoverExitSent(event, pointerIdBits, policyFlags);
// More than two pointers are delegated to the view hierarchy.
mCurrentState = STATE_DELEGATING;
@@ -379,8 +363,9 @@ public class TouchExplorer implements Explorer {
break;
}
- mSendHoverDelayed.forceSendAndRemove();
mPerformLongPressDelayed.remove();
+ mSendHoverDelayed.forceSendAndRemove();
+ ensureHoverExitSent(event, pointerIdBits, policyFlags);
// If touch exploring announce the end of the gesture.
// Also do not click on the last explored location.
@@ -388,11 +373,6 @@ public class TouchExplorer implements Explorer {
mTouchExploreGestureInProgress = false;
mLastTouchExploreEvent = MotionEvent.obtain(event);
sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_END);
- final int lastAction = mPointerTracker.getLastInjectedHoverAction();
- if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT,
- pointerIdBits, policyFlags);
- }
break;
}
@@ -404,11 +384,6 @@ public class TouchExplorer implements Explorer {
final long exploreTime = mLastTouchExploreEvent.getEventTime();
final long deltaTime = eventTime - exploreTime;
if (deltaTime > ACTIVATION_TIME_SLOP) {
- final int lastAction = mPointerTracker.getLastInjectedHoverAction();
- if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT,
- pointerIdBits, policyFlags);
- }
mLastTouchExploreEvent = MotionEvent.obtain(event);
break;
}
@@ -421,11 +396,6 @@ public class TouchExplorer implements Explorer {
- event.getY(pointerIndex);
final float deltaMove = (float) Math.hypot(deltaX, deltaY);
if (deltaMove > mTouchExplorationTapSlop) {
- final int lastAction = mPointerTracker.getLastInjectedHoverAction();
- if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT,
- pointerIdBits, policyFlags);
- }
mLastTouchExploreEvent = MotionEvent.obtain(event);
break;
}
@@ -434,12 +404,6 @@ public class TouchExplorer implements Explorer {
sendActionDownAndUp(mLastTouchExploreEvent, policyFlags);
mLastTouchExploreEvent = null;
} else {
- mSendHoverDelayed.forceSendAndRemove();
- final int lastAction = mPointerTracker.getLastInjectedHoverAction();
- if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT,
- pointerIdBits, policyFlags);
- }
mLastTouchExploreEvent = MotionEvent.obtain(event);
}
} break;
@@ -448,13 +412,9 @@ public class TouchExplorer implements Explorer {
case MotionEvent.ACTION_CANCEL: {
mSendHoverDelayed.remove();
mPerformLongPressDelayed.remove();
- final int lastAction = pointerTracker.getLastInjectedHoverAction();
- if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
- final int pointerId = pointerTracker.getPrimaryActivePointerId();
- final int pointerIdBits = (1 << pointerId);
- sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT, pointerIdBits,
- policyFlags);
- }
+ final int pointerId = pointerTracker.getPrimaryActivePointerId();
+ final int pointerIdBits = (1 << pointerId);
+ ensureHoverExitSent(event, pointerIdBits, policyFlags);
clear();
} break;
}
@@ -540,7 +500,8 @@ public class TouchExplorer implements Explorer {
// a given distance and if such exist send them to the view hierarchy
final int notInjectedCount = mPointerTracker.getNotInjectedActivePointerCount();
if (notInjectedCount > 0) {
- sendDownForAllActiveNotInjectedPointers(event, policyFlags);
+ MotionEvent prototype = MotionEvent.obtain(event);
+ sendDownForAllActiveNotInjectedPointers(prototype, policyFlags);
}
} break;
case MotionEvent.ACTION_POINTER_UP: {
@@ -565,42 +526,47 @@ public class TouchExplorer implements Explorer {
* @param policyFlags The policy flags associated with the event.
*/
private void sendDownForAllActiveNotInjectedPointers(MotionEvent prototype, int policyFlags) {
- final PointerProperties[] pointerProperties = mTempPointerProperties;
- final PointerCoords[] pointerCoords = mTempPointerCoords;
final PointerTracker pointerTracker = mPointerTracker;
- int pointerDataIndex = 0;
+ int pointerIdBits = 0;
+ final int pointerCount = prototype.getPointerCount();
- final int pinterCount = prototype.getPointerCount();
- for (int i = 0; i < pinterCount; i++) {
+ // Find which pointers are already injected.
+ for (int i = 0; i < pointerCount; i++) {
final int pointerId = prototype.getPointerId(i);
+ if (pointerTracker.isInjectedPointerDown(pointerId)) {
+ pointerIdBits |= (1 << pointerId);
+ }
+ }
+ // Inject the active and not injected pointers.
+ for (int i = 0; i < pointerCount; i++) {
+ final int pointerId = prototype.getPointerId(i);
// Skip inactive pointers.
if (!pointerTracker.isActivePointer(pointerId)) {
continue;
}
- // Skip already delivered pointers.
+ // Do not send event for already delivered pointers.
if (pointerTracker.isInjectedPointerDown(pointerId)) {
continue;
}
+ pointerIdBits |= (1 << pointerId);
+ final int action = computeInjectionAction(MotionEvent.ACTION_DOWN, i);
+ sendMotionEvent(prototype, action, pointerIdBits, policyFlags);
+ }
+ }
- // Populate and inject an event for the current pointer.
- prototype.getPointerProperties(i, pointerProperties[pointerDataIndex]);
- prototype.getPointerCoords(i, pointerCoords[pointerDataIndex]);
-
- final long downTime = pointerTracker.getLastInjectedDownEventTime();
- final int action = computeInjectionAction(MotionEvent.ACTION_DOWN, pointerDataIndex);
- final int pointerCount = pointerDataIndex + 1;
- final long eventTime = SystemClock.uptimeMillis();
-
- MotionEvent event = MotionEvent.obtain(downTime, eventTime,
- action, pointerCount, pointerProperties, pointerCoords,
- prototype.getMetaState(), prototype.getButtonState(),
- prototype.getXPrecision(), prototype.getYPrecision(), prototype.getDeviceId(),
- prototype.getEdgeFlags(), prototype.getSource(), prototype.getFlags());
- sendMotionEvent(event, policyFlags);
- event.recycle();
-
- pointerDataIndex++;
+ /**
+ * Ensures that hover exit has been sent.
+ *
+ * @param prototype The prototype from which to create the injected events.
+ * @param pointerIdBits The bits of the pointers to send.
+ * @param policyFlags The policy flags associated with the event.
+ */
+ private void ensureHoverExitSent(MotionEvent prototype, int pointerIdBits, int policyFlags) {
+ final int lastAction = mPointerTracker.getLastInjectedHoverAction();
+ if (lastAction != MotionEvent.ACTION_HOVER_EXIT) {
+ sendMotionEvent(prototype, MotionEvent.ACTION_HOVER_EXIT, pointerIdBits,
+ policyFlags);
}
}
@@ -613,38 +579,17 @@ public class TouchExplorer implements Explorer {
*/
private void sendUpForInjectedDownPointers(MotionEvent prototype, int policyFlags) {
final PointerTracker pointerTracker = mPointerTracker;
- final PointerProperties[] pointerProperties = mTempPointerProperties;
- final PointerCoords[] pointerCoords = mTempPointerCoords;
- int pointerDataIndex = 0;
-
- final int pointerCount = prototype.getPointerCount();
+ int pointerIdBits = 0;
+ final int pointerCount = prototype.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
final int pointerId = prototype.getPointerId(i);
-
// Skip non injected down pointers.
if (!pointerTracker.isInjectedPointerDown(pointerId)) {
continue;
}
-
- // Populate and inject event.
- prototype.getPointerProperties(i, pointerProperties[pointerDataIndex]);
- prototype.getPointerCoords(i, pointerCoords[pointerDataIndex]);
-
- final long downTime = pointerTracker.getLastInjectedDownEventTime();
- final int action = computeInjectionAction(MotionEvent.ACTION_UP, pointerDataIndex);
- final int newPointerCount = pointerDataIndex + 1;
- final long eventTime = SystemClock.uptimeMillis();
-
- MotionEvent event = MotionEvent.obtain(downTime, eventTime, action,
- newPointerCount, pointerProperties, pointerCoords,
- prototype.getMetaState(), prototype.getButtonState(),
- prototype.getXPrecision(), prototype.getYPrecision(), prototype.getDeviceId(),
- prototype.getEdgeFlags(), prototype.getSource(), prototype.getFlags());
-
- sendMotionEvent(event, policyFlags);
- event.recycle();
-
- pointerDataIndex++;
+ pointerIdBits |= (1 << pointerId);
+ final int action = computeInjectionAction(MotionEvent.ACTION_UP, i);
+ sendMotionEvent(prototype, action, pointerIdBits, policyFlags);
}
}
@@ -659,7 +604,7 @@ public class TouchExplorer implements Explorer {
// All pointers active therefore we just inject the event as is.
if (prototype.getPointerCount() == pointerTracker.getActivePointerCount()) {
- sendMotionEvent(prototype, policyFlags);
+ sendMotionEvent(prototype, prototype.getAction(), ALL_POINTER_ID_BITS, policyFlags);
return;
}
@@ -670,20 +615,27 @@ public class TouchExplorer implements Explorer {
return;
}
+ // If the action pointer going up/down is not active we have nothing to do.
+ // However, for moves we keep going to report moves of active pointers.
+ final int actionMasked = prototype.getActionMasked();
+ final int actionPointerId = prototype.getPointerId(prototype.getActionIndex());
+ if (actionMasked != MotionEvent.ACTION_MOVE) {
+ if (!pointerTracker.isActiveOrWasLastActiveUpPointer(actionPointerId)) {
+ return;
+ }
+ }
+
+ // If the pointer is active or the pointer that just went up
+ // was active we keep the pointer data in the event.
int pointerIdBits = 0;
final int pointerCount = prototype.getPointerCount();
for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
final int pointerId = prototype.getPointerId(pointerIndex);
- // If the pointer is inactive or the pointer that just went up
- // was inactive we strip the pointer data from the event.
if (pointerTracker.isActiveOrWasLastActiveUpPointer(pointerId)) {
pointerIdBits |= (1 << pointerId);
}
}
-
- MotionEvent event = prototype.split(pointerIdBits);
- sendMotionEvent(event, policyFlags);
- event.recycle();
+ sendMotionEvent(prototype, prototype.getAction(), pointerIdBits, policyFlags);
}
/**
@@ -693,26 +645,11 @@ public class TouchExplorer implements Explorer {
* @param policyFlags The policy flags associated with the event.
*/
private void sendActionDownAndUp(MotionEvent prototype, int policyFlags) {
- final PointerProperties[] pointerProperties = mTempPointerProperties;
- final PointerCoords[] pointerCoords = mTempPointerCoords;
- final int pointerIndex = prototype.getActionIndex();
-
- // Send down.
- prototype.getPointerProperties(pointerIndex, pointerProperties[0]);
- prototype.getPointerCoords(pointerIndex, pointerCoords[0]);
-
- final long downTime = SystemClock.uptimeMillis();
- MotionEvent event = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN,
- 1, pointerProperties, pointerCoords,
- prototype.getMetaState(), prototype.getButtonState(),
- prototype.getXPrecision(), prototype.getYPrecision(), prototype.getDeviceId(),
- prototype.getEdgeFlags(), prototype.getSource(), prototype.getFlags());
- sendMotionEvent(event, policyFlags);
-
- // Send up.
- event.setAction(MotionEvent.ACTION_UP);
- sendMotionEvent(event, policyFlags);
- event.recycle();
+ // Tap with the pointer that last went up - we may have inactive pointers.
+ final int pointerId = mPointerTracker.getLastReceivedUpPointerId();
+ final int pointerIdBits = (1 << pointerId);
+ sendMotionEvent(prototype, MotionEvent.ACTION_DOWN, pointerIdBits, policyFlags);
+ sendMotionEvent(prototype, MotionEvent.ACTION_UP, pointerIdBits, policyFlags);
}
/**
@@ -725,11 +662,33 @@ public class TouchExplorer implements Explorer {
*/
private void sendMotionEvent(MotionEvent prototype, int action, int pointerIdBits,
int policyFlags) {
- MotionEvent event = prototype.split(pointerIdBits);
- event.setDownTime(mPointerTracker.getLastInjectedDownEventTime());
- event.setAction(action);
- sendMotionEvent(event, policyFlags);
- event.recycle();
+ prototype.setAction(action);
+
+ MotionEvent event = null;
+ if (pointerIdBits == ALL_POINTER_ID_BITS) {
+ event = prototype;
+ } else {
+ event = prototype.split(pointerIdBits);
+ }
+ if (action == MotionEvent.ACTION_DOWN) {
+ event.setDownTime(event.getEventTime());
+ } else {
+ event.setDownTime(mPointerTracker.getLastInjectedDownEventTime());
+ }
+
+ if (DEBUG) {
+ Slog.d(LOG_TAG_INJECTED, "Injecting event: " + event + ", policyFlags=0x"
+ + Integer.toHexString(policyFlags));
+ }
+
+ // Make sure that the user will see the event.
+ policyFlags |= WindowManagerPolicy.FLAG_PASS_TO_USER;
+ mPointerTracker.onInjectedMotionEvent(event);
+ mInputFilter.sendInputEvent(event, policyFlags);
+
+ if (event != prototype) {
+ event.recycle();
+ }
}
/**
@@ -787,19 +746,16 @@ public class TouchExplorer implements Explorer {
final float secondPtrX = event.getX(secondPtrIndex);
final float secondPtrY = event.getY(secondPtrIndex);
- // Check if the pointers are close enough.
- final float deltaX = firstPtrX - secondPtrX;
- final float deltaY = firstPtrY - secondPtrY;
- final float deltaMove = (float) Math.hypot(deltaX, deltaY);
- if (deltaMove > mDraggingDistance) {
- return false;
- }
-
// Check if the pointers are moving in the same direction.
final float firstDeltaX =
firstPtrX - pointerTracker.getReceivedPointerDownX(firstPtrIndex);
final float firstDeltaY =
firstPtrY - pointerTracker.getReceivedPointerDownY(firstPtrIndex);
+
+ if (firstDeltaX == 0 && firstDeltaY == 0) {
+ return true;
+ }
+
final float firstMagnitude =
(float) Math.sqrt(firstDeltaX * firstDeltaX + firstDeltaY * firstDeltaY);
final float firstXNormalized =
@@ -811,6 +767,11 @@ public class TouchExplorer implements Explorer {
secondPtrX - pointerTracker.getReceivedPointerDownX(secondPtrIndex);
final float secondDeltaY =
secondPtrY - pointerTracker.getReceivedPointerDownY(secondPtrIndex);
+
+ if (secondDeltaX == 0 && secondDeltaY == 0) {
+ return true;
+ }
+
final float secondMagnitude =
(float) Math.sqrt(secondDeltaX * secondDeltaX + secondDeltaY * secondDeltaY);
final float secondXNormalized =
@@ -839,23 +800,6 @@ public class TouchExplorer implements Explorer {
}
/**
- * Sends a motion event to the input filter for injection.
- *
- * @param event The event to send.
- * @param policyFlags The policy flags associated with the event.
- */
- private void sendMotionEvent(MotionEvent event, int policyFlags) {
- if (DEBUG) {
- Slog.d(LOG_TAG_INJECTED, "Injecting event: " + event + ", policyFlags=0x"
- + Integer.toHexString(policyFlags));
- }
- // Make sure that the user will see the event.
- policyFlags |= WindowManagerPolicy.FLAG_PASS_TO_USER;
- mPointerTracker.onInjectedMotionEvent(event);
- mInputFilter.sendInputEvent(event, policyFlags);
- }
-
- /**
* Clears the internal state of this explorer.
*/
public void clear() {
@@ -1013,6 +957,7 @@ public class TouchExplorer implements Explorer {
switch (action) {
case MotionEvent.ACTION_DOWN: {
handleInjectedPointerDown(event.getActionIndex(), event);
+ mLastInjectedDownEventTime = event.getDownTime();
} break;
case MotionEvent.ACTION_POINTER_DOWN: {
handleInjectedPointerDown(event.getActionIndex(), event);
@@ -1270,7 +1215,6 @@ public class TouchExplorer implements Explorer {
final int pointerId = event.getPointerId(pointerIndex);
final int pointerFlag = (1 << pointerId);
mInjectedPointersDown |= pointerFlag;
- mLastInjectedDownEventTime = event.getEventTime();
}
/**
@@ -1406,7 +1350,11 @@ public class TouchExplorer implements Explorer {
public void run() {
mCurrentState = STATE_DELEGATING;
// Make sure the scheduled hover exit is delivered.
- mSendHoverDelayed.forceSendAndRemove();
+ mSendHoverDelayed.remove();
+ final int pointerId = mPointerTracker.getPrimaryActivePointerId();
+ final int pointerIdBits = (1 << pointerId);
+ ensureHoverExitSent(mEvent, pointerIdBits, mPolicyFlags);
+
sendDownForAllActiveNotInjectedPointers(mEvent, mPolicyFlags);
mTouchExploreGestureInProgress = false;
mLastTouchExploreEvent = null;
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index c935733..bb5e989 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -91,7 +91,6 @@ import android.os.Environment;
import android.os.FileObserver;
import android.os.FileUtils;
import android.os.Handler;
-import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IPermissionController;
import android.os.Looper;
@@ -5518,6 +5517,48 @@ public final class ActivityManagerService extends ActivityManagerNative
return msg;
}
+ boolean incProviderCount(ProcessRecord r, ContentProviderRecord cpr) {
+ if (r != null) {
+ Integer cnt = r.conProviders.get(cpr);
+ if (DEBUG_PROVIDER) Slog.v(TAG,
+ "Adding provider requested by "
+ + r.processName + " from process "
+ + cpr.info.processName + ": " + cpr.name.flattenToShortString()
+ + " cnt=" + (cnt == null ? 1 : cnt));
+ if (cnt == null) {
+ cpr.clients.add(r);
+ r.conProviders.put(cpr, new Integer(1));
+ return true;
+ } else {
+ r.conProviders.put(cpr, new Integer(cnt.intValue()+1));
+ }
+ } else {
+ cpr.externals++;
+ }
+ return false;
+ }
+
+ boolean decProviderCount(ProcessRecord r, ContentProviderRecord cpr) {
+ if (r != null) {
+ Integer cnt = r.conProviders.get(cpr);
+ if (DEBUG_PROVIDER) Slog.v(TAG,
+ "Removing provider requested by "
+ + r.processName + " from process "
+ + cpr.info.processName + ": " + cpr.name.flattenToShortString()
+ + " cnt=" + cnt);
+ if (cnt == null || cnt.intValue() <= 1) {
+ cpr.clients.remove(r);
+ r.conProviders.remove(cpr);
+ return true;
+ } else {
+ r.conProviders.put(cpr, new Integer(cnt.intValue()-1));
+ }
+ } else {
+ cpr.externals++;
+ }
+ return false;
+ }
+
private final ContentProviderHolder getContentProviderImpl(
IApplicationThread caller, String name) {
ContentProviderRecord cpr;
@@ -5537,7 +5578,8 @@ public final class ActivityManagerService extends ActivityManagerNative
// First check if this content provider has been published...
cpr = mProvidersByName.get(name);
- if (cpr != null) {
+ boolean providerRunning = cpr != null;
+ if (providerRunning) {
cpi = cpr.info;
String msg;
if ((msg=checkContentProviderPermissionLocked(cpi, r)) != null) {
@@ -5561,18 +5603,8 @@ public final class ActivityManagerService extends ActivityManagerNative
// In this case the provider instance already exists, so we can
// return it right away.
- if (r != null) {
- if (DEBUG_PROVIDER) Slog.v(TAG,
- "Adding provider requested by "
- + r.processName + " from process "
- + cpr.info.processName);
- Integer cnt = r.conProviders.get(cpr);
- if (cnt == null) {
- r.conProviders.put(cpr, new Integer(1));
- } else {
- r.conProviders.put(cpr, new Integer(cnt.intValue()+1));
- }
- cpr.clients.add(r);
+ final boolean countChanged = incProviderCount(r, cpr);
+ if (countChanged) {
if (cpr.app != null && r.setAdj <= ProcessList.PERCEPTIBLE_APP_ADJ) {
// If this is a perceptible app accessing the provider,
// make sure to count it as being accessed and thus
@@ -5580,17 +5612,46 @@ public final class ActivityManagerService extends ActivityManagerNative
// content providers are often expensive to start.
updateLruProcessLocked(cpr.app, false, true);
}
- } else {
- cpr.externals++;
}
if (cpr.app != null) {
- updateOomAdjLocked(cpr.app);
+ if (false) {
+ if (cpr.name.flattenToShortString().equals(
+ "com.android.providers.calendar/.CalendarProvider2")) {
+ Slog.v(TAG, "****************** KILLING "
+ + cpr.name.flattenToShortString());
+ Process.killProcess(cpr.app.pid);
+ }
+ }
+ boolean success = updateOomAdjLocked(cpr.app);
+ if (DEBUG_PROVIDER) Slog.i(TAG, "Adjust success: " + success);
+ // NOTE: there is still a race here where a signal could be
+ // pending on the process even though we managed to update its
+ // adj level. Not sure what to do about this, but at least
+ // the race is now smaller.
+ if (!success) {
+ // Uh oh... it looks like the provider's process
+ // has been killed on us. We need to wait for a new
+ // process to be started, and make sure its death
+ // doesn't kill our process.
+ Slog.i(TAG,
+ "Existing provider " + cpr.name.flattenToShortString()
+ + " is crashing; detaching " + r);
+ boolean lastRef = decProviderCount(r, cpr);
+ appDiedLocked(cpr.app, cpr.app.pid, cpr.app.thread);
+ if (!lastRef) {
+ // This wasn't the last ref our process had on
+ // the provider... we have now been killed, bail.
+ return null;
+ }
+ providerRunning = false;
+ }
}
Binder.restoreCallingIdentity(origId);
+ }
- } else {
+ if (!providerRunning) {
try {
cpi = AppGlobals.getPackageManager().
resolveContentProvider(name,
@@ -5701,22 +5762,7 @@ public final class ActivityManagerService extends ActivityManagerNative
mProvidersByClass.put(comp, cpr);
}
mProvidersByName.put(name, cpr);
-
- if (r != null) {
- if (DEBUG_PROVIDER) Slog.v(TAG,
- "Adding provider requested by "
- + r.processName + " from process "
- + cpr.info.processName);
- Integer cnt = r.conProviders.get(cpr);
- if (cnt == null) {
- r.conProviders.put(cpr, new Integer(1));
- } else {
- r.conProviders.put(cpr, new Integer(cnt.intValue()+1));
- }
- cpr.clients.add(r);
- } else {
- cpr.externals++;
- }
+ incProviderCount(r, cpr);
}
}
@@ -5780,24 +5826,16 @@ public final class ActivityManagerService extends ActivityManagerNative
//update content provider record entry info
ComponentName comp = new ComponentName(cpr.info.packageName, cpr.info.name);
ContentProviderRecord localCpr = mProvidersByClass.get(comp);
- if (DEBUG_PROVIDER) Slog.v(TAG, "Removing provider requested by "
- + r.info.processName + " from process "
- + localCpr.appInfo.processName);
if (localCpr.app == r) {
//should not happen. taken care of as a local provider
Slog.w(TAG, "removeContentProvider called on local provider: "
+ cpr.info.name + " in process " + r.processName);
return;
} else {
- Integer cnt = r.conProviders.get(localCpr);
- if (cnt == null || cnt.intValue() <= 1) {
- localCpr.clients.remove(r);
- r.conProviders.remove(localCpr);
- } else {
- r.conProviders.put(localCpr, new Integer(cnt.intValue()-1));
+ if (decProviderCount(r, localCpr)) {
+ updateOomAdjLocked();
}
}
- updateOomAdjLocked();
}
}
@@ -9026,6 +9064,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final static class MemItem {
final String label;
final long pss;
+ ArrayList<MemItem> subitems;
public MemItem(String _label, long _pss) {
label = _label;
@@ -9051,7 +9090,10 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int i=0; i<items.size(); i++) {
MemItem mi = items.get(i);
- pw.print(prefix); pw.printf("%8d Kb: ", mi.pss); pw.println(mi.label);
+ pw.print(prefix); pw.printf("%7d Kb: ", mi.pss); pw.println(mi.label);
+ if (mi.subitems != null) {
+ dumpMemItems(pw, prefix + " ", mi.subitems, true);
+ }
}
}
@@ -9119,6 +9161,7 @@ public final class ActivityManagerService extends ActivityManagerNative
"Backup", "Services", "Home", "Background"
};
long oomPss[] = new long[oomLabel.length];
+ ArrayList<MemItem>[] oomProcs = (ArrayList<MemItem>[])new ArrayList[oomLabel.length];
long totalPss = 0;
@@ -9147,7 +9190,9 @@ public final class ActivityManagerService extends ActivityManagerNative
if (!isCheckinRequest && mi != null) {
long myTotalPss = mi.getTotalPss();
totalPss += myTotalPss;
- procMems.add(new MemItem(r.processName + " (pid " + r.pid + ")", myTotalPss));
+ MemItem pssItem = new MemItem(r.processName + " (pid " + r.pid + ")",
+ myTotalPss);
+ procMems.add(pssItem);
nativePss += mi.nativePss;
dalvikPss += mi.dalvikPss;
@@ -9161,6 +9206,10 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int oomIndex=0; oomIndex<oomPss.length; oomIndex++) {
if (r.setAdj <= oomAdj[oomIndex] || oomIndex == (oomPss.length-1)) {
oomPss[oomIndex] += myTotalPss;
+ if (oomProcs[oomIndex] == null) {
+ oomProcs[oomIndex] = new ArrayList<MemItem>();
+ }
+ oomProcs[oomIndex].add(pssItem);
break;
}
}
@@ -9181,7 +9230,9 @@ public final class ActivityManagerService extends ActivityManagerNative
ArrayList<MemItem> oomMems = new ArrayList<MemItem>();
for (int j=0; j<oomPss.length; j++) {
if (oomPss[j] != 0) {
- oomMems.add(new MemItem(oomLabel[j], oomPss[j]));
+ MemItem item = new MemItem(oomLabel[j], oomPss[j]);
+ item.subitems = oomProcs[j];
+ oomMems.add(item);
}
}
@@ -13445,16 +13496,18 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
- private final void updateOomAdjLocked(
+ private final boolean updateOomAdjLocked(
ProcessRecord app, int hiddenAdj, ProcessRecord TOP_APP) {
app.hiddenAdj = hiddenAdj;
if (app.thread == null) {
- return;
+ return false;
}
final boolean wasKeeping = app.keeping;
+ boolean success = true;
+
computeOomAdjLocked(app, hiddenAdj, TOP_APP, false);
if (app.curRawAdj != app.setRawAdj) {
@@ -13491,6 +13544,7 @@ public final class ActivityManagerService extends ActivityManagerNative
" oom adj to " + app.curAdj + " because " + app.adjType);
app.setAdj = app.curAdj;
} else {
+ success = false;
Slog.w(TAG, "Failed setting oom adj of " + app + " to " + app.curAdj);
}
}
@@ -13505,6 +13559,7 @@ public final class ActivityManagerService extends ActivityManagerNative
EventLog.writeEvent(EventLogTags.AM_KILL, app.pid,
app.processName, app.setAdj, app.waitingToKill);
Process.killProcessQuiet(app.pid);
+ success = false;
} else {
if (true) {
long oldId = Binder.clearCallingIdentity();
@@ -13527,6 +13582,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
}
+ return success;
}
private final ActivityRecord resumedAppLocked() {
@@ -13540,7 +13596,7 @@ public final class ActivityManagerService extends ActivityManagerNative
return resumedActivity;
}
- private final void updateOomAdjLocked(ProcessRecord app) {
+ private final boolean updateOomAdjLocked(ProcessRecord app) {
final ActivityRecord TOP_ACT = resumedAppLocked();
final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null;
int curAdj = app.curAdj;
@@ -13549,7 +13605,7 @@ public final class ActivityManagerService extends ActivityManagerNative
mAdjSeq++;
- updateOomAdjLocked(app, app.hiddenAdj, TOP_APP);
+ boolean success = updateOomAdjLocked(app, app.hiddenAdj, TOP_APP);
final boolean nowHidden = app.curAdj >= ProcessList.HIDDEN_APP_MIN_ADJ
&& app.curAdj <= ProcessList.HIDDEN_APP_MAX_ADJ;
if (nowHidden != wasHidden) {
@@ -13557,6 +13613,7 @@ public final class ActivityManagerService extends ActivityManagerNative
// list may also be changed.
updateOomAdjLocked();
}
+ return success;
}
final void updateOomAdjLocked() {
diff --git a/services/java/com/android/server/am/ProcessList.java b/services/java/com/android/server/am/ProcessList.java
index dfcc0bf..131255f 100644
--- a/services/java/com/android/server/am/ProcessList.java
+++ b/services/java/com/android/server/am/ProcessList.java
@@ -163,7 +163,7 @@ class ProcessList {
int minSize = 320*480; // 153600
int maxSize = 1280*800; // 1024000 230400 870400 .264
float scaleDisp = ((float)(displayWidth*displayHeight)-minSize)/(maxSize-minSize);
- Slog.i("XXXXXX", "scaleDisp=" + scaleDisp + " dw=" + displayWidth + " dh=" + displayHeight);
+ //Slog.i("XXXXXX", "scaleDisp=" + scaleDisp + " dw=" + displayWidth + " dh=" + displayHeight);
StringBuilder adjString = new StringBuilder();
StringBuilder memString = new StringBuilder();
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index 84880f9..77f53c2 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -60,6 +60,7 @@ import static com.android.server.net.NetworkPolicyManagerService.XmlUtils.writeL
import static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_UPDATED;
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
+import static com.android.server.NetworkManagementService.LIMIT_GLOBAL_ALERT;
import android.app.IActivityManager;
import android.app.INotificationManager;
@@ -132,6 +133,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import libcore.io.IoUtils;
@@ -454,7 +456,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
synchronized (mRulesLock) {
- if (mMeteredIfaces.contains(iface)) {
+ if (mMeteredIfaces.contains(iface) && !LIMIT_GLOBAL_ALERT.equals(limitName)) {
try {
// force stats update to make sure we have numbers that
// caused alert to trigger.
@@ -763,7 +765,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// disable data connection when over limit and not snoozed
final boolean overLimit = policy.limitBytes != LIMIT_DISABLED
&& totalBytes > policy.limitBytes && policy.lastSnooze < start;
- setNetworkTemplateEnabled(policy.template, !overLimit);
+ final boolean enabled = !overLimit;
+
+ setNetworkTemplateEnabled(policy.template, enabled);
}
}
@@ -772,7 +776,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
* for the given {@link NetworkTemplate}.
*/
private void setNetworkTemplateEnabled(NetworkTemplate template, boolean enabled) {
- if (LOGD) Slog.d(TAG, "setting template=" + template + " enabled=" + enabled);
switch (template.getMatchRule()) {
case MATCH_MOBILE_3G_LOWER:
case MATCH_MOBILE_4G:
@@ -830,9 +833,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// collect all active ifaces that match this template
ifaceList.clear();
- for (NetworkIdentity ident : networks.keySet()) {
+ for (Map.Entry<NetworkIdentity, String> entry : networks.entrySet()) {
+ final NetworkIdentity ident = entry.getKey();
if (policy.template.matches(ident)) {
- final String iface = networks.get(ident);
+ final String iface = entry.getValue();
ifaceList.add(iface);
}
}
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index c911687..bb0a0d1 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -43,6 +43,7 @@ import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.HOUR_IN_MILLIS;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static com.android.internal.util.Preconditions.checkNotNull;
+import static com.android.server.NetworkManagementService.LIMIT_GLOBAL_ALERT;
import static com.android.server.NetworkManagementSocketTagger.resetKernelUidStats;
import static com.android.server.NetworkManagementSocketTagger.setKernelCounterSet;
@@ -56,6 +57,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.net.IConnectivityManager;
+import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsService;
import android.net.NetworkIdentity;
import android.net.NetworkInfo;
@@ -121,7 +123,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private static final int VERSION_UID_WITH_TAG = 3;
private static final int VERSION_UID_WITH_SET = 4;
- private static final int MSG_FORCE_UPDATE = 0x1;
+ private static final int MSG_PERFORM_POLL = 0x1;
+ private static final int MSG_PERFORM_POLL_DETAILED = 0x2;
private final Context mContext;
private final INetworkManagementService mNetworkManager;
@@ -141,7 +144,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private PendingIntent mPollIntent;
- // TODO: listen for kernel push events through netd instead of polling
// TODO: trim empty history objects entirely
private static final long KB_IN_BYTES = 1024;
@@ -174,17 +176,18 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
/** Flag if {@link #mUidStats} have been loaded from disk. */
private boolean mUidStatsLoaded = false;
- private NetworkStats mLastNetworkSnapshot;
- private NetworkStats mLastPersistNetworkSnapshot;
+ private NetworkStats mLastPollNetworkSnapshot;
+ private NetworkStats mLastPollUidSnapshot;
+ private NetworkStats mLastPollOperationsSnapshot;
- private NetworkStats mLastUidSnapshot;
+ private NetworkStats mLastPersistNetworkSnapshot;
+ private NetworkStats mLastPersistUidSnapshot;
/** Current counter sets for each UID. */
private SparseIntArray mActiveUidCounterSet = new SparseIntArray();
/** Data layer operation counters for splicing into other structures. */
private NetworkStats mOperations = new NetworkStats(0L, 10);
- private NetworkStats mLastOperationsSnapshot;
private final HandlerThread mHandlerThread;
private final Handler mHandler;
@@ -252,13 +255,18 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
mContext.registerReceiver(mShutdownReceiver, shutdownFilter);
try {
- registerPollAlarmLocked();
+ mNetworkManager.registerObserver(mAlertObserver);
} catch (RemoteException e) {
- Slog.w(TAG, "unable to register poll alarm");
+ // ouch, no push updates means we fall back to
+ // ACTION_NETWORK_STATS_POLL intervals.
+ Slog.e(TAG, "unable to register INetworkManagementEventObserver", e);
}
- // kick off background poll to bootstrap deltas
- mHandler.obtainMessage(MSG_FORCE_UPDATE).sendToTarget();
+ registerPollAlarmLocked();
+ registerGlobalAlert();
+
+ // bootstrap initial stats to prevent double-counting later
+ bootstrapStats();
}
private void shutdownLocked() {
@@ -280,17 +288,37 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
* Clear any existing {@link #ACTION_NETWORK_STATS_POLL} alarms, and
* reschedule based on current {@link NetworkStatsSettings#getPollInterval()}.
*/
- private void registerPollAlarmLocked() throws RemoteException {
- if (mPollIntent != null) {
- mAlarmManager.remove(mPollIntent);
- }
+ private void registerPollAlarmLocked() {
+ try {
+ if (mPollIntent != null) {
+ mAlarmManager.remove(mPollIntent);
+ }
- mPollIntent = PendingIntent.getBroadcast(
- mContext, 0, new Intent(ACTION_NETWORK_STATS_POLL), 0);
+ mPollIntent = PendingIntent.getBroadcast(
+ mContext, 0, new Intent(ACTION_NETWORK_STATS_POLL), 0);
- final long currentRealtime = SystemClock.elapsedRealtime();
- mAlarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, currentRealtime,
- mSettings.getPollInterval(), mPollIntent);
+ final long currentRealtime = SystemClock.elapsedRealtime();
+ mAlarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, currentRealtime,
+ mSettings.getPollInterval(), mPollIntent);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "problem registering for poll alarm: " + e);
+ }
+ }
+
+ /**
+ * Register for a global alert that is delivered through
+ * {@link INetworkManagementEventObserver} once a threshold amount of data
+ * has been transferred.
+ */
+ private void registerGlobalAlert() {
+ try {
+ final long alertBytes = mSettings.getPersistThreshold();
+ mNetworkManager.setGlobalAlert(alertBytes);
+ } catch (IllegalStateException e) {
+ Slog.w(TAG, "problem registering for global alert: " + e);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "problem registering for global alert: " + e);
+ }
}
@Override
@@ -475,10 +503,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
@Override
public void forceUpdate() {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
-
- synchronized (mStatsLock) {
- performPollLocked(true, false);
- }
+ performPoll(true, false);
}
/**
@@ -507,14 +532,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public void onReceive(Context context, Intent intent) {
// on background handler thread, and verified UPDATE_DEVICE_STATS
// permission above.
- synchronized (mStatsLock) {
- mWakeLock.acquire();
- try {
- performPollLocked(true, false);
- } finally {
- mWakeLock.release();
- }
- }
+ performPoll(true, false);
+
+ // verify that we're watching global alert
+ registerGlobalAlert();
}
};
@@ -547,6 +568,26 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
};
/**
+ * Observer that watches for {@link INetworkManagementService} alerts.
+ */
+ private INetworkManagementEventObserver mAlertObserver = new NetworkAlertObserver() {
+ @Override
+ public void limitReached(String limitName, String iface) {
+ // only someone like NMS should be calling us
+ mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
+
+ if (LIMIT_GLOBAL_ALERT.equals(limitName)) {
+ // kick off background poll to collect network stats; UID stats
+ // are handled during normal polling interval.
+ mHandler.obtainMessage(MSG_PERFORM_POLL).sendToTarget();
+
+ // re-arm global alert for next update
+ registerGlobalAlert();
+ }
+ }
+ };
+
+ /**
* Inspect all current {@link NetworkState} to derive mapping from {@code
* iface} to {@link NetworkStatsHistory}. When multiple {@link NetworkInfo}
* are active on a single {@code iface}, they are combined under a single
@@ -588,6 +629,33 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
/**
+ * Bootstrap initial stats snapshot, usually during {@link #systemReady()}
+ * so we have baseline values without double-counting.
+ */
+ private void bootstrapStats() {
+ try {
+ mLastPollNetworkSnapshot = mNetworkManager.getNetworkStatsSummary();
+ mLastPollUidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
+ mLastPollOperationsSnapshot = new NetworkStats(0L, 0);
+ } catch (IllegalStateException e) {
+ Slog.w(TAG, "problem reading network stats: " + e);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "problem reading network stats: " + e);
+ }
+ }
+
+ private void performPoll(boolean detailedPoll, boolean forcePersist) {
+ synchronized (mStatsLock) {
+ mWakeLock.acquire();
+ try {
+ performPollLocked(detailedPoll, forcePersist);
+ } finally {
+ mWakeLock.release();
+ }
+ }
+ }
+
+ /**
* Periodic poll operation, reading current statistics and recording into
* {@link NetworkStatsHistory}.
*
@@ -596,6 +664,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
*/
private void performPollLocked(boolean detailedPoll, boolean forcePersist) {
if (LOGV) Slog.v(TAG, "performPollLocked()");
+ final long startRealtime = SystemClock.elapsedRealtime();
// try refreshing time source when stale
if (mTime.getCacheAge() > mSettings.getTimeCacheMaxAge()) {
@@ -605,6 +674,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// TODO: consider marking "untrusted" times in historical stats
final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()
: System.currentTimeMillis();
+ final long persistThreshold = mSettings.getPersistThreshold();
final NetworkStats networkSnapshot;
final NetworkStats uidSnapshot;
@@ -620,30 +690,32 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
performNetworkPollLocked(networkSnapshot, currentTime);
- if (detailedPoll) {
- performUidPollLocked(uidSnapshot, currentTime);
- }
- // decide if enough has changed to trigger persist
- final NetworkStats persistDelta = computeStatsDelta(
+ // persist when enough network data has occurred
+ final NetworkStats persistNetworkDelta = computeStatsDelta(
mLastPersistNetworkSnapshot, networkSnapshot, true);
- final long persistThreshold = mSettings.getPersistThreshold();
+ if (forcePersist || persistNetworkDelta.getTotalBytes() > persistThreshold) {
+ writeNetworkStatsLocked();
+ mLastPersistNetworkSnapshot = networkSnapshot;
+ }
- NetworkStats.Entry entry = null;
- for (String iface : persistDelta.getUniqueIfaces()) {
- final int index = persistDelta.findIndex(iface, UID_ALL, SET_DEFAULT, TAG_NONE);
- entry = persistDelta.getValues(index, entry);
- if (forcePersist || entry.rxBytes > persistThreshold
- || entry.txBytes > persistThreshold) {
- writeNetworkStatsLocked();
- if (mUidStatsLoaded) {
- writeUidStatsLocked();
- }
- mLastPersistNetworkSnapshot = networkSnapshot;
- break;
+ if (detailedPoll) {
+ performUidPollLocked(uidSnapshot, currentTime);
+
+ // persist when enough network data has occurred
+ final NetworkStats persistUidDelta = computeStatsDelta(
+ mLastPersistUidSnapshot, uidSnapshot, true);
+ if (forcePersist || persistUidDelta.getTotalBytes() > persistThreshold) {
+ writeUidStatsLocked();
+ mLastPersistUidSnapshot = networkSnapshot;
}
}
+ if (LOGV) {
+ final long duration = SystemClock.elapsedRealtime() - startRealtime;
+ Slog.v(TAG, "performPollLocked() took " + duration + "ms");
+ }
+
// finally, dispatch updated event to any listeners
final Intent updatedIntent = new Intent(ACTION_NETWORK_STATS_UPDATED);
updatedIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
@@ -656,7 +728,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void performNetworkPollLocked(NetworkStats networkSnapshot, long currentTime) {
final HashSet<String> unknownIface = Sets.newHashSet();
- final NetworkStats delta = computeStatsDelta(mLastNetworkSnapshot, networkSnapshot, false);
+ final NetworkStats delta = computeStatsDelta(mLastPollNetworkSnapshot, networkSnapshot, false);
final long timeStart = currentTime - delta.getElapsedRealtime();
NetworkStats.Entry entry = null;
@@ -678,7 +750,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
history.removeBucketsBefore(currentTime - maxHistory);
}
- mLastNetworkSnapshot = networkSnapshot;
+ mLastPollNetworkSnapshot = networkSnapshot;
if (LOGD && unknownIface.size() > 0) {
Slog.w(TAG, "unknown interfaces " + unknownIface.toString() + ", ignoring those stats");
@@ -691,9 +763,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void performUidPollLocked(NetworkStats uidSnapshot, long currentTime) {
ensureUidStatsLoadedLocked();
- final NetworkStats delta = computeStatsDelta(mLastUidSnapshot, uidSnapshot, false);
+ final NetworkStats delta = computeStatsDelta(mLastPollUidSnapshot, uidSnapshot, false);
final NetworkStats operationsDelta = computeStatsDelta(
- mLastOperationsSnapshot, mOperations, false);
+ mLastPollOperationsSnapshot, mOperations, false);
final long timeStart = currentTime - delta.getElapsedRealtime();
NetworkStats.Entry entry = null;
@@ -731,8 +803,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
}
- mLastUidSnapshot = uidSnapshot;
- mLastOperationsSnapshot = mOperations;
+ mLastPollUidSnapshot = uidSnapshot;
+ mLastPollOperationsSnapshot = mOperations;
mOperations = new NetworkStats(0L, 10);
}
@@ -1162,8 +1234,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
/** {@inheritDoc} */
public boolean handleMessage(Message msg) {
switch (msg.what) {
- case MSG_FORCE_UPDATE: {
- forceUpdate();
+ case MSG_PERFORM_POLL: {
+ performPoll(false, false);
+ return true;
+ }
+ case MSG_PERFORM_POLL_DETAILED: {
+ performPoll(true, false);
return true;
}
default: {
@@ -1226,10 +1302,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
public long getPollInterval() {
- return getSecureLong(NETSTATS_POLL_INTERVAL, 15 * MINUTE_IN_MILLIS);
+ return getSecureLong(NETSTATS_POLL_INTERVAL, 30 * MINUTE_IN_MILLIS);
}
public long getPersistThreshold() {
- return getSecureLong(NETSTATS_PERSIST_THRESHOLD, 16 * KB_IN_BYTES);
+ return getSecureLong(NETSTATS_PERSIST_THRESHOLD, 512 * KB_IN_BYTES);
}
public long getNetworkBucketDuration() {
return getSecureLong(NETSTATS_NETWORK_BUCKET_DURATION, HOUR_IN_MILLIS);
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 2f19a46..b8797d1 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -194,7 +194,8 @@ public class PackageManagerService extends IPackageManager.Stub {
/**
* Whether verification is enabled by default.
*/
- private static final boolean DEFAULT_VERIFY_ENABLE = true;
+ // STOPSHIP: change this to true
+ private static final boolean DEFAULT_VERIFY_ENABLE = false;
/**
* The default maximum time to wait for the verification agent to return in
diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java
index c8b18c8..60333a3 100644
--- a/services/java/com/android/server/wm/InputManager.java
+++ b/services/java/com/android/server/wm/InputManager.java
@@ -94,6 +94,7 @@ public class InputManager implements Watchdog.Monitor {
private static native boolean nativeTransferTouchFocus(InputChannel fromChannel,
InputChannel toChannel);
private static native void nativeSetPointerSpeed(int speed);
+ private static native void nativeSetShowTouches(boolean enabled);
private static native String nativeDump();
private static native void nativeMonitor();
@@ -147,7 +148,10 @@ public class InputManager implements Watchdog.Monitor {
nativeStart();
registerPointerSpeedSettingObserver();
+ registerShowTouchesSettingObserver();
+
updatePointerSpeedFromSettings();
+ updateShowTouchesFromSettings();
}
public void setDisplaySize(int displayId, int width, int height,
@@ -454,6 +458,32 @@ public class InputManager implements Watchdog.Monitor {
return speed;
}
+ public void updateShowTouchesFromSettings() {
+ int setting = getShowTouchesSetting(0);
+ nativeSetShowTouches(setting != 0);
+ }
+
+ private void registerShowTouchesSettingObserver() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.System.getUriFor(Settings.System.SHOW_TOUCHES), true,
+ new ContentObserver(mWindowManagerService.mH) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateShowTouchesFromSettings();
+ }
+ });
+ }
+
+ private int getShowTouchesSetting(int defaultValue) {
+ int result = defaultValue;
+ try {
+ result = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SHOW_TOUCHES);
+ } catch (SettingNotFoundException snfe) {
+ }
+ return result;
+ }
+
public void dump(PrintWriter pw) {
String dumpStr = nativeDump();
if (dumpStr != null) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index e258b1a..192d32b 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -5291,24 +5291,24 @@ public class WindowManagerService extends IWindowManager.Stub
case Surface.ROTATION_0:
return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
case Surface.ROTATION_90:
- return Gravity.RIGHT | Gravity.CENTER_VERTICAL;
+ return Gravity.RIGHT | Gravity.BOTTOM;
case Surface.ROTATION_180:
- return Gravity.CENTER_HORIZONTAL | Gravity.TOP;
+ return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
case Surface.ROTATION_270:
- return Gravity.LEFT | Gravity.CENTER_VERTICAL;
+ return Gravity.LEFT | Gravity.BOTTOM;
}
} else {
// On devices with a natural orientation of landscape
switch (rotation) {
default:
case Surface.ROTATION_0:
- return Gravity.RIGHT | Gravity.CENTER_VERTICAL;
+ return Gravity.RIGHT | Gravity.BOTTOM;
case Surface.ROTATION_90:
return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
case Surface.ROTATION_180:
- return Gravity.LEFT | Gravity.CENTER_VERTICAL;
+ return Gravity.LEFT | Gravity.BOTTOM;
case Surface.ROTATION_270:
- return Gravity.CENTER_HORIZONTAL | Gravity.TOP;
+ return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
}
}
}
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp
index f2a0a71..0a723e8 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -179,6 +179,7 @@ public:
void setInputDispatchMode(bool enabled, bool frozen);
void setSystemUiVisibility(int32_t visibility);
void setPointerSpeed(int32_t speed);
+ void setShowTouches(bool enabled);
/* --- InputReaderPolicyInterface implementation --- */
@@ -233,6 +234,9 @@ private:
// True if pointer gestures are enabled.
bool pointerGesturesEnabled;
+ // Show touches feature enable/disable.
+ bool showTouches;
+
// Sprite controller singleton, created on first use.
sp<SpriteController> spriteController;
@@ -276,6 +280,7 @@ NativeInputManager::NativeInputManager(jobject contextObj,
mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE;
mLocked.pointerSpeed = 0;
mLocked.pointerGesturesEnabled = true;
+ mLocked.showTouches = false;
}
sp<EventHub> eventHub = new EventHub();
@@ -431,6 +436,8 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
* POINTER_SPEED_EXPONENT);
outConfig->pointerGesturesEnabled = mLocked.pointerGesturesEnabled;
+ outConfig->showTouches = mLocked.showTouches;
+
outConfig->setDisplayInfo(0, false /*external*/,
mLocked.displayWidth, mLocked.displayHeight, mLocked.displayOrientation);
outConfig->setDisplayInfo(0, true /*external*/,
@@ -678,6 +685,22 @@ void NativeInputManager::setPointerSpeed(int32_t speed) {
InputReaderConfiguration::CHANGE_POINTER_SPEED);
}
+void NativeInputManager::setShowTouches(bool enabled) {
+ { // acquire lock
+ AutoMutex _l(mLock);
+
+ if (mLocked.showTouches == enabled) {
+ return;
+ }
+
+ LOGI("Setting show touches feature to %s.", enabled ? "enabled" : "disabled");
+ mLocked.showTouches = enabled;
+ } // release lock
+
+ mInputManager->getReader()->requestRefreshConfiguration(
+ InputReaderConfiguration::CHANGE_SHOW_TOUCHES);
+}
+
bool NativeInputManager::isScreenOn() {
return android_server_PowerManagerService_isScreenOn();
}
@@ -1276,6 +1299,15 @@ static void android_server_InputManager_nativeSetPointerSpeed(JNIEnv* env,
gNativeInputManager->setPointerSpeed(speed);
}
+static void android_server_InputManager_nativeSetShowTouches(JNIEnv* env,
+ jclass clazz, jboolean enabled) {
+ if (checkInputManagerUnitialized(env)) {
+ return;
+ }
+
+ gNativeInputManager->setShowTouches(enabled);
+}
+
static jstring android_server_InputManager_nativeDump(JNIEnv* env, jclass clazz) {
if (checkInputManagerUnitialized(env)) {
return NULL;
@@ -1343,6 +1375,8 @@ static JNINativeMethod gInputManagerMethods[] = {
(void*) android_server_InputManager_nativeTransferTouchFocus },
{ "nativeSetPointerSpeed", "(I)V",
(void*) android_server_InputManager_nativeSetPointerSpeed },
+ { "nativeSetShowTouches", "(Z)V",
+ (void*) android_server_InputManager_nativeSetShowTouches },
{ "nativeDump", "()Ljava/lang/String;",
(void*) android_server_InputManager_nativeDump },
{ "nativeMonitor", "()V",
diff --git a/services/sensorservice/Fusion.cpp b/services/sensorservice/Fusion.cpp
index ff4786b..0ab86c3 100644
--- a/services/sensorservice/Fusion.cpp
+++ b/services/sensorservice/Fusion.cpp
@@ -47,9 +47,46 @@ static const float biasVAR = 1e-8; // (rad/s)^2 / s (guessed)
static const float accSTDEV = 0.05f; // m/s^2 (measured 0.08 / CDD 0.05)
static const float magSTDEV = 0.5f; // uT (measured 0.7 / CDD 0.5)
-static const float FREE_FALL_THRESHOLD = 0.981f;
static const float SYMMETRY_TOLERANCE = 1e-10f;
+/*
+ * Accelerometer updates will not be performed near free fall to avoid
+ * ill-conditioning and div by zeros.
+ * Threshhold: 10% of g, in m/s^2
+ */
+static const float FREE_FALL_THRESHOLD = 0.981f;
+static const float FREE_FALL_THRESHOLD_SQ =
+ FREE_FALL_THRESHOLD*FREE_FALL_THRESHOLD;
+
+/*
+ * The geomagnetic-field should be between 30uT and 60uT.
+ * Fields strengths greater than this likely indicate a local magnetic
+ * disturbance which we do not want to update into the fused frame.
+ */
+static const float MAX_VALID_MAGNETIC_FIELD = 100; // uT
+static const float MAX_VALID_MAGNETIC_FIELD_SQ =
+ MAX_VALID_MAGNETIC_FIELD*MAX_VALID_MAGNETIC_FIELD;
+
+/*
+ * Values of the field smaller than this should be ignored in fusion to avoid
+ * ill-conditioning. This state can happen with anomalous local magnetic
+ * disturbances canceling the Earth field.
+ */
+static const float MIN_VALID_MAGNETIC_FIELD = 10; // uT
+static const float MIN_VALID_MAGNETIC_FIELD_SQ =
+ MIN_VALID_MAGNETIC_FIELD*MIN_VALID_MAGNETIC_FIELD;
+
+/*
+ * If the cross product of two vectors has magnitude squared less than this,
+ * we reject it as invalid due to alignment of the vectors.
+ * This threshold is used to check for the case where the magnetic field sample
+ * is parallel to the gravity field, which can happen in certain places due
+ * to magnetic field disturbances.
+ */
+static const float MIN_VALID_CROSS_PRODUCT_MAG = 1.0e-3;
+static const float MIN_VALID_CROSS_PRODUCT_MAG_SQ =
+ MIN_VALID_CROSS_PRODUCT_MAG*MIN_VALID_CROSS_PRODUCT_MAG;
+
// -----------------------------------------------------------------------
template <typename TYPE, size_t C, size_t R>
@@ -240,8 +277,9 @@ void Fusion::handleGyro(const vec3_t& w, float dT) {
status_t Fusion::handleAcc(const vec3_t& a) {
// ignore acceleration data if we're close to free-fall
- if (length(a) < FREE_FALL_THRESHOLD)
+ if (length_squared(a) < FREE_FALL_THRESHOLD_SQ) {
return BAD_VALUE;
+ }
if (!checkInitComplete(ACC, a))
return BAD_VALUE;
@@ -253,15 +291,34 @@ status_t Fusion::handleAcc(const vec3_t& a) {
status_t Fusion::handleMag(const vec3_t& m) {
// the geomagnetic-field should be between 30uT and 60uT
- // reject obviously wrong magnetic-fields
- if (length(m) > 100)
+ // reject if too large to avoid spurious magnetic sources
+ const float magFieldSq = length_squared(m);
+ if (magFieldSq > MAX_VALID_MAGNETIC_FIELD_SQ) {
+ return BAD_VALUE;
+ } else if (magFieldSq < MIN_VALID_MAGNETIC_FIELD_SQ) {
+ // Also reject if too small since we will get ill-defined (zero mag)
+ // cross-products below
return BAD_VALUE;
+ }
if (!checkInitComplete(MAG, m))
return BAD_VALUE;
+ // Orthogonalize the magnetic field to the gravity field, mapping it into
+ // tangent to Earth.
const vec3_t up( getRotationMatrix() * Ba );
const vec3_t east( cross_product(m, up) );
+
+ // If the m and up vectors align, the cross product magnitude will
+ // approach 0.
+ // Reject this case as well to avoid div by zero problems and
+ // ill-conditioning below.
+ if (length_squared(east) < MIN_VALID_CROSS_PRODUCT_MAG_SQ) {
+ return BAD_VALUE;
+ }
+
+ // If we have created an orthogonal magnetic field successfully,
+ // then pass it in as the update.
vec3_t north( cross_product(up, east) );
const float l = 1 / length(north);
diff --git a/services/sensorservice/vec.h b/services/sensorservice/vec.h
index f74ccc5..24f30ff 100644
--- a/services/sensorservice/vec.h
+++ b/services/sensorservice/vec.h
@@ -212,6 +212,15 @@ template <
typename TYPE,
size_t SIZE
>
+TYPE PURE length_squared(const V<TYPE, SIZE>& v) {
+ return dot_product(v, v);
+}
+
+template <
+ template<typename T, size_t S> class V,
+ typename TYPE,
+ size_t SIZE
+>
V<TYPE, SIZE> PURE normalize(const V<TYPE, SIZE>& v) {
return v * (1/length(v));
}
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 8b2485a..f8925b8 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -556,6 +556,7 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const
// need a hardware-protected path to external video sink
usage |= GraphicBuffer::USAGE_PROTECTED;
}
+ usage |= GraphicBuffer::USAGE_HW_COMPOSER;
return usage;
}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 0080202..598220f 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2207,14 +2207,17 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
return BAD_VALUE;
// make sure none of the layers are protected
- const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
+ const LayerVector& layers(mDrawingState.layersSortedByZ);
const size_t count = layers.size();
for (size_t i=0 ; i<count ; ++i) {
const sp<LayerBase>& layer(layers[i]);
- const uint32_t z = layer->drawingState().z;
- if (z >= minLayerZ && z <= maxLayerZ) {
- if (layer->isProtected()) {
- return INVALID_OPERATION;
+ const uint32_t flags = layer->drawingState().flags;
+ if (!(flags & ISurfaceComposer::eLayerHidden)) {
+ const uint32_t z = layer->drawingState().z;
+ if (z >= minLayerZ && z <= maxLayerZ) {
+ if (layer->isProtected()) {
+ return INVALID_OPERATION;
+ }
}
}
}
@@ -2270,9 +2273,12 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
for (size_t i=0 ; i<count ; ++i) {
const sp<LayerBase>& layer(layers[i]);
- const uint32_t z = layer->drawingState().z;
- if (z >= minLayerZ && z <= maxLayerZ) {
- layer->drawForSreenShot();
+ const uint32_t flags = layer->drawingState().flags;
+ if (!(flags & ISurfaceComposer::eLayerHidden)) {
+ const uint32_t z = layer->drawingState().z;
+ if (z >= minLayerZ && z <= maxLayerZ) {
+ layer->drawForSreenShot();
+ }
}
}
diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
index 5f35697..ecf78d9 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
@@ -117,6 +117,18 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
assertStatsEntry(stats, "wlan0", UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 2048L);
}
+ public void testNetworkStatsCombined() throws Exception {
+ stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
+ stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
+ stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
+ stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
+ stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
+
+ final NetworkStats stats = mService.getNetworkStatsSummary();
+ assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L + 10L,
+ 2205L + 20L, 489339L + 30L, 2237L + 40L);
+ }
+
public void testKernelTags() throws Exception {
assertEquals("0", tagToKernel(0x0));
assertEquals("214748364800", tagToKernel(0x32));
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index 6138490..6dd8cd6 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -38,6 +38,7 @@ import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static android.text.format.DateUtils.WEEK_IN_MILLIS;
import static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_POLL;
import static org.easymock.EasyMock.anyLong;
+import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
@@ -49,6 +50,7 @@ import android.app.IAlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.IConnectivityManager;
+import android.net.INetworkManagementEventObserver;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
@@ -65,10 +67,10 @@ import android.util.TrustedTime;
import com.android.server.net.NetworkStatsService;
import com.android.server.net.NetworkStatsService.NetworkStatsSettings;
+import org.easymock.Capture;
import org.easymock.EasyMock;
import java.io.File;
-import java.util.concurrent.Future;
import libcore.io.IoUtils;
@@ -105,6 +107,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
private IConnectivityManager mConnManager;
private NetworkStatsService mService;
+ private INetworkManagementEventObserver mNetworkObserver;
@Override
public void setUp() throws Exception {
@@ -132,13 +135,20 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectDefaultSettings();
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
- final Future<?> firstPoll = expectSystemReady();
+ expectSystemReady();
+
+ // catch INetworkManagementEventObserver during systemReady()
+ final Capture<INetworkManagementEventObserver> networkObserver = new Capture<
+ INetworkManagementEventObserver>();
+ mNetManager.registerObserver(capture(networkObserver));
+ expectLastCall().atLeastOnce();
replay();
mService.systemReady();
- firstPoll.get();
verifyAndReset();
+ mNetworkObserver = networkObserver.getValue();
+
}
@Override
@@ -183,6 +193,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
.addIfaceValues(TEST_IFACE, 1024L, 1L, 2048L, 2L));
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -199,6 +210,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
.addIfaceValues(TEST_IFACE, 4096L, 4L, 8192L, 8L));
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -238,6 +250,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
.addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 512L, 4L, 256L, 2L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 256L, 2L, 128L, 1L, 0L)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 0L));
+ expectNetworkStatsPoll();
mService.setUidForeground(UID_RED, false);
mService.incrementOperationCount(UID_RED, 0xFAAD, 4);
@@ -273,11 +286,18 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectDefaultSettings();
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
- final Future<?> firstPoll = expectSystemReady();
+ expectSystemReady();
+
+ // catch INetworkManagementEventObserver during systemReady()
+ final Capture<INetworkManagementEventObserver> networkObserver = new Capture<
+ INetworkManagementEventObserver>();
+ mNetManager.registerObserver(capture(networkObserver));
+ expectLastCall().atLeastOnce();
replay();
mService.systemReady();
- firstPoll.get();
+
+ mNetworkObserver = networkObserver.getValue();
// after systemReady(), we should have historical stats loaded again
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
@@ -312,6 +332,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
.addIfaceValues(TEST_IFACE, 512L, 4L, 512L, 4L));
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -329,6 +350,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS);
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -363,6 +385,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1536L, 12L, 512L, 4L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xF00D, 10);
@@ -384,6 +407,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkState(buildMobile3gState(IMSI_2));
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -399,6 +423,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 128L, 1L, 1024L, 8L, 0L)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xFAAD, 128L, 1L, 1024L, 8L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_BLUE, 0xFAAD, 10);
@@ -441,6 +466,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 16L, 1L, 16L, 1L, 0L)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 4096L, 258L, 512L, 32L, 0L)
.addValues(TEST_IFACE, UID_GREEN, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xFAAD, 10);
@@ -494,6 +520,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xF00D, 5);
@@ -511,6 +538,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkState(buildMobile4gState());
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -525,6 +553,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 512L, 4L, 256L, 2L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xFAAD, 5);
@@ -558,6 +587,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 0L)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xF00D, 1);
@@ -576,6 +606,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0L));
+ expectNetworkStatsPoll();
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -617,6 +648,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L));
+ expectNetworkStatsPoll();
mService.incrementOperationCount(UID_RED, 0xF00D, 1);
@@ -637,6 +669,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 0L));
+ expectNetworkStatsPoll();
mService.setUidForeground(UID_RED, true);
mService.incrementOperationCount(UID_RED, 0xFAAD, 1);
@@ -679,7 +712,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
txPackets, operations);
}
- private Future<?> expectSystemReady() throws Exception {
+ private void expectSystemReady() throws Exception {
mAlarmManager.remove(isA(PendingIntent.class));
expectLastCall().anyTimes();
@@ -687,8 +720,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), isA(PendingIntent.class));
expectLastCall().atLeastOnce();
- return mServiceContext.nextBroadcastIntent(
- NetworkStatsService.ACTION_NETWORK_STATS_UPDATED);
+ mNetManager.setGlobalAlert(anyLong());
+ expectLastCall().atLeastOnce();
}
private void expectNetworkState(NetworkState... state) throws Exception {
@@ -727,6 +760,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expect(mTime.getCacheCertainty()).andReturn(0L).anyTimes();
}
+ private void expectNetworkStatsPoll() throws Exception {
+ mNetManager.setGlobalAlert(anyLong());
+ expectLastCall().anyTimes();
+ }
+
private void assertStatsFilesExist(boolean exist) {
final File networkFile = new File(mStatsDir, "netstats.bin");
final File uidFile = new File(mStatsDir, "netstats_uid.bin");
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index f7e0c66..1954172 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -832,6 +832,55 @@ public class TelephonyManager {
}
}
+ /**
+ * Returns the IMS private user identity (IMPI) that was loaded from the ISIM.
+ * @return the IMPI, or null if not present or not loaded
+ * @hide
+ */
+ public String getIsimImpi() {
+ try {
+ return getSubscriberInfo().getIsimImpi();
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return null;
+ }
+ }
+
+ /**
+ * Returns the IMS home network domain name that was loaded from the ISIM.
+ * @return the IMS domain name, or null if not present or not loaded
+ * @hide
+ */
+ public String getIsimDomain() {
+ try {
+ return getSubscriberInfo().getIsimDomain();
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return null;
+ }
+ }
+
+ /**
+ * Returns the IMS public user identities (IMPU) that were loaded from the ISIM.
+ * @return an array of IMPU strings, with one IMPU per string, or null if
+ * not present or not loaded
+ * @hide
+ */
+ public String[] getIsimImpu() {
+ try {
+ return getSubscriberInfo().getIsimImpu();
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return null;
+ }
+ }
+
private IPhoneSubInfo getSubscriberInfo() {
// get it each time because that process crashes a lot
return IPhoneSubInfo.Stub.asInterface(ServiceManager.getService("iphonesubinfo"));
diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java
index b68cbe9..1caea70 100644
--- a/telephony/java/com/android/internal/telephony/CommandsInterface.java
+++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java
@@ -1489,11 +1489,8 @@ public interface CommandsInterface {
/**
* Setup a packet data connection On successful completion, the result
- * message will return the following: [0] indicating PDP CID, which is
- * generated by RIL. This Connection ID is used in both GSM/UMTS and CDMA
- * modes [1] indicating the network interface name for GSM/UMTS or CDMA [2]
- * indicating the IP address for this interface for GSM/UMTS and NULL in the
- * case of CDMA
+ * message will return a {@link DataCallState} object containing the connection
+ * information.
*
* @param radioTechnology
* indicates whether to setup connection on radio technology CDMA
@@ -1569,7 +1566,7 @@ public interface CommandsInterface {
/**
* Request the status of the ICC and UICC cards.
*
- * @param response
+ * @param result
* Callback message containing {@link IccCardStatus} structure for the card.
*/
public void getIccCardStatus(Message result);
@@ -1583,4 +1580,14 @@ public interface CommandsInterface {
* or {@link Phone#LTE_ON_CDMA_TRUE}
*/
public int getLteOnCdmaMode();
+
+ /**
+ * Request the ISIM application on the UICC to perform the AKA
+ * challenge/response algorithm for IMS authentication. The nonce string
+ * and challenge response are Base64 encoded Strings.
+ *
+ * @param nonce the nonce string to pass with the ISIM authentication request
+ * @param response a callback message with the String response in the obj field
+ */
+ public void requestIsimAuthentication(String nonce, Message response);
}
diff --git a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
index 5cba2e1..def770f 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
@@ -67,4 +67,23 @@ interface IPhoneSubInfo {
* Retrieves the alpha identifier associated with the voice mail number.
*/
String getVoiceMailAlphaTag();
+
+ /**
+ * Returns the IMS private user identity (IMPI) that was loaded from the ISIM.
+ * @return the IMPI, or null if not present or not loaded
+ */
+ String getIsimImpi();
+
+ /**
+ * Returns the IMS home network domain name that was loaded from the ISIM.
+ * @return the IMS domain name, or null if not present or not loaded
+ */
+ String getIsimDomain();
+
+ /**
+ * Returns the IMS public user identities (IMPU) that were loaded from the ISIM.
+ * @return an array of IMPU strings, with one IMPU per string, or null if
+ * not present or not loaded
+ */
+ String[] getIsimImpu();
}
diff --git a/telephony/java/com/android/internal/telephony/IccRecords.java b/telephony/java/com/android/internal/telephony/IccRecords.java
index 3a27901..84bfc40 100644
--- a/telephony/java/com/android/internal/telephony/IccRecords.java
+++ b/telephony/java/com/android/internal/telephony/IccRecords.java
@@ -22,6 +22,8 @@ import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
+import com.android.internal.telephony.ims.IsimRecords;
+
/**
* {@hide}
*/
@@ -70,6 +72,24 @@ public abstract class IccRecords extends Handler implements IccConstants {
// ***** Event Constants
protected static final int EVENT_SET_MSISDN_DONE = 30;
+ public static final int EVENT_GET_ICC_RECORD_DONE = 100;
+
+ /**
+ * Generic ICC record loaded callback. Subclasses can call EF load methods on
+ * {@link IccFileHandler} passing a Message for onLoaded with the what field set to
+ * {@link #EVENT_GET_ICC_RECORD_DONE} and the obj field set to an instance
+ * of this interface. The {@link #handleMessage} method in this class will print a
+ * log message using {@link #getEfName()} and decrement {@link #recordsToLoad}.
+ *
+ * If the record load was successful, {@link #onRecordLoaded} will be called with the result.
+ * Otherwise, an error log message will be output by {@link #handleMessage} and
+ * {@link #onRecordLoaded} will not be called.
+ */
+ public interface IccRecordLoaded {
+ String getEfName();
+ void onRecordLoaded(AsyncResult ar);
+ }
+
// ***** Constructor
public IccRecords(PhoneBase p) {
@@ -234,7 +254,32 @@ public abstract class IccRecords extends Handler implements IccConstants {
//***** Overridden from Handler
@Override
- public abstract void handleMessage(Message msg);
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case EVENT_GET_ICC_RECORD_DONE:
+ try {
+ AsyncResult ar = (AsyncResult) msg.obj;
+ IccRecordLoaded recordLoaded = (IccRecordLoaded) ar.userObj;
+ if (DBG) log(recordLoaded.getEfName() + " LOADED");
+
+ if (ar.exception != null) {
+ loge("Record Load Exception: " + ar.exception);
+ } else {
+ recordLoaded.onRecordLoaded(ar);
+ }
+ }catch (RuntimeException exc) {
+ // I don't want these exceptions to be fatal
+ loge("Exception parsing SIM record: " + exc);
+ } finally {
+ // Count up record load responses even if they are fails
+ onRecordLoaded();
+ }
+ break;
+
+ default:
+ super.handleMessage(msg);
+ }
+ }
protected abstract void onRecordLoaded();
@@ -303,4 +348,19 @@ public abstract class IccRecords extends Handler implements IccConstants {
* @param s is the string to write
*/
protected abstract void log(String s);
+
+ /**
+ * Write error string to log file.
+ *
+ * @param s is the string to write
+ */
+ protected abstract void loge(String s);
+
+ /**
+ * Return an interface to retrieve the ISIM records for IMS, if available.
+ * @return the interface to retrieve the ISIM records, or null if not supported
+ */
+ public IsimRecords getIsimRecords() {
+ return null;
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 4b02e8e..6347f37 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -28,6 +28,7 @@ import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import com.android.internal.telephony.DataConnection;
+import com.android.internal.telephony.ims.IsimRecords;
import com.android.internal.telephony.test.SimulatedRadioControl;
import java.util.List;
@@ -1730,4 +1731,20 @@ public interface Phone {
* false otherwise
*/
boolean isCspPlmnEnabled();
+
+ /**
+ * Return an interface to retrieve the ISIM records for IMS, if available.
+ * @return the interface to retrieve the ISIM records, or null if not supported
+ */
+ IsimRecords getIsimRecords();
+
+ /**
+ * Request the ISIM application on the UICC to perform the AKA
+ * challenge/response algorithm for IMS authentication. The nonce string
+ * and challenge response are Base64 encoded Strings.
+ *
+ * @param nonce the nonce string to pass with the ISIM authentication request
+ * @param response a callback message with the String response in the obj field
+ */
+ void requestIsimAuthentication(String nonce, Message response);
}
diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java
index a0961ca..4f86ea8 100644
--- a/telephony/java/com/android/internal/telephony/PhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/PhoneBase.java
@@ -37,6 +37,7 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.internal.R;
+import com.android.internal.telephony.ims.IsimRecords;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.gsm.SIMRecords;
import com.android.internal.telephony.gsm.SimCard;
@@ -1114,6 +1115,15 @@ public abstract class PhoneBase extends Handler implements Phone {
return false;
}
+ public IsimRecords getIsimRecords() {
+ Log.e(LOG_TAG, "getIsimRecords() is only supported on LTE devices");
+ return null;
+ }
+
+ public void requestIsimAuthentication(String nonce, Message result) {
+ Log.e(LOG_TAG, "requestIsimAuthentication() is only supported on LTE devices");
+ }
+
/**
* Common error logger method for unexpected calls to CDMA-only methods.
*/
diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java
index b5bfc76f..3678017 100644
--- a/telephony/java/com/android/internal/telephony/PhoneProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java
@@ -32,6 +32,7 @@ import android.util.Log;
import com.android.internal.telephony.cdma.CDMAPhone;
import com.android.internal.telephony.gsm.GSMPhone;
+import com.android.internal.telephony.ims.IsimRecords;
import com.android.internal.telephony.test.SimulatedRadioControl;
import java.util.List;
@@ -841,6 +842,14 @@ public class PhoneProxy extends Handler implements Phone {
return mActivePhone.isCspPlmnEnabled();
}
+ public IsimRecords getIsimRecords() {
+ return mActivePhone.getIsimRecords();
+ }
+
+ public void requestIsimAuthentication(String nonce, Message response) {
+ mActivePhone.requestIsimAuthentication(nonce, response);
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/telephony/java/com/android/internal/telephony/PhoneSubInfo.java b/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
index a45cad1..de18d0a 100644
--- a/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
+++ b/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
@@ -24,15 +24,19 @@ import android.os.Binder;
import android.telephony.PhoneNumberUtils;
import android.util.Log;
+import com.android.internal.telephony.ims.IsimRecords;
+
public class PhoneSubInfo extends IPhoneSubInfo.Stub {
static final String LOG_TAG = "PHONE";
private Phone mPhone;
private Context mContext;
private static final String READ_PHONE_STATE =
android.Manifest.permission.READ_PHONE_STATE;
+ // TODO: change getCompleteVoiceMailNumber() to require READ_PRIVILEGED_PHONE_STATE
private static final String CALL_PRIVILEGED =
- // TODO Add core/res/AndriodManifest.xml#READ_PRIVILEGED_PHONE_STATE
android.Manifest.permission.CALL_PRIVILEGED;
+ private static final String READ_PRIVILEGED_PHONE_STATE =
+ android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
public PhoneSubInfo(Phone phone) {
mPhone = phone;
@@ -131,6 +135,52 @@ public class PhoneSubInfo extends IPhoneSubInfo.Stub {
return (String) mPhone.getVoiceMailAlphaTag();
}
+ /**
+ * Returns the IMS private user identity (IMPI) that was loaded from the ISIM.
+ * @return the IMPI, or null if not present or not loaded
+ */
+ public String getIsimImpi() {
+ mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE,
+ "Requires READ_PRIVILEGED_PHONE_STATE");
+ IsimRecords isim = mPhone.getIsimRecords();
+ if (isim != null) {
+ return isim.getIsimImpi();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the IMS home network domain name that was loaded from the ISIM.
+ * @return the IMS domain name, or null if not present or not loaded
+ */
+ public String getIsimDomain() {
+ mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE,
+ "Requires READ_PRIVILEGED_PHONE_STATE");
+ IsimRecords isim = mPhone.getIsimRecords();
+ if (isim != null) {
+ return isim.getIsimDomain();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the IMS public user identities (IMPU) that were loaded from the ISIM.
+ * @return an array of IMPU strings, with one IMPU per string, or null if
+ * not present or not loaded
+ */
+ public String[] getIsimImpu() {
+ mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE,
+ "Requires READ_PRIVILEGED_PHONE_STATE");
+ IsimRecords isim = mPhone.getIsimRecords();
+ if (isim != null) {
+ return isim.getIsimImpu();
+ } else {
+ return null;
+ }
+ }
+
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
diff --git a/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java b/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
index 7009893..a287b2e 100644
--- a/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
@@ -95,6 +95,31 @@ public class PhoneSubInfoProxy extends IPhoneSubInfo.Stub {
return mPhoneSubInfo.getVoiceMailAlphaTag();
}
+ /**
+ * Returns the IMS private user identity (IMPI) that was loaded from the ISIM.
+ * @return the IMPI, or null if not present or not loaded
+ */
+ public String getIsimImpi() {
+ return mPhoneSubInfo.getIsimImpi();
+ }
+
+ /**
+ * Returns the IMS home network domain name that was loaded from the ISIM.
+ * @return the IMS domain name, or null if not present or not loaded
+ */
+ public String getIsimDomain() {
+ return mPhoneSubInfo.getIsimDomain();
+ }
+
+ /**
+ * Returns the IMS public user identities (IMPU) that were loaded from the ISIM.
+ * @return an array of IMPU strings, with one IMPU per string, or null if
+ * not present or not loaded
+ */
+ public String[] getIsimImpu() {
+ return mPhoneSubInfo.getIsimImpu();
+ }
+
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mPhoneSubInfo.dump(fd, pw, args);
}
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index c6ed405..3e13a86 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -47,17 +47,8 @@ import android.telephony.SmsMessage;
import android.text.TextUtils;
import android.util.Log;
-import com.android.internal.telephony.CallForwardInfo;
-import com.android.internal.telephony.CommandException;
-import com.android.internal.telephony.DataCallState;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
import com.android.internal.telephony.gsm.SuppServiceNotification;
-import com.android.internal.telephony.IccCardApplication;
-import com.android.internal.telephony.IccCardStatus;
-import com.android.internal.telephony.IccUtils;
-import com.android.internal.telephony.OperatorInfo;
-import com.android.internal.telephony.RILConstants;
-import com.android.internal.telephony.SmsResponse;
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.cdma.CdmaInformationRecords;
@@ -2255,6 +2246,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret = responseInts(p); break;
+ case RIL_REQUEST_ISIM_AUTHENTICATION: ret = responseString(p); break;
default:
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
//break;
@@ -3461,6 +3453,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
default: return "<unknown request>";
}
}
@@ -3704,4 +3697,13 @@ public final class RIL extends BaseCommands implements CommandsInterface {
send(rr);
}
+ public void requestIsimAuthentication(String nonce, Message response) {
+ RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
+
+ rr.mp.writeString(nonce);
+
+ if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+
+ send(rr);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index facee5f..7fb7f41 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -261,6 +261,7 @@ cat include/telephony/ril.h | \
int RIL_REQUEST_REPORT_SMS_MEMORY_STATUS = 102;
int RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING = 103;
int RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE = 104;
+ int RIL_REQUEST_ISIM_AUTHENTICATION = 105;
int RIL_UNSOL_RESPONSE_BASE = 1000;
int RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED = 1000;
int RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED = 1001;
diff --git a/telephony/java/com/android/internal/telephony/cat/ResponseData.java b/telephony/java/com/android/internal/telephony/cat/ResponseData.java
index 55a2b63..1157c1a 100644
--- a/telephony/java/com/android/internal/telephony/cat/ResponseData.java
+++ b/telephony/java/com/android/internal/telephony/cat/ResponseData.java
@@ -19,6 +19,10 @@ package com.android.internal.telephony.cat;
import com.android.internal.telephony.EncodeException;
import com.android.internal.telephony.GsmAlphabet;
import java.util.Calendar;
+import java.util.TimeZone;
+import android.os.SystemProperties;
+import android.text.TextUtils;
+
import com.android.internal.telephony.cat.AppInterface.CommandType;
import java.io.ByteArrayOutputStream;
@@ -209,7 +213,6 @@ class DTTZResponseData extends ResponseData {
buf.write(tag); // tag
byte[] data = new byte[8];
- byte btmp; // temp variable
data[0] = 0x07; // Write length of DTTZ data
@@ -217,41 +220,62 @@ class DTTZResponseData extends ResponseData {
calendar = Calendar.getInstance();
}
// Fill year byte
- btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100);
- data[1] = (byte) (btmp / 10);
- data[1] += (byte) ((btmp % 10) << 4);
+ data[1] = byteToBCD(calendar.get(java.util.Calendar.YEAR) % 100);
// Fill month byte
- btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1);
- data[2] = (byte) (btmp / 10);
- data[2] += (byte) ((btmp % 10) << 4);
+ data[2] = byteToBCD(calendar.get(java.util.Calendar.MONTH) + 1);
// Fill day byte
- btmp = (byte) (calendar.get(java.util.Calendar.DATE));
- data[3] = (byte) (btmp / 10);
- data[3] += (byte) ((btmp % 10) << 4);
+ data[3] = byteToBCD(calendar.get(java.util.Calendar.DATE));
// Fill hour byte
- btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY));
- data[4] = (byte) (btmp / 10);
- data[4] += (byte) ((btmp % 10) << 4);
+ data[4] = byteToBCD(calendar.get(java.util.Calendar.HOUR_OF_DAY));
// Fill minute byte
- btmp = (byte) (calendar.get(java.util.Calendar.MINUTE));
- data[5] = (byte) (btmp / 10);
- data[5] += (byte) ((btmp % 10) << 4);
+ data[5] = byteToBCD(calendar.get(java.util.Calendar.MINUTE));
// Fill second byte
- btmp = (byte) (calendar.get(java.util.Calendar.SECOND));
- data[6] = (byte) (btmp / 10);
- data[6] += (byte) ((btmp % 10) << 4);
+ data[6] = byteToBCD(calendar.get(java.util.Calendar.SECOND));
- // No time zone info
- data[7] = (byte) 0xFF;
+ String tz = SystemProperties.get("persist.sys.timezone", "");
+ if (TextUtils.isEmpty(tz)) {
+ data[7] = (byte) 0xFF; // set FF in terminal response
+ } else {
+ TimeZone zone = TimeZone.getTimeZone(tz);
+ int zoneOffset = zone.getRawOffset() + zone.getDSTSavings();
+ data[7] = getTZOffSetByte(zoneOffset);
+ }
for (byte b : data) {
buf.write(b);
}
}
+
+ private byte byteToBCD(int value) {
+ if (value < 0 && value > 99) {
+ CatLog.d(this, "Err: byteToBCD conversion Value is " + value +
+ " Value has to be between 0 and 99");
+ return 0;
+ }
+
+ return (byte) ((value / 10) | ((value % 10) << 4));
+ }
+
+ private byte getTZOffSetByte(long offSetVal) {
+ boolean isNegative = (offSetVal < 0);
+
+ /*
+ * The 'offSetVal' is in milliseconds. Convert it to hours and compute
+ * offset While sending T.R to UICC, offset is expressed is 'quarters of
+ * hours'
+ */
+
+ long tzOffset = offSetVal / (15 * 60 * 1000);
+ tzOffset = (isNegative ? -1 : 1) * tzOffset;
+ byte bcdVal = byteToBCD((int) tzOffset);
+ // For negative offsets, put '1' in the msb
+ return isNegative ? (bcdVal |= 0x08) : bcdVal;
+ }
+
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
index ac66b48..f4ed91d 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 The Android Open Source Project
+ * 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.
@@ -16,29 +16,19 @@
package com.android.internal.telephony.cdma;
-import android.os.SystemProperties;
+import android.content.ContentValues;
import android.content.Context;
+import android.database.SQLException;
import android.net.Uri;
-import android.content.Context;
+import android.os.Message;
import android.provider.Telephony;
-import android.content.ContentValues;
-import android.database.SQLException;
-import android.telephony.ServiceState;
-import android.telephony.SignalStrength;
+import android.util.Log;
-import com.android.internal.telephony.gsm.SIMRecords;
-import com.android.internal.telephony.gsm.SimCard;
-import com.android.internal.telephony.ServiceStateTracker;
-import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.PhoneNotifier;
-import com.android.internal.telephony.PhoneProxy;
-import com.android.internal.telephony.IccCard;
-import com.android.internal.telephony.gsm.GsmDataConnectionTracker;
-
-import android.util.Log;
+import com.android.internal.telephony.gsm.SimCard;
+import com.android.internal.telephony.ims.IsimRecords;
public class CDMALTEPhone extends CDMAPhone {
static final String LOG_TAG = "CDMA";
@@ -68,7 +58,7 @@ public class CDMALTEPhone extends CDMAPhone {
DataState ret = DataState.DISCONNECTED;
if (mSST == null) {
- // Radio Technology Change is ongoning, dispose() and
+ // Radio Technology Change is ongoing, dispose() and
// removeReferences() have already been called
ret = DataState.DISCONNECTED;
@@ -146,6 +136,16 @@ public class CDMALTEPhone extends CDMAPhone {
}
@Override
+ public IsimRecords getIsimRecords() {
+ return mIccRecords.getIsimRecords();
+ }
+
+ @Override
+ public void requestIsimAuthentication(String nonce, Message result) {
+ mCM.requestIsimAuthentication(nonce, result);
+ }
+
+ @Override
protected void log(String s) {
if (DBG)
Log.d(LOG_TAG, "[CDMALTEPhone] " + s);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index 134227a..e92a276 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -39,6 +39,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
CDMALTEPhone mCdmaLtePhone;
private ServiceState mLteSS; // The last LTE state from Voice Registration
+ private boolean mNeedToRegForSimLoaded = true;
public CdmaLteServiceStateTracker(CDMALTEPhone phone) {
super(phone);
@@ -71,7 +72,10 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
isSubscriptionFromRuim = false;
// Register SIM_RECORDS_LOADED dynamically.
// This is to avoid confilct with RUIM_READY scenario)
- phone.mIccRecords.registerForRecordsLoaded(this, EVENT_SIM_RECORDS_LOADED, null);
+ if (mNeedToRegForSimLoaded) {
+ phone.mIccRecords.registerForRecordsLoaded(this, EVENT_SIM_RECORDS_LOADED, null);
+ mNeedToRegForSimLoaded = false;
+ }
pollState();
// Signal strength polling stops when radio is off.
queueNextSignalStrengthPoll();
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccFileHandler.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccFileHandler.java
index b9d7c46..b57af0e 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccFileHandler.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccFileHandler.java
@@ -42,6 +42,10 @@ public final class CdmaLteUiccFileHandler extends IccFileHandler {
return MF_SIM + DF_CDMA;
case EF_AD:
return MF_SIM + DF_GSM;
+ case EF_IMPI:
+ case EF_DOMAIN:
+ case EF_IMPU:
+ return MF_SIM + DF_ADFISIM;
}
return getCommonIccEFPath(efid);
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
index fc6abad..c4fa6f6 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteUiccRecords.java
@@ -15,8 +15,10 @@
*/
package com.android.internal.telephony.cdma;
-import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
-import static com.android.internal.telephony.TelephonyProperties.PROPERTY_TEST_CSIM;
+import android.os.AsyncResult;
+import android.os.SystemProperties;
+import android.util.Log;
+
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.IccCardApplication.AppType;
import com.android.internal.telephony.IccFileHandler;
@@ -25,12 +27,14 @@ import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.cdma.sms.UserData;
import com.android.internal.telephony.gsm.SIMRecords;
-import android.os.AsyncResult;
-import android.os.Message;
-import android.os.SystemProperties;
-import android.util.Log;
-import java.util.Locale;
+import com.android.internal.telephony.ims.IsimRecords;
+import com.android.internal.telephony.ims.IsimUiccRecords;
+
import java.util.ArrayList;
+import java.util.Locale;
+
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_TEST_CSIM;
/**
* {@hide}
@@ -46,130 +50,191 @@ public final class CdmaLteUiccRecords extends SIMRecords {
private String mHomeSystemId;
private String mHomeNetworkId;
- private static final int EVENT_GET_PL_DONE = CSIM_EVENT_BASE;
- private static final int EVENT_GET_CSIM_LI_DONE = CSIM_EVENT_BASE + 1;
- private static final int EVENT_GET_CSIM_SPN_DONE = CSIM_EVENT_BASE + 2;
- private static final int EVENT_GET_CSIM_MDN_DONE = CSIM_EVENT_BASE + 3;
- private static final int EVENT_GET_CSIM_IMSIM_DONE = CSIM_EVENT_BASE + 4;
- private static final int EVENT_GET_CSIM_CDMAHOME_DONE = CSIM_EVENT_BASE + 5;
- private static final int EVENT_GET_CSIM_EPRL_DONE = CSIM_EVENT_BASE + 6;
+ private final IsimUiccRecords mIsimUiccRecords = new IsimUiccRecords();
public CdmaLteUiccRecords(PhoneBase p) {
super(p);
}
- @Override
- public void handleMessage(Message msg) {
- AsyncResult ar;
- byte data[];
-
- boolean isCsimRecordLoadResponse = false;
+ // Refer to ETSI TS 102.221
+ private class EfPlLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_PL";
+ }
- try { switch (msg.what) {
- case EVENT_GET_PL_DONE:
- // Refer to ETSI TS.102.221
- if (DBG) log("EF_GET_EF_PL_DONE");
- isCsimRecordLoadResponse = true;
+ public void onRecordLoaded(AsyncResult ar) {
+ mEFpl = (byte[]) ar.result;
+ if (DBG) log("EF_PL=" + IccUtils.bytesToHexString(mEFpl));
+ }
+ }
- ar = (AsyncResult) msg.obj;
+ // Refer to C.S0065 5.2.26
+ private class EfCsimLiLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_LI";
+ }
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception = " + ar.exception);
- break;
+ public void onRecordLoaded(AsyncResult ar) {
+ mEFli = (byte[]) ar.result;
+ // convert csim efli data to iso 639 format
+ for (int i = 0; i < mEFli.length; i+=2) {
+ switch(mEFli[i+1]) {
+ case 0x01: mEFli[i] = 'e'; mEFli[i+1] = 'n';break;
+ case 0x02: mEFli[i] = 'f'; mEFli[i+1] = 'r';break;
+ case 0x03: mEFli[i] = 'e'; mEFli[i+1] = 's';break;
+ case 0x04: mEFli[i] = 'j'; mEFli[i+1] = 'a';break;
+ case 0x05: mEFli[i] = 'k'; mEFli[i+1] = 'o';break;
+ case 0x06: mEFli[i] = 'z'; mEFli[i+1] = 'h';break;
+ case 0x07: mEFli[i] = 'h'; mEFli[i+1] = 'e';break;
+ default: mEFli[i] = ' '; mEFli[i+1] = ' ';
}
+ }
- mEFpl = (byte[]) ar.result;
- if (DBG) log("EF_PL=" + IccUtils.bytesToHexString(mEFpl));
- break;
+ if (DBG) log("EF_LI=" + IccUtils.bytesToHexString(mEFli));
+ }
+ }
- case EVENT_GET_CSIM_LI_DONE:
- // Refer to C.S0065 5.2.26
- if (DBG) log("EVENT_GET_CSIM_LI_DONE");
- isCsimRecordLoadResponse = true;
+ // Refer to C.S0065 5.2.32
+ private class EfCsimSpnLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_SPN";
+ }
- ar = (AsyncResult) msg.obj;
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception = " + ar.exception);
- break;
- }
+ public void onRecordLoaded(AsyncResult ar) {
+ byte[] data = (byte[]) ar.result;
+ if (DBG) log("CSIM_SPN=" +
+ IccUtils.bytesToHexString(data));
- mEFli = (byte[]) ar.result;
- // convert csim efli data to iso 639 format
- for (int i = 0; i < mEFli.length; i+=2) {
- switch(mEFli[i+1]) {
- case 0x01: mEFli[i] = 'e'; mEFli[i+1] = 'n';break;
- case 0x02: mEFli[i] = 'f'; mEFli[i+1] = 'r';break;
- case 0x03: mEFli[i] = 'e'; mEFli[i+1] = 's';break;
- case 0x04: mEFli[i] = 'j'; mEFli[i+1] = 'a';break;
- case 0x05: mEFli[i] = 'k'; mEFli[i+1] = 'o';break;
- case 0x06: mEFli[i] = 'z'; mEFli[i+1] = 'h';break;
- case 0x07: mEFli[i] = 'h'; mEFli[i+1] = 'e';break;
- default: mEFli[i] = ' '; mEFli[i+1] = ' ';
- }
- }
+ // C.S0065 for EF_SPN decoding
+ mCsimSpnDisplayCondition = ((0x01 & data[0]) != 0);
- if (DBG) log("EF_LI=" + IccUtils.bytesToHexString(mEFli));
- break;
- case EVENT_GET_CSIM_SPN_DONE:
- // Refer to C.S0065 5.2.32
- if (DBG) log("EVENT_GET_CSIM_SPN_DONE");
- isCsimRecordLoadResponse = true;
- ar = (AsyncResult) msg.obj;
+ int encoding = data[1];
+ int language = data[2];
+ byte[] spnData = new byte[32];
+ System.arraycopy(data, 3, spnData, 0, (data.length < 32) ? data.length : 32);
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception=" + ar.exception);
- break;
- }
- onGetCSimSpnDone(ar);
- break;
- case EVENT_GET_CSIM_MDN_DONE:
- if (DBG) log("EVENT_GET_CSIM_MDN_DONE");
- isCsimRecordLoadResponse = true;
- ar = (AsyncResult) msg.obj;
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception=" + ar.exception);
+ int numBytes;
+ for (numBytes = 0; numBytes < spnData.length; numBytes++) {
+ if ((spnData[numBytes] & 0xFF) == 0xFF) break;
+ }
+
+ if (numBytes == 0) {
+ spn = "";
+ return;
+ }
+ try {
+ switch (encoding) {
+ case UserData.ENCODING_OCTET:
+ case UserData.ENCODING_LATIN:
+ spn = new String(spnData, 0, numBytes, "ISO-8859-1");
break;
- }
- onGetCSimMdnDone(ar);
- break;
- case EVENT_GET_CSIM_IMSIM_DONE:
- if (DBG) log("EVENT_GET_CSIM_IMSIM_DONE");
- isCsimRecordLoadResponse = true;
- ar = (AsyncResult) msg.obj;
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception=" + ar.exception);
+ case UserData.ENCODING_IA5:
+ case UserData.ENCODING_GSM_7BIT_ALPHABET:
+ case UserData.ENCODING_7BIT_ASCII:
+ spn = GsmAlphabet.gsm7BitPackedToString(spnData, 0, (numBytes*8)/7);
break;
- }
- onGetCSimImsimDone(ar);
- break;
- case EVENT_GET_CSIM_CDMAHOME_DONE:
- if (DBG) log("EVENT_GET_CSIM_CDMAHOME_DONE");
- isCsimRecordLoadResponse = true;
- ar = (AsyncResult) msg.obj;
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception=" + ar.exception);
+ case UserData.ENCODING_UNICODE_16:
+ spn = new String(spnData, 0, numBytes, "utf-16");
break;
+ default:
+ log("SPN encoding not supported");
}
- onGetCSimCdmaHomeDone(ar);
- break;
- case EVENT_GET_CSIM_EPRL_DONE:
- if (DBG) log("EVENT_GET_CSIM_EPRL_DONE");
- isCsimRecordLoadResponse = true;
- ar = (AsyncResult) msg.obj;
- if (ar.exception != null) {
- Log.e(LOG_TAG, "ar.exception=" + ar.exception);
- break;
+ } catch(Exception e) {
+ log("spn decode error: " + e);
+ }
+ if (DBG) log("spn=" + spn);
+ if (DBG) log("spnCondition=" + mCsimSpnDisplayCondition);
+ phone.setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, spn);
+ }
+ }
+
+ private class EfCsimMdnLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_MDN";
+ }
+
+ public void onRecordLoaded(AsyncResult ar) {
+ byte[] data = (byte[]) ar.result;
+ if (DBG) log("CSIM_MDN=" + IccUtils.bytesToHexString(data));
+ int mdnDigitsNum = 0x0F & data[0];
+ mMdn = IccUtils.cdmaBcdToString(data, 1, mdnDigitsNum);
+ if (DBG) log("CSIM MDN=" + mMdn);
+ }
+ }
+
+ private class EfCsimImsimLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_IMSIM";
+ }
+
+ public void onRecordLoaded(AsyncResult ar) {
+ byte[] data = (byte[]) ar.result;
+ if (DBG) log("CSIM_IMSIM=" + IccUtils.bytesToHexString(data));
+ // C.S0065 section 5.2.2 for IMSI_M encoding
+ // C.S0005 section 2.3.1 for MIN encoding in IMSI_M.
+ boolean provisioned = ((data[7] & 0x80) == 0x80);
+
+ if (provisioned) {
+ int first3digits = ((0x03 & data[2]) << 8) + (0xFF & data[1]);
+ int second3digits = (((0xFF & data[5]) << 8) | (0xFF & data[4])) >> 6;
+ int digit7 = 0x0F & (data[4] >> 2);
+ if (digit7 > 0x09) digit7 = 0;
+ int last3digits = ((0x03 & data[4]) << 8) | (0xFF & data[3]);
+ first3digits = adjstMinDigits(first3digits);
+ second3digits = adjstMinDigits(second3digits);
+ last3digits = adjstMinDigits(last3digits);
+
+ StringBuilder builder = new StringBuilder();
+ builder.append(String.format(Locale.US, "%03d", first3digits));
+ builder.append(String.format(Locale.US, "%03d", second3digits));
+ builder.append(String.format(Locale.US, "%d", digit7));
+ builder.append(String.format(Locale.US, "%03d", last3digits));
+ mMin = builder.toString();
+ if (DBG) log("min present=" + mMin);
+ } else {
+ if (DBG) log("min not present");
+ }
+ }
+ }
+
+ private class EfCsimCdmaHomeLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_CDMAHOME";
+ }
+
+ public void onRecordLoaded(AsyncResult ar) {
+ // Per C.S0065 section 5.2.8
+ ArrayList<byte[]> dataList = (ArrayList<byte[]>) ar.result;
+ if (DBG) log("CSIM_CDMAHOME data size=" + dataList.size());
+ if (dataList.isEmpty()) {
+ return;
+ }
+ StringBuilder sidBuf = new StringBuilder();
+ StringBuilder nidBuf = new StringBuilder();
+
+ for (byte[] data : dataList) {
+ if (data.length == 5) {
+ int sid = ((data[1] & 0xFF) << 8) | (data[0] & 0xFF);
+ int nid = ((data[3] & 0xFF) << 8) | (data[2] & 0xFF);
+ sidBuf.append(sid).append(',');
+ nidBuf.append(nid).append(',');
}
- onGetCSimEprlDone(ar);
- break;
- default:
- super.handleMessage(msg);
- }}catch (RuntimeException exc) {
- Log.w(LOG_TAG, "Exception parsing SIM record", exc);
- } finally {
- if (isCsimRecordLoadResponse) {
- onRecordLoaded();
}
+ // remove trailing ","
+ sidBuf.setLength(sidBuf.length()-1);
+ nidBuf.setLength(nidBuf.length()-1);
+
+ mHomeSystemId = sidBuf.toString();
+ mHomeNetworkId = nidBuf.toString();
+ }
+ }
+
+ private class EfCsimEprlLoaded implements IccRecordLoaded {
+ public String getEfName() {
+ return "EF_CSIM_EPRL";
+ }
+ public void onRecordLoaded(AsyncResult ar) {
+ onGetCSimEprlDone(ar);
}
}
@@ -189,8 +254,8 @@ public final class CdmaLteUiccRecords extends SIMRecords {
@Override
protected void onAllRecordsLoaded() {
- super.onAllRecordsLoaded();
setLocaleFromCsim();
+ super.onAllRecordsLoaded(); // broadcasts ICC state change to "LOADED"
}
@Override
@@ -207,112 +272,36 @@ public final class CdmaLteUiccRecords extends SIMRecords {
iccFh.loadEFTransparent(EF_AD, obtainMessage(EVENT_GET_AD_DONE));
recordsToLoad++;
- iccFh.loadEFTransparent(EF_PL, obtainMessage(EVENT_GET_PL_DONE));
+ iccFh.loadEFTransparent(EF_PL,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfPlLoaded()));
recordsToLoad++;
- iccFh.loadEFTransparent(EF_CSIM_LI, obtainMessage(EVENT_GET_CSIM_LI_DONE));
+ iccFh.loadEFTransparent(EF_CSIM_LI,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimLiLoaded()));
recordsToLoad++;
- iccFh.loadEFTransparent(EF_CSIM_SPN, obtainMessage(EVENT_GET_CSIM_SPN_DONE));
+ iccFh.loadEFTransparent(EF_CSIM_SPN,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimSpnLoaded()));
recordsToLoad++;
- iccFh.loadEFLinearFixed(EF_CSIM_MDN, 1, obtainMessage(EVENT_GET_CSIM_MDN_DONE));
+ iccFh.loadEFLinearFixed(EF_CSIM_MDN, 1,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimMdnLoaded()));
recordsToLoad++;
- iccFh.loadEFTransparent(EF_CSIM_IMSIM, obtainMessage(EVENT_GET_CSIM_IMSIM_DONE));
+ iccFh.loadEFTransparent(EF_CSIM_IMSIM,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimImsimLoaded()));
recordsToLoad++;
iccFh.loadEFLinearFixedAll(EF_CSIM_CDMAHOME,
- obtainMessage(EVENT_GET_CSIM_CDMAHOME_DONE));
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimCdmaHomeLoaded()));
recordsToLoad++;
- iccFh.loadEFTransparent(EF_CSIM_EPRL, obtainMessage(EVENT_GET_CSIM_EPRL_DONE));
+ iccFh.loadEFTransparent(EF_CSIM_EPRL,
+ obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimEprlLoaded()));
recordsToLoad++;
- }
-
- private void onGetCSimSpnDone(AsyncResult ar) {
- byte[] data = (byte[]) ar.result;
- if (DBG) log("CSIM_SPN=" +
- IccUtils.bytesToHexString(data));
-
- // C.S0065 for EF_SPN decoding
- mCsimSpnDisplayCondition = ((0x01 & data[0]) != 0) ? true : false;
-
- int encoding = data[1];
- int language = data[2];
- byte[] spnData = new byte[32];
- System.arraycopy(data, 3, spnData, 0, (data.length < 32)?data.length:32);
-
- int numBytes;
- for (numBytes = 0; numBytes < spnData.length; numBytes++) {
- if ((spnData[numBytes] & 0xFF) == 0xFF) break;
- }
- if (numBytes == 0) {
- spn = "";
- return;
- }
- try {
- switch (encoding) {
- case UserData.ENCODING_OCTET:
- case UserData.ENCODING_LATIN:
- spn = new String(spnData, 0, numBytes, "ISO-8859-1");
- break;
- case UserData.ENCODING_IA5:
- case UserData.ENCODING_GSM_7BIT_ALPHABET:
- case UserData.ENCODING_7BIT_ASCII:
- spn = GsmAlphabet.gsm7BitPackedToString(spnData, 0, (numBytes*8)/7);
- break;
- case UserData.ENCODING_UNICODE_16:
- spn = new String(spnData, 0, numBytes, "utf-16");
- break;
- default:
- log("SPN encoding not supported");
- }
- } catch(Exception e) {
- log("spn decode error: " + e);
- }
- if (DBG) log("spn=" + spn);
- if (DBG) log("spnCondition=" + mCsimSpnDisplayCondition);
- phone.setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, spn);
- }
-
- private void onGetCSimMdnDone(AsyncResult ar) {
- byte[] data = (byte[]) ar.result;
- if (DBG) log("CSIM_MDN=" + IccUtils.bytesToHexString(data));
- int mdnDigitsNum = 0x0F & data[0];
- mMdn = IccUtils.cdmaBcdToString(data, 1, mdnDigitsNum);
- if (DBG) log("CSIM MDN=" + mMdn);
- }
-
- private void onGetCSimImsimDone(AsyncResult ar) {
- byte[] data = (byte[]) ar.result;
- if (DBG) log("CSIM_IMSIM=" + IccUtils.bytesToHexString(data));
- // C.S0065 section 5.2.2 for IMSI_M encoding
- // C.S0005 section 2.3.1 for MIN encoding in IMSI_M.
- boolean provisioned = ((data[7] & 0x80) == 0x80);
-
- if (provisioned) {
- int first3digits = ((0x03 & data[2]) << 8) + (0xFF & data[1]);
- int second3digits = (((0xFF & data[5]) << 8) | (0xFF & data[4])) >> 6;
- int digit7 = 0x0F & (data[4] >> 2);
- if (digit7 > 0x09) digit7 = 0;
- int last3digits = ((0x03 & data[4]) << 8) | (0xFF & data[3]);
- first3digits = adjstMinDigits(first3digits);
- second3digits = adjstMinDigits(second3digits);
- last3digits = adjstMinDigits(last3digits);
-
- StringBuilder builder = new StringBuilder();
- builder.append(String.format(Locale.US, "%03d", first3digits));
- builder.append(String.format(Locale.US, "%03d", second3digits));
- builder.append(String.format(Locale.US, "%d", digit7));
- builder.append(String.format(Locale.US, "%03d", last3digits));
- if (DBG) log("min present=" + builder.toString());
-
- mMin = builder.toString();
- } else {
- if (DBG) log("min not present");
- }
+ // load ISIM records
+ recordsToLoad += mIsimUiccRecords.fetchIsimRecords(iccFh, this);
}
private int adjstMinDigits (int digits) {
@@ -324,32 +313,6 @@ public final class CdmaLteUiccRecords extends SIMRecords {
return digits;
}
- private void onGetCSimCdmaHomeDone(AsyncResult ar) {
- // Per C.S0065 section 5.2.8
- ArrayList<byte[]> dataList = (ArrayList<byte[]>) ar.result;
- if (DBG) log("CSIM_CDMAHOME data size=" + dataList.size());
- if (dataList.isEmpty()) {
- return;
- }
- StringBuilder sidBuf = new StringBuilder();
- StringBuilder nidBuf = new StringBuilder();
-
- for (byte[] data : dataList) {
- if (data.length == 5) {
- int sid = ((data[1] & 0xFF) << 8) | (data[0] & 0xFF);
- int nid = ((data[3] & 0xFF) << 8) | (data[2] & 0xFF);
- sidBuf.append(sid).append(",");
- nidBuf.append(nid).append(",");
- }
- }
- // remove trailing ","
- sidBuf.setLength(sidBuf.length()-1);
- nidBuf.setLength(nidBuf.length()-1);
-
- mHomeSystemId = sidBuf.toString();
- mHomeNetworkId = nidBuf.toString();
- }
-
private void onGetCSimEprlDone(AsyncResult ar) {
// C.S0065 section 5.2.57 for EFeprl encoding
// C.S0016 section 3.5.5 for PRL format.
@@ -418,6 +381,11 @@ public final class CdmaLteUiccRecords extends SIMRecords {
if (DBG) Log.d(LOG_TAG, "[CSIM] " + s);
}
+ @Override
+ protected void loge(String s) {
+ if (DBG) Log.e(LOG_TAG, "[CSIM] " + s);
+ }
+
public String getMdn() {
return mMdn;
}
@@ -443,6 +411,11 @@ public final class CdmaLteUiccRecords extends SIMRecords {
}
@Override
+ public IsimRecords getIsimRecords() {
+ return mIsimUiccRecords;
+ }
+
+ @Override
public boolean isProvisioned() {
// If UICC card has CSIM app, look for MDN and MIN field
// to determine if the SIM is provisioned. Otherwise,
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 2cf4b88..0aed77e 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -545,7 +545,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
int defaultRoamingIndicator = 0; //[12] Is default roaming indicator from PRL
int reasonForDenial = 0; //[13] Denial reason if registrationState = 3
- if (states.length == 14) {
+ if (states.length >= 14) {
try {
if (states[0] != null) {
registrationState = Integer.parseInt(states[0]);
@@ -593,8 +593,8 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
}
} else {
throw new RuntimeException("Warning! Wrong number of parameters returned from "
- + "RIL_REQUEST_REGISTRATION_STATE: expected 14 got "
- + states.length);
+ + "RIL_REQUEST_REGISTRATION_STATE: expected 14 or more "
+ + "strings and got " + states.length + " strings");
}
mRegistrationState = registrationState;
diff --git a/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java b/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
index 9af2d26..9850b9f 100755
--- a/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
+++ b/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
@@ -443,4 +443,8 @@ public final class RuimRecords extends IccRecords {
Log.d(LOG_TAG, "[RuimRecords] " + s);
}
+ @Override
+ protected void loge(String s) {
+ Log.e(LOG_TAG, "[RuimRecords] " + s);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index c8671c1..00fb0e0 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -576,7 +576,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
boolean allowed =
(gprsState == ServiceState.STATE_IN_SERVICE || mAutoAttachOnCreation) &&
mPhone.mIccRecords.getRecordsLoaded() &&
- mPhone.getState() == Phone.State.IDLE &&
+ (mPhone.getState() == Phone.State.IDLE ||
+ mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) &&
internalDataEnabled &&
(!mPhone.getServiceState().getRoaming() || getDataOnRoamingEnabled()) &&
!mIsPsRestricted &&
@@ -587,8 +588,10 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
reason += " - gprs= " + gprsState;
}
if (!mPhone.mIccRecords.getRecordsLoaded()) reason += " - SIM not loaded";
- if (mPhone.getState() != Phone.State.IDLE) {
+ if (mPhone.getState() != Phone.State.IDLE &&
+ !mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) {
reason += " - PhoneState= " + mPhone.getState();
+ reason += " - Concurrent voice and data not allowed";
}
if (!internalDataEnabled) reason += " - mInternalDataEnabled= false";
if (mPhone.getServiceState().getRoaming() && !getDataOnRoamingEnabled()) {
diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
index b0bad56..28034cc 100755
--- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
+++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
@@ -147,8 +147,6 @@ public class SIMRecords extends IccRecords {
private static final int EVENT_GET_CFIS_DONE = 32;
private static final int EVENT_GET_CSP_CPHS_DONE = 33;
- protected static final int CSIM_EVENT_BASE = 100;
-
// Lookup table for carriers known to produce SIMs which incorrectly indicate MNC length.
private static final String[] MCCMNC_CODES_HAVING_3DIGITS_MNC = {
@@ -1089,6 +1087,9 @@ public class SIMRecords extends IccRecords {
handleEfCspData(data);
break;
+ default:
+ super.handleMessage(msg); // IccRecords handles generic record load responses
+
}}catch (RuntimeException exc) {
// I don't want these exceptions to be fatal
Log.w(LOG_TAG, "Exception parsing SIM record", exc);
@@ -1573,6 +1574,10 @@ public class SIMRecords extends IccRecords {
Log.d(LOG_TAG, "[SIMRecords] " + s);
}
+ protected void loge(String s) {
+ Log.e(LOG_TAG, "[SIMRecords] " + s);
+ }
+
/**
* Return true if "Restriction of menu options for manual PLMN selection"
* bit is set or EF_CSP data is unavailable, return false otherwise.
diff --git a/telephony/java/com/android/internal/telephony/ims/IsimRecords.java b/telephony/java/com/android/internal/telephony/ims/IsimRecords.java
new file mode 100644
index 0000000..b8b98b9
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/ims/IsimRecords.java
@@ -0,0 +1,44 @@
+/*
+ * 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.internal.telephony.ims;
+
+/**
+ * {@hide}
+ */
+public interface IsimRecords {
+
+ /**
+ * Return the IMS private user identity (IMPI).
+ * Returns null if the IMPI hasn't been loaded or isn't present on the ISIM.
+ * @return the IMS private user identity string, or null if not available
+ */
+ String getIsimImpi();
+
+ /**
+ * Return the IMS home network domain name.
+ * Returns null if the IMS domain hasn't been loaded or isn't present on the ISIM.
+ * @return the IMS home network domain name, or null if not available
+ */
+ String getIsimDomain();
+
+ /**
+ * Return an array of IMS public user identities (IMPU).
+ * Returns null if the IMPU hasn't been loaded or isn't present on the ISIM.
+ * @return an array of IMS public user identity strings, or null if not available
+ */
+ String[] getIsimImpu();
+}
diff --git a/telephony/java/com/android/internal/telephony/ims/IsimUiccRecords.java b/telephony/java/com/android/internal/telephony/ims/IsimUiccRecords.java
new file mode 100644
index 0000000..ee1a42d
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/ims/IsimUiccRecords.java
@@ -0,0 +1,157 @@
+/*
+ * 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.internal.telephony.ims;
+
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.util.Log;
+
+import com.android.internal.telephony.IccFileHandler;
+import com.android.internal.telephony.IccRecords;
+import com.android.internal.telephony.gsm.SimTlv;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+
+import static com.android.internal.telephony.IccConstants.EF_DOMAIN;
+import static com.android.internal.telephony.IccConstants.EF_IMPI;
+import static com.android.internal.telephony.IccConstants.EF_IMPU;
+
+/**
+ * {@hide}
+ */
+public final class IsimUiccRecords implements IsimRecords {
+ protected static final String LOG_TAG = "GSM";
+
+ private static final boolean DBG = true;
+ private static final boolean DUMP_RECORDS = false; // Note: PII is logged when this is true
+
+ // ISIM EF records (see 3GPP TS 31.103)
+ private String mIsimImpi; // IMS private user identity
+ private String mIsimDomain; // IMS home network domain name
+ private String[] mIsimImpu; // IMS public user identity(s)
+
+ private static final int TAG_ISIM_VALUE = 0x80; // From 3GPP TS 31.103
+
+ private class EfIsimImpiLoaded implements IccRecords.IccRecordLoaded {
+ public String getEfName() {
+ return "EF_ISIM_IMPI";
+ }
+ public void onRecordLoaded(AsyncResult ar) {
+ byte[] data = (byte[]) ar.result;
+ mIsimImpi = isimTlvToString(data);
+ if (DUMP_RECORDS) log("EF_IMPI=" + mIsimImpi);
+ }
+ }
+
+ private class EfIsimImpuLoaded implements IccRecords.IccRecordLoaded {
+ public String getEfName() {
+ return "EF_ISIM_IMPU";
+ }
+ public void onRecordLoaded(AsyncResult ar) {
+ ArrayList<byte[]> impuList = (ArrayList<byte[]>) ar.result;
+ if (DBG) log("EF_IMPU record count: " + impuList.size());
+ mIsimImpu = new String[impuList.size()];
+ int i = 0;
+ for (byte[] identity : impuList) {
+ String impu = isimTlvToString(identity);
+ if (DUMP_RECORDS) log("EF_IMPU[" + i + "]=" + impu);
+ mIsimImpu[i++] = impu;
+ }
+ }
+ }
+
+ private class EfIsimDomainLoaded implements IccRecords.IccRecordLoaded {
+ public String getEfName() {
+ return "EF_ISIM_DOMAIN";
+ }
+ public void onRecordLoaded(AsyncResult ar) {
+ byte[] data = (byte[]) ar.result;
+ mIsimDomain = isimTlvToString(data);
+ if (DUMP_RECORDS) log("EF_DOMAIN=" + mIsimDomain);
+ }
+ }
+
+ /**
+ * Request the ISIM records to load.
+ * @param iccFh the IccFileHandler to load the records from
+ * @param h the Handler to which the response message will be sent
+ * @return the number of EF record requests that were added
+ */
+ public int fetchIsimRecords(IccFileHandler iccFh, Handler h) {
+ iccFh.loadEFTransparent(EF_IMPI, h.obtainMessage(
+ IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimImpiLoaded()));
+ iccFh.loadEFLinearFixedAll(EF_IMPU, h.obtainMessage(
+ IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimImpuLoaded()));
+ iccFh.loadEFTransparent(EF_DOMAIN, h.obtainMessage(
+ IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimDomainLoaded()));
+ return 3; // number of EF record load requests
+ }
+
+ /**
+ * ISIM records for IMS are stored inside a Tag-Length-Value record as a UTF-8 string
+ * with tag value 0x80.
+ * @param record the byte array containing the IMS data string
+ * @return the decoded String value, or null if the record can't be decoded
+ */
+ private static String isimTlvToString(byte[] record) {
+ SimTlv tlv = new SimTlv(record, 0, record.length);
+ do {
+ if (tlv.getTag() == TAG_ISIM_VALUE) {
+ return new String(tlv.getData(), Charset.forName("UTF-8"));
+ }
+ } while (tlv.nextObject());
+
+ Log.e(LOG_TAG, "[ISIM] can't find TLV tag in ISIM record, returning null");
+ return null;
+ }
+
+ void log(String s) {
+ if (DBG) Log.d(LOG_TAG, "[ISIM] " + s);
+ }
+
+ void loge(String s) {
+ if (DBG) Log.e(LOG_TAG, "[ISIM] " + s);
+ }
+
+ /**
+ * Return the IMS private user identity (IMPI).
+ * Returns null if the IMPI hasn't been loaded or isn't present on the ISIM.
+ * @return the IMS private user identity string, or null if not available
+ */
+ public String getIsimImpi() {
+ return mIsimImpi;
+ }
+
+ /**
+ * Return the IMS home network domain name.
+ * Returns null if the IMS domain hasn't been loaded or isn't present on the ISIM.
+ * @return the IMS home network domain name, or null if not available
+ */
+ public String getIsimDomain() {
+ return mIsimDomain;
+ }
+
+ /**
+ * Return an array of IMS public user identities (IMPU).
+ * Returns null if the IMPU hasn't been loaded or isn't present on the ISIM.
+ * @return an array of IMS public user identity strings, or null if not available
+ */
+ public String[] getIsimImpu() {
+ return (mIsimImpu != null) ? mIsimImpu.clone() : null;
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java b/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java
index 5208ccd..85ce6e0 100644
--- a/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java
@@ -186,7 +186,7 @@ class SipCommandInterface extends BaseCommands implements CommandsInterface {
public void setupDataCall(String radioTechnology, String profile,
String apn, String user, String password, String authType,
- String protcol, Message result) {
+ String protocol, Message result) {
}
public void deactivateDataCall(int cid, int reason, Message result) {
@@ -403,4 +403,7 @@ class SipCommandInterface extends BaseCommands implements CommandsInterface {
public void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr,
Message response) {
}
+
+ public void requestIsimAuthentication(String nonce, Message response) {
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java
index 80de9f3..a2a344f 100644
--- a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -1501,4 +1501,8 @@ public final class SimulatedCommands extends BaseCommands
Message response) {
unimplemented(response);
}
+
+ public void requestIsimAuthentication(String nonce, Message response) {
+ unimplemented(response);
+ }
}
diff --git a/tests/BiDiTests/res/layout/basic.xml b/tests/BiDiTests/res/layout/basic.xml
index 8a27213..f503658 100644
--- a/tests/BiDiTests/res/layout/basic.xml
+++ b/tests/BiDiTests/res/layout/basic.xml
@@ -27,11 +27,18 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <Button android:id="@+id/button"
+ <TextView android:id="@+id/textview_password_default"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:text="@string/button_text"
android:textSize="32dip"
+ android:text="@string/textview_password_default_text"
+ />
+
+ <EditText android:id="@+id/edittext_password_default"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textSize="32dip"
+ android:password="true"
/>
<TextView android:id="@+id/textview_default"
diff --git a/tests/BiDiTests/res/values/strings.xml b/tests/BiDiTests/res/values/strings.xml
index b0809da..b1f5e50 100644
--- a/tests/BiDiTests/res/values/strings.xml
+++ b/tests/BiDiTests/res/values/strings.xml
@@ -28,6 +28,7 @@
<string name="textview_ltr_text">This is a text for a LTR TextView</string>
<string name="textview_rtl_text">This is a text for a RTL TextView</string>
<string name="textview_default_text">This is a text for a default TextView</string>
+ <string name="textview_password_default_text">This is a text for a password TextView</string>
<string name="edittext_text">mmmmmmmmmmmmmmmmmmmmmmmm</string>
<string name="normal_text">Normal String</string>
<string name="normal_long_text">mmmmmmmmmmmmmmmmmmmmmmmm</string>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
index e77178d..3232eed 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java
@@ -33,7 +33,6 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import javax.microedition.khronos.egl.EGL10;
-import javax.microedition.khronos.egl.EGL11;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
@@ -207,7 +206,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
glEnableVertexAttribArray(attribTexCoords);
checkGlError();
- glUniform1i(texture, 0);
+ glUniform1i(uniformTexture, texture);
checkGlError();
while (!mFinished) {
@@ -350,7 +349,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
!mEglSurface.equals(mEgl.eglGetCurrentSurface(EGL10.EGL_DRAW))) {
if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
throw new RuntimeException("eglMakeCurrent failed "
- + getEGLErrorString(mEgl.eglGetError()));
+ + GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
}
}
@@ -361,13 +360,13 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
if (mEglDisplay == EGL10.EGL_NO_DISPLAY) {
throw new RuntimeException("eglGetDisplay failed "
- + getEGLErrorString(mEgl.eglGetError()));
+ + GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
int[] version = new int[2];
if (!mEgl.eglInitialize(mEglDisplay, version)) {
throw new RuntimeException("eglInitialize failed " +
- getEGLErrorString(mEgl.eglGetError()));
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
mEglConfig = chooseEglConfig();
@@ -386,12 +385,12 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
return;
}
throw new RuntimeException("createWindowSurface failed "
- + getEGLErrorString(error));
+ + GLUtils.getEGLErrorString(error));
}
if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
throw new RuntimeException("eglMakeCurrent failed "
- + getEGLErrorString(mEgl.eglGetError()));
+ + GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
mGL = mEglContext.getGL();
@@ -409,7 +408,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
int[] configSpec = getConfig();
if (!mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, configsCount)) {
throw new IllegalArgumentException("eglChooseConfig failed " +
- getEGLErrorString(mEgl.eglGetError()));
+ GLUtils.getEGLErrorString(mEgl.eglGetError()));
} else if (configsCount[0] > 0) {
return configs[0];
}
@@ -429,43 +428,6 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa
};
}
- static String getEGLErrorString(int error) {
- switch (error) {
- case EGL10.EGL_SUCCESS:
- return "EGL_SUCCESS";
- case EGL10.EGL_NOT_INITIALIZED:
- return "EGL_NOT_INITIALIZED";
- case EGL10.EGL_BAD_ACCESS:
- return "EGL_BAD_ACCESS";
- case EGL10.EGL_BAD_ALLOC:
- return "EGL_BAD_ALLOC";
- case EGL10.EGL_BAD_ATTRIBUTE:
- return "EGL_BAD_ATTRIBUTE";
- case EGL10.EGL_BAD_CONFIG:
- return "EGL_BAD_CONFIG";
- case EGL10.EGL_BAD_CONTEXT:
- return "EGL_BAD_CONTEXT";
- case EGL10.EGL_BAD_CURRENT_SURFACE:
- return "EGL_BAD_CURRENT_SURFACE";
- case EGL10.EGL_BAD_DISPLAY:
- return "EGL_BAD_DISPLAY";
- case EGL10.EGL_BAD_MATCH:
- return "EGL_BAD_MATCH";
- case EGL10.EGL_BAD_NATIVE_PIXMAP:
- return "EGL_BAD_NATIVE_PIXMAP";
- case EGL10.EGL_BAD_NATIVE_WINDOW:
- return "EGL_BAD_NATIVE_WINDOW";
- case EGL10.EGL_BAD_PARAMETER:
- return "EGL_BAD_PARAMETER";
- case EGL10.EGL_BAD_SURFACE:
- return "EGL_BAD_SURFACE";
- case EGL11.EGL_CONTEXT_LOST:
- return "EGL_CONTEXT_LOST";
- default:
- return "0x" + Integer.toHexString(error);
- }
- }
-
void finish() {
mFinished = true;
}
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index 5b4bce2..83dda5c 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -281,7 +281,11 @@ class WifiConfigStore {
if (WifiNative.removeNetworkCommand(netId)) {
WifiNative.saveConfigCommand();
synchronized (sConfiguredNetworks) {
- sConfiguredNetworks.remove(netId);
+ WifiConfiguration config = sConfiguredNetworks.get(netId);
+ if (config != null) {
+ sConfiguredNetworks.remove(netId);
+ sNetworkIds.remove(configKey(config));
+ }
}
writeIpAndProxyConfigurations();
sendConfiguredNetworksChangedBroadcast();
@@ -315,7 +319,13 @@ class WifiConfigStore {
static boolean removeNetwork(int netId) {
boolean ret = WifiNative.removeNetworkCommand(netId);
synchronized (sConfiguredNetworks) {
- if (ret) sConfiguredNetworks.remove(netId);
+ if (ret) {
+ WifiConfiguration config = sConfiguredNetworks.get(netId);
+ if (config != null) {
+ sConfiguredNetworks.remove(netId);
+ sNetworkIds.remove(configKey(config));
+ }
+ }
}
sendConfiguredNetworksChangedBroadcast();
return ret;
@@ -366,7 +376,8 @@ class WifiConfigStore {
boolean ret = WifiNative.disableNetworkCommand(netId);
synchronized (sConfiguredNetworks) {
WifiConfiguration config = sConfiguredNetworks.get(netId);
- if (config != null) {
+ /* Only change the reason if the network was not previously disabled */
+ if (config != null && config.status != Status.DISABLED) {
config.status = Status.DISABLED;
config.disableReason = reason;
}
@@ -600,7 +611,10 @@ class WifiConfigStore {
synchronized (sConfiguredNetworks) {
for(WifiConfiguration config : sConfiguredNetworks.values()) {
if(config != null && config.networkId != netId) {
- config.status = Status.DISABLED;
+ if (config.status != Status.DISABLED) {
+ config.status = Status.DISABLED;
+ config.disableReason = WifiConfiguration.DISABLED_UNKNOWN_REASON;
+ }
}
}
}
@@ -854,18 +868,24 @@ class WifiConfigStore {
* refer to an existing configuration.
*/
int netId = config.networkId;
- boolean updateFailed = true;
+ boolean newNetwork = false;
// networkId of INVALID_NETWORK_ID means we want to create a new network
- boolean newNetwork = (netId == INVALID_NETWORK_ID);
-
- if (newNetwork) {
- netId = WifiNative.addNetworkCommand();
- if (netId < 0) {
- Log.e(TAG, "Failed to add a network!");
- return new NetworkUpdateResult(INVALID_NETWORK_ID);
- }
+ if (netId == INVALID_NETWORK_ID) {
+ Integer savedNetId = sNetworkIds.get(configKey(config));
+ if (savedNetId != null) {
+ netId = savedNetId;
+ } else {
+ newNetwork = true;
+ netId = WifiNative.addNetworkCommand();
+ if (netId < 0) {
+ Log.e(TAG, "Failed to add a network!");
+ return new NetworkUpdateResult(INVALID_NETWORK_ID);
+ }
+ }
}
+ boolean updateFailed = true;
+
setVariables: {
if (config.SSID != null &&
@@ -1053,12 +1073,15 @@ class WifiConfigStore {
if (sConfig == null) {
sConfig = new WifiConfiguration();
sConfig.networkId = netId;
- synchronized (sConfiguredNetworks) {
- sConfiguredNetworks.put(netId, sConfig);
- }
}
+
readNetworkVariables(sConfig);
+ synchronized (sConfiguredNetworks) {
+ sConfiguredNetworks.put(netId, sConfig);
+ sNetworkIds.put(configKey(sConfig), netId);
+ }
+
NetworkUpdateResult result = writeIpAndProxyConfigurationsOnChange(sConfig, config);
result.setNetworkId(netId);
return result;
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index d2a0b30..85a6f27 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -530,6 +530,7 @@ public class WifiConfiguration implements Parcelable {
if (source != null) {
networkId = source.networkId;
status = source.status;
+ disableReason = source.disableReason;
SSID = source.SSID;
BSSID = source.BSSID;
preSharedKey = source.preSharedKey;
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index c6f7da2..4fc5e08 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -2524,23 +2524,11 @@ public class WifiStateMachine extends StateMachine {
public boolean processMessage(Message message) {
if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
switch (message.what) {
- case CMD_START_DRIVER:
- mWakeLock.acquire();
- WifiNative.startDriverCommand();
- mWakeLock.release();
- break;
- case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
- SupplicantState state = handleSupplicantStateChange(message);
- /* A driver start causes supplicant to first report an INTERFACE_DISABLED
- * state before transitioning out of it for connection. Stay in
- * DriverStoppedState until we get an INTERFACE_DISABLED state and transition
- * to DriverStarting upon getting that
- * TODO: Fix this when the supplicant can be made to just transition out of
- * INTERFACE_DISABLED state when driver gets started
- */
- if (state == SupplicantState.INTERFACE_DISABLED) {
- transitionTo(mDriverStartingState);
- }
+ case CMD_START_DRIVER:
+ mWakeLock.acquire();
+ WifiNative.startDriverCommand();
+ mWakeLock.release();
+ transitionTo(mDriverStartingState);
break;
default:
return NOT_HANDLED;