summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk8
-rw-r--r--CleanSpec.mk1
-rw-r--r--api/current.txt66
-rw-r--r--cmds/am/src/com/android/commands/am/Am.java145
-rw-r--r--cmds/bootanimation/BootAnimation.cpp6
-rw-r--r--cmds/dumpstate/dumpstate.c1
-rw-r--r--cmds/pm/src/com/android/commands/pm/Pm.java23
-rw-r--r--core/java/android/app/Activity.java3
-rw-r--r--core/java/android/app/ActivityManagerNative.java62
-rw-r--r--core/java/android/app/ActivityThread.java106
-rw-r--r--core/java/android/app/ApplicationPackageManager.java23
-rw-r--r--core/java/android/app/ApplicationThreadNative.java34
-rw-r--r--core/java/android/app/IActivityManager.java12
-rw-r--r--core/java/android/app/IApplicationThread.java6
-rw-r--r--core/java/android/app/Instrumentation.java4
-rw-r--r--core/java/android/appwidget/AppWidgetManager.java10
-rw-r--r--core/java/android/appwidget/AppWidgetProviderInfo.java11
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java25
-rw-r--r--core/java/android/bluetooth/BluetoothProfile.java6
-rw-r--r--core/java/android/bluetooth/IBluetooth.aidl3
-rw-r--r--core/java/android/content/Intent.java12
-rw-r--r--core/java/android/content/SyncManager.java7
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl15
-rw-r--r--core/java/android/content/pm/PackageManager.java158
-rw-r--r--core/java/android/content/pm/ResolveInfo.java9
-rw-r--r--core/java/android/content/pm/Signature.java41
-rw-r--r--core/java/android/database/sqlite/SQLiteOpenHelper.java8
-rw-r--r--core/java/android/hardware/Camera.java79
-rw-r--r--core/java/android/inputmethodservice/KeyboardView.java108
-rw-r--r--core/java/android/net/ConnectivityManager.java35
-rw-r--r--core/java/android/net/DhcpInfoInternal.java3
-rw-r--r--core/java/android/net/IConnectivityManager.aidl4
-rw-r--r--core/java/android/net/INetworkStatsService.aidl4
-rw-r--r--core/java/android/net/NetworkStats.java94
-rw-r--r--core/java/android/net/NetworkStatsHistory.java9
-rw-r--r--core/java/android/net/TrafficStats.java4
-rw-r--r--core/java/android/os/ParcelFileDescriptor.java10
-rw-r--r--core/java/android/preference/PreferenceActivity.java2
-rw-r--r--core/java/android/preference/PreferenceFragment.java1
-rw-r--r--core/java/android/provider/ContactsContract.java31
-rw-r--r--core/java/android/provider/Settings.java7
-rw-r--r--core/java/android/server/BluetoothA2dpService.java3
-rw-r--r--core/java/android/server/BluetoothAdapterStateMachine.java2
-rw-r--r--core/java/android/server/BluetoothBondState.java19
-rw-r--r--core/java/android/server/BluetoothHealthProfileHandler.java4
-rw-r--r--core/java/android/server/BluetoothInputProfileHandler.java4
-rw-r--r--core/java/android/server/BluetoothPanProfileHandler.java4
-rwxr-xr-xcore/java/android/server/BluetoothService.java103
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java52
-rw-r--r--core/java/android/text/DynamicLayout.java5
-rw-r--r--core/java/android/text/Layout.java15
-rw-r--r--core/java/android/text/StaticLayout.java133
-rw-r--r--core/java/android/text/TextLine.java3
-rw-r--r--core/java/android/text/TextUtils.java11
-rw-r--r--core/java/android/text/style/SuggestionSpan.java79
-rw-r--r--core/java/android/view/GLES20Canvas.java1
-rw-r--r--core/java/android/view/GLES20RenderLayer.java8
-rw-r--r--core/java/android/view/GLES20TextureLayer.java6
-rw-r--r--core/java/android/view/HardwareLayer.java8
-rw-r--r--core/java/android/view/HardwareRenderer.java4
-rw-r--r--core/java/android/view/MotionEvent.java28
-rw-r--r--core/java/android/view/TextureView.java57
-rw-r--r--core/java/android/view/View.java93
-rw-r--r--core/java/android/view/ViewGroup.java8
-rw-r--r--core/java/android/view/VolumePanel.java20
-rw-r--r--core/java/android/view/Window.java31
-rw-r--r--core/java/android/view/WindowManagerPolicy.java10
-rw-r--r--core/java/android/webkit/HTML5Audio.java22
-rw-r--r--core/java/android/webkit/JniUtil.java12
-rw-r--r--core/java/android/webkit/WebSettings.java4
-rw-r--r--core/java/android/webkit/WebView.java18
-rw-r--r--core/java/android/webkit/ZoomManager.java10
-rw-r--r--core/java/android/widget/AbsListView.java80
-rw-r--r--core/java/android/widget/ActivityChooserModel.java59
-rw-r--r--core/java/android/widget/ActivityChooserView.java37
-rw-r--r--core/java/android/widget/AdapterView.java3
-rw-r--r--core/java/android/widget/ArrayAdapter.java24
-rw-r--r--core/java/android/widget/HorizontalScrollView.java50
-rw-r--r--core/java/android/widget/ImageView.java53
-rw-r--r--core/java/android/widget/ListPopupWindow.java2
-rw-r--r--core/java/android/widget/ListView.java12
-rw-r--r--core/java/android/widget/NumberPicker.java5
-rw-r--r--core/java/android/widget/PopupWindow.java8
-rw-r--r--core/java/android/widget/ScrollView.java45
-rw-r--r--core/java/android/widget/SearchView.java72
-rw-r--r--core/java/android/widget/ShareActionProvider.java75
-rw-r--r--core/java/android/widget/Spinner.java21
-rw-r--r--core/java/android/widget/TabHost.java10
-rw-r--r--core/java/android/widget/TabWidget.java76
-rw-r--r--core/java/android/widget/TextView.java88
-rw-r--r--core/java/com/android/internal/app/ActionBarImpl.java4
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java30
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java2
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuItemView.java39
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java19
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuView.java10
-rw-r--r--core/java/com/android/internal/view/menu/BaseMenuPresenter.java26
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java7
-rw-r--r--core/java/com/android/internal/view/menu/MenuItemImpl.java2
-rw-r--r--core/java/com/android/internal/widget/ActionBarContextView.java9
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java71
-rw-r--r--core/java/com/android/internal/widget/LockPatternUtils.java10
-rw-r--r--core/java/com/android/internal/widget/PointerLocationView.java91
-rw-r--r--core/java/com/android/server/NetworkManagementSocketTagger.java28
-rw-r--r--core/jni/android_server_BluetoothEventLoop.cpp16
-rw-r--r--core/jni/android_util_Binder.cpp52
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp7
-rw-r--r--core/res/AndroidManifest.xml19
-rw-r--r--core/res/res/drawable-hdpi/ab_bottom_solid_dark_holo.9.pngbin258 -> 209 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_bottom_solid_inverse_holo.9.pngbin269 -> 241 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_bottom_solid_light_holo.9.pngbin289 -> 248 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_bottom_transparent_dark_holo.9.pngbin225 -> 209 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_bottom_transparent_light_holo.9.pngbin222 -> 208 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_solid_dark_holo.9.pngbin248 -> 229 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_solid_light_holo.9.pngbin248 -> 225 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_solid_shadow_holo.9.pngbin193 -> 200 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_stacked_solid_dark_holo.9.pngbin243 -> 223 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.pngbin243 -> 221 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_stacked_solid_light_holo.9.pngbin244 -> 228 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_stacked_transparent_dark_holo.9.pngbin237 -> 217 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_stacked_transparent_light_holo.9.pngbin239 -> 208 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_transparent_dark_holo.9.pngbin247 -> 230 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_transparent_light_holo.9.pngbin222 -> 213 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.pngbin291 -> 275 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.pngbin276 -> 260 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.pngbin289 -> 273 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.pngbin279 -> 263 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.pngbin289 -> 273 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.pngbin276 -> 260 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.pngbin408 -> 432 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.pngbin408 -> 432 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.pngbin407 -> 410 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.pngbin410 -> 413 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_dark.pngbin1502 -> 1491 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_light.pngbin1533 -> 1496 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_focused_holo_dark.pngbin1539 -> 1531 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_focused_holo_light.pngbin1562 -> 1508 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.pngbin2215 -> 2204 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.pngbin2307 -> 2184 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_dark.pngbin2103 -> 2310 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_light.pngbin2067 -> 2282 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_dark.pngbin1034 -> 1071 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_light.pngbin1024 -> 1071 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_focused_holo_dark.pngbin2050 -> 2325 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_focused_holo_light.pngbin2162 -> 2372 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_holo_dark.pngbin1371 -> 1514 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_holo_light.pngbin1481 -> 1697 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.pngbin2759 -> 2849 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.pngbin2991 -> 2763 bytes
-rw-r--r--core/res/res/drawable-hdpi/create_contact.pngbin2138 -> 956 bytes
-rw-r--r--core/res/res/drawable-hdpi/day_picker_week_view_dayline_holo.9.pngbin261 -> 142 bytes
-rw-r--r--core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.pngbin172 -> 167 bytes
-rw-r--r--core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.pngbin169 -> 165 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_angel.pngbin1534 -> 1068 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_cool.pngbin1321 -> 1048 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_crying.pngbin1401 -> 933 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_embarrassed.pngbin2162 -> 937 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_foot_in_mouth.pngbin1387 -> 1010 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_happy.pngbin1486 -> 957 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_kissing.pngbin1156 -> 1042 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_laughing.pngbin1382 -> 947 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_lips_are_sealed.pngbin1543 -> 1083 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_money_mouth.pngbin1404 -> 1159 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_sad.pngbin1455 -> 956 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_surprised.pngbin1252 -> 954 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.pngbin1577 -> 1064 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_undecided.pngbin1400 -> 892 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_winking.pngbin1322 -> 989 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_wtf.pngbin1385 -> 985 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_yelling.pngbin1433 -> 1020 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_close_holo_dark.9.pngbin406 -> 397 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_close_holo_light.9.pngbin425 -> 412 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_open_holo_dark.9.pngbin465 -> 434 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_open_holo_light.9.pngbin428 -> 417 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.pngbin364 -> 403 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.pngbin661 -> 620 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.pngbin129 -> 116 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.pngbin129 -> 116 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.pngbin129 -> 116 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.pngbin129 -> 116 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_alarm_mute.pngbin1378 -> 1376 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_bt_mute.pngbin1191 -> 1214 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_notification_mute.pngbin1184 -> 1249 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_phone.pngbin938 -> 943 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_ring_notif.pngbin4450 -> 1222 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.pngbin4850 -> 1456 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_vol_mute.pngbin1360 -> 1398 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_btn_search.pngbin2365 -> 1218 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_btn_search_go.pngbin1338 -> 641 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_btn_speak_now.pngbin1624 -> 1004 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_commit.pngbin1438 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_commit_search_api_holo_dark.pngbin0 -> 597 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_commit_search_api_holo_light.pngbin1307 -> 616 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_contact_picture.pngbin2268 -> 915 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_airplane_mode.pngbin2250 -> 1250 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_airplane_mode_off.pngbin3003 -> 1194 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_lock.pngbin1998 -> 789 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_power_off.pngbin3037 -> 1304 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_silent_mode_off.pngbin1765 -> 1354 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_answer_active.pngbin9066 -> 9066 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.pngbin17982 -> 17978 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.pngbin6412 -> 6413 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.pngbin8109 -> 8110 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.pngbin16563 -> 16551 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.pngbin5387 -> 5387 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.pngbin8582 -> 8578 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.pngbin8378 -> 8363 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_ime.pngbin0 -> 202 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.pngbin7786 -> 7780 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.pngbin12968 -> 12977 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.pngbin5716 -> 5708 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.pngbin7452 -> 7454 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.pngbin12774 -> 12771 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.pngbin5172 -> 5176 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_text_activated.pngbin6815 -> 6815 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.pngbin9620 -> 9616 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.pngbin6729 -> 6731 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.pngbin9323 -> 9325 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_embed_play.pngbin5320 -> 1112 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_ff.pngbin2169 -> 1114 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_fullscreen.pngbin3310 -> 1899 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_next.pngbin1668 -> 1094 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_pause.pngbin1503 -> 620 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_play.pngbin2022 -> 1184 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_previous.pngbin1658 -> 1088 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_rew.pngbin2067 -> 1252 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_stop.pngbin0 -> 574 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_notification_ime_default.pngbin749 -> 755 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_pressed_holo_dark.9.pngbin159 -> 159 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_pressed_holo_light.9.pngbin159 -> 159 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_section_divider_holo_dark.9.pngbin179 -> 173 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_section_divider_holo_light.9.pngbin165 -> 163 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_selected_holo_dark.9.pngbin157 -> 154 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_selected_holo_light.9.pngbin157 -> 154 bytes
-rw-r--r--core/res/res/drawable-hdpi/menu_submenu_background.9.pngbin2413 -> 420 bytes
-rw-r--r--core/res/res/drawable-hdpi/overscroll_glow.pngbin30724 -> 36241 bytes
-rw-r--r--core/res/res/drawable-hdpi/panel_bg_holo_dark.9.pngbin438 -> 434 bytes
-rw-r--r--core/res/res/drawable-hdpi/picture_emergency.pngbin6606 -> 2519 bytes
-rw-r--r--core/res/res/drawable-hdpi/presence_away.pngbin1278 -> 1280 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_bg_holo_dark.9.pngbin178 -> 178 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_bg_holo_light.9.pngbin175 -> 174 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_primary_holo_dark.9.pngbin569 -> 1076 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_primary_holo_light.9.pngbin569 -> 1076 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.pngbin192 -> 188 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_secondary_holo_light.9.pngbin192 -> 188 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_dark.9.pngbin444 -> 481 bytes
-rw-r--r--core/res/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.pngbin567 -> 625 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_primary_holo.9.pngbin182 -> 177 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_secondary_holo.9.pngbin181 -> 192 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.pngbin176 -> 178 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_track_holo_light.9.pngbin172 -> 176 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.pngbin269 -> 259 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.pngbin270 -> 260 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.pngbin270 -> 260 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.pngbin270 -> 260 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.pngbin273 -> 263 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.pngbin273 -> 263 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.pngbin417 -> 390 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.pngbin414 -> 398 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_default_holo_dark.9.pngbin285 -> 271 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_default_holo_light.9.pngbin285 -> 271 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.pngbin286 -> 272 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.pngbin286 -> 272 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.pngbin283 -> 272 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_focused_holo_light.9.pngbin283 -> 272 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.pngbin429 -> 405 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.pngbin428 -> 412 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_call_mute.pngbin679 -> 1031 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_car_mode.pngbin896 -> 1277 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_chat.pngbin831 -> 1217 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_disk_full.pngbin671 -> 1007 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_email_generic.pngbin569 -> 771 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_error.pngbin563 -> 769 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_gmail.pngbin598 -> 830 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_missed_call.pngbin634 -> 1020 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sdcard.pngbin490 -> 735 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.pngbin689 -> 1041 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sdcard_usb.pngbin510 -> 834 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sim_toolkit.pngbin734 -> 1135 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sync.pngbin699 -> 1012 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sync_anim0.pngbin699 -> 1012 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_sync_error.pngbin737 -> 1103 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_voicemail.pngbin644 -> 878 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_wifi_in_range.pngbin830 -> 1121 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_adb.pngbin1302 -> 1171 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_data_bluetooth.pngbin641 -> 860 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_data_usb.pngbin651 -> 968 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim0.pngbin416 -> 695 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim1.pngbin479 -> 674 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim2.pngbin473 -> 697 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim3.pngbin471 -> 688 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim4.pngbin462 -> 660 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim5.pngbin422 -> 673 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_gps_on.pngbin650 -> 964 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_secure.pngbin491 -> 761 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_speakerphone.pngbin730 -> 1097 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_tether_wifi.pngbin1076 -> 1076 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_throttled.pngbin662 -> 948 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim0.pngbin429 -> 690 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim1.pngbin483 -> 681 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim2.pngbin458 -> 634 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim3.pngbin476 -> 704 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim4.pngbin469 -> 697 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim5.pngbin457 -> 669 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_warning.pngbin563 -> 769 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.pngbin220 -> 219 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.pngbin220 -> 219 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.pngbin268 -> 262 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.pngbin270 -> 264 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_holo_dark.9.pngbin198 -> 195 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_holo_light.9.pngbin198 -> 195 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.pngbin616 -> 600 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.pngbin442 -> 427 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.pngbin384 -> 371 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.pngbin407 -> 392 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.pngbin415 -> 400 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_holo_light.9.pngbin414 -> 399 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.pngbin686 -> 672 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.pngbin443 -> 428 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_bottom_holo.9.pngbin159 -> 133 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus.9.pngbin304 -> 628 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus_bar_left.9.pngbin143 -> 140 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus_bar_right.9.pngbin143 -> 140 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focused_holo.9.pngbin1027 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press.9.pngbin304 -> 614 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press_bar_left.9.pngbin146 -> 139 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press_bar_right.9.pngbin146 -> 139 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_pressed_holo.9.pngbin379 -> 437 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected.9.pngbin953 -> 622 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected_bar_left.9.pngbin150 -> 137 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected_bar_right.9.pngbin150 -> 137 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_unselected.9.pngbin1038 -> 386 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_edit_side_paste_window.9.pngbin502 -> 452 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_left.pngbin1296 -> 1449 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_middle.pngbin1281 -> 1563 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_right.pngbin1385 -> 1503 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_focused_holo_dark.9.pngbin284 -> 330 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_focused_holo_light.9.pngbin285 -> 330 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_right_selected_holo_light.9.pngbin167 -> 150 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.pngbin172 -> 157 bytes
-rwxr-xr-xcore/res/res/drawable-land-hdpi/bottombar_565.pngbin1040 -> 0 bytes
-rw-r--r--core/res/res/drawable-land-ldpi/bottombar_565.pngbin653 -> 0 bytes
-rw-r--r--core/res/res/drawable-land-mdpi/bottombar_565.pngbin3214 -> 0 bytes
-rw-r--r--core/res/res/drawable-land-xhdpi/btn_lock_normal.9.pngbin0 -> 2599 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_bottom_solid_dark_holo.9.pngbin234 -> 176 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_bottom_solid_inverse_holo.9.pngbin240 -> 214 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_bottom_solid_light_holo.9.pngbin249 -> 217 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_bottom_transparent_dark_holo.9.pngbin192 -> 176 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_bottom_transparent_light_holo.9.pngbin190 -> 173 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_solid_dark_holo.9.pngbin211 -> 183 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_solid_light_holo.9.pngbin219 -> 183 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_solid_shadow_holo.9.pngbin173 -> 175 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_stacked_solid_dark_holo.9.pngbin219 -> 184 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.pngbin219 -> 182 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_stacked_solid_light_holo.9.pngbin219 -> 183 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_stacked_transparent_dark_holo.9.pngbin212 -> 183 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_stacked_transparent_light_holo.9.pngbin211 -> 169 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_transparent_dark_holo.9.pngbin213 -> 192 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_transparent_light_holo.9.pngbin200 -> 180 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.pngbin306 -> 295 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.pngbin300 -> 295 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.pngbin294 -> 294 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.pngbin350 -> 296 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.pngbin393 -> 1071 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_off.9.pngbin759 -> 1289 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_on.9.pngbin983 -> 1289 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.pngbin629 -> 1002 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_off.9.pngbin979 -> 1211 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_on.9.pngbin1102 -> 1209 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_dark.pngbin1002 -> 1000 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_light.pngbin1001 -> 988 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_focused_holo_dark.pngbin1000 -> 1012 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_focused_holo_light.pngbin1019 -> 1002 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.pngbin1458 -> 1447 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.pngbin1524 -> 1445 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_dark.pngbin1326 -> 1450 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_light.pngbin1309 -> 1410 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_dark.pngbin733 -> 725 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_light.pngbin727 -> 723 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_focused_holo_dark.pngbin1305 -> 1404 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_focused_holo_light.pngbin1337 -> 1460 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_holo_dark.pngbin911 -> 972 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_holo_light.pngbin998 -> 1128 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.pngbin1702 -> 1724 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.pngbin1828 -> 1695 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.pngbin2286 -> 2282 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.pngbin1575 -> 1572 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.pngbin2361 -> 2367 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.pngbin1661 -> 1656 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.pngbin2664 -> 2668 bytes
-rw-r--r--core/res/res/drawable-mdpi/checkbox_off_background.pngbin3106 -> 114 bytes
-rw-r--r--core/res/res/drawable-mdpi/checkbox_on_background.pngbin3354 -> 389 bytes
-rw-r--r--core/res/res/drawable-mdpi/combobox_disabled.pngbin607 -> 234 bytes
-rw-r--r--core/res/res/drawable-mdpi/combobox_nohighlight.pngbin645 -> 232 bytes
-rw-r--r--core/res/res/drawable-mdpi/create_contact.pngbin1132 -> 689 bytes
-rw-r--r--core/res/res/drawable-mdpi/day_picker_week_view_dayline_holo.9.pngbin226 -> 133 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_dark.9.pngbin176 -> 143 bytes
-rw-r--r--core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_light.9.pngbin182 -> 144 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_dark.9.pngbin557 -> 504 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_light.9.pngbin547 -> 516 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_disabled_holo_dark.9.pngbin343 -> 309 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_disabled_holo_light.9.pngbin399 -> 354 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_focused_holo_dark.9.pngbin566 -> 513 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_focused_holo_light.9.pngbin563 -> 524 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_dark.pngbin516 -> 559 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_light.pngbin517 -> 557 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_dark.pngbin359 -> 371 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_light.pngbin362 -> 375 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_focused_holo_light.pngbin542 -> 570 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.pngbin426 -> 443 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_light.pngbin446 -> 468 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_ic_arrow_pressed_holo_light.pngbin559 -> 579 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_normal_holo_dark.9.pngbin459 -> 436 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_normal_holo_light.9.pngbin480 -> 473 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_pressed_holo_dark.9.pngbin518 -> 473 bytes
-rw-r--r--core/res/res/drawable-mdpi/dropdown_pressed_holo_light.9.pngbin545 -> 503 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_angel.pngbin3592 -> 782 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_cool.pngbin3466 -> 776 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_crying.pngbin3558 -> 714 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_embarrassed.pngbin3619 -> 771 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_foot_in_mouth.pngbin3603 -> 783 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_happy.pngbin3591 -> 716 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_kissing.pngbin3492 -> 793 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_laughing.pngbin3624 -> 727 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_lips_are_sealed.pngbin3670 -> 806 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_money_mouth.pngbin3649 -> 830 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_sad.pngbin3572 -> 711 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_surprised.pngbin3490 -> 773 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.pngbin3653 -> 788 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_undecided.pngbin3552 -> 686 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_winking.pngbin3568 -> 734 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_wtf.pngbin3591 -> 747 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_yelling.pngbin3575 -> 754 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_close_holo_dark.9.pngbin297 -> 285 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_close_holo_light.9.pngbin304 -> 298 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_open_holo_dark.9.pngbin311 -> 303 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_open_holo_light.9.pngbin304 -> 296 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.pngbin339 -> 369 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.pngbin535 -> 520 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.pngbin130 -> 111 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.pngbin130 -> 111 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.pngbin130 -> 112 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.pngbin130 -> 112 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_alarm_mute.pngbin896 -> 890 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_bt_mute.pngbin851 -> 845 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_notification_mute.pngbin842 -> 870 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_phone.pngbin729 -> 700 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_ring_notif.pngbin3910 -> 878 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.pngbin4094 -> 964 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_vol_mute.pngbin904 -> 918 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_btn_search.pngbin1390 -> 858 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_btn_search_go.pngbin1046 -> 537 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_btn_speak_now.pngbin954 -> 739 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_clear_disabled.pngbin1623 -> 1775 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_clear_search_api_disabled_holo_light.pngbin1504 -> 740 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_clear_search_api_holo_light.pngbin1540 -> 743 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_commit.pngbin1468 -> 1509 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_commit_search_api_holo_dark.pngbin0 -> 511 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_commit_search_api_holo_light.pngbin1307 -> 532 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_contact_picture.pngbin1553 -> 692 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_contact_picture_2.pngbin1894 -> 1009 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_contact_picture_3.pngbin1364 -> 734 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_dialog_alert.pngbin3645 -> 1199 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_go.pngbin1436 -> 1538 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_go_search_api_holo_light.pngbin1252 -> 570 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_lock_airplane_mode.pngbin1119 -> 891 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_lock_airplane_mode_off.pngbin1570 -> 862 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lock_lock.pngbin1303 -> 636 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lock_power_off.pngbin1709 -> 913 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lock_silent_mode_off.pngbin1145 -> 916 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_ime.pngbin0 -> 157 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_embed_play.pngbin3159 -> 934 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_ff.pngbin1410 -> 929 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_fullscreen.pngbin2125 -> 1396 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_next.pngbin1211 -> 864 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_pause.pngbin1065 -> 561 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_play.pngbin1360 -> 918 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_previous.pngbin1211 -> 858 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_rew.pngbin1410 -> 997 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_stop.pngbin0 -> 521 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_notification_ime_default.pngbin749 -> 642 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_search.pngbin2445 -> 2280 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_search_api_holo_light.pngbin2271 -> 1541 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_voice_search.pngbin1980 -> 1937 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.pngbin1833 -> 794 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.pngbin23542 -> 2498 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.pngbin15734 -> 6335 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.pngbin2052 -> 2006 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.pngbin2853 -> 2069 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.pngbin2774 -> 2144 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.pngbin2853 -> 2082 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.pngbin2728 -> 2037 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.pngbin2634 -> 2086 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.pngbin2820 -> 1921 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_target_gray.pngbin650 -> 584 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_target_green.pngbin710 -> 828 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_target_red.pngbin728 -> 835 bytes
-rw-r--r--core/res/res/drawable-mdpi/jog_tab_target_yellow.pngbin719 -> 829 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_pressed_holo_dark.9.pngbin158 -> 158 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_pressed_holo_light.9.pngbin158 -> 158 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.pngbin166 -> 165 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_section_divider_holo_light.9.pngbin152 -> 152 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_selected_holo_dark.9.pngbin156 -> 151 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_selected_holo_light.9.pngbin156 -> 151 bytes
-rw-r--r--core/res/res/drawable-mdpi/menu_submenu_background.9.pngbin4394 -> 324 bytes
-rw-r--r--core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.pngbin1125 -> 636 bytes
-rw-r--r--core/res/res/drawable-mdpi/overscroll_glow.pngbin17073 -> 20055 bytes
-rw-r--r--core/res/res/drawable-mdpi/panel_bg_holo_dark.9.pngbin51195 -> 321 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/popup_inline_error.9.pngbin1779 -> 1566 bytes
-rw-r--r--core/res/res/drawable-mdpi/popup_inline_error_above.9.pngbin2043 -> 1537 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_bg_holo_dark.9.pngbin165 -> 165 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_bg_holo_light.9.pngbin159 -> 159 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_primary_holo_dark.9.pngbin394 -> 632 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_primary_holo_light.9.pngbin394 -> 632 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.pngbin175 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_secondary_holo_light.9.pngbin175 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_dark.9.pngbin254 -> 196 bytes
-rw-r--r--core/res/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.pngbin262 -> 206 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_primary_holo.9.pngbin158 -> 156 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_secondary_holo.9.pngbin159 -> 173 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.pngbin167 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_track_holo_light.9.pngbin160 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.pngbin224 -> 204 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.pngbin225 -> 206 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.pngbin225 -> 206 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.pngbin225 -> 206 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.pngbin228 -> 208 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.pngbin228 -> 208 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.pngbin327 -> 299 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.pngbin323 -> 295 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_default_holo_dark.9.pngbin247 -> 223 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_default_holo_light.9.pngbin246 -> 222 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.pngbin248 -> 224 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.pngbin248 -> 224 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.pngbin247 -> 222 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_focused_holo_light.9.pngbin247 -> 222 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.pngbin351 -> 321 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.pngbin349 -> 320 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_call_mute.pngbin595 -> 751 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_car_mode.pngbin728 -> 824 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_chat.pngbin679 -> 844 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/stat_notify_disk_full.pngbin558 -> 736 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_email_generic.pngbin492 -> 617 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_error.pngbin493 -> 654 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_gmail.pngbin516 -> 648 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_missed_call.pngbin560 -> 754 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_more.pngbin461 -> 603 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sdcard.pngbin458 -> 620 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.pngbin593 -> 767 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sdcard_usb.pngbin462 -> 678 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/stat_notify_sim_toolkit.pngbin623 -> 794 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sync.pngbin556 -> 732 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sync_anim0.pngbin556 -> 732 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_sync_error.pngbin582 -> 746 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_voicemail.pngbin539 -> 637 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_wifi_in_range.pngbin666 -> 798 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_adb.pngbin806 -> 302 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_data_bluetooth.pngbin528 -> 652 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_data_usb.pngbin556 -> 707 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim0.pngbin432 -> 574 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim1.pngbin464 -> 571 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim2.pngbin458 -> 576 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim3.pngbin464 -> 575 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim4.pngbin444 -> 557 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_download_anim5.pngbin435 -> 567 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_gps_on.pngbin546 -> 666 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_phone_call.pngbin773 -> 862 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/stat_sys_phone_call_forward.pngbin835 -> 1137 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_phone_call_on_hold.pngbin754 -> 1089 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_secure.pngbin451 -> 622 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_speakerphone.pngbin627 -> 796 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_throttled.pngbin545 -> 694 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim0.pngbin433 -> 580 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim1.pngbin447 -> 577 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim2.pngbin441 -> 545 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim3.pngbin458 -> 586 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim4.pngbin451 -> 582 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_upload_anim5.pngbin438 -> 573 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_vp_phone_call.pngbin1161 -> 1084 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_vp_phone_call_on_hold.pngbin1177 -> 1135 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_warning.pngbin493 -> 654 bytes
-rw-r--r--core/res/res/drawable-mdpi/status_bar_item_app_background_normal.9.pngbin3013 -> 288 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.pngbin214 -> 194 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.pngbin216 -> 195 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.pngbin221 -> 206 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.pngbin223 -> 208 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_holo_dark.9.pngbin179 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_holo_light.9.pngbin179 -> 170 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.pngbin493 -> 432 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.pngbin379 -> 330 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.pngbin330 -> 287 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.pngbin345 -> 302 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.pngbin351 -> 306 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_holo_light.9.pngbin344 -> 301 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.pngbin540 -> 479 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.pngbin380 -> 330 bytes
-rw-r--r--core/res/res/drawable-mdpi/sym_keyboard_shift.pngbin1683 -> 868 bytes
-rw-r--r--core/res/res/drawable-mdpi/sym_keyboard_shift_locked.pngbin1480 -> 761 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_focused_holo.9.pngbin634 -> 0 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.pngbin143 -> 124 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.pngbin143 -> 124 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_selected_v4.9.pngbin310 -> 323 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_unselected_v4.9.pngbin313 -> 294 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_edit_side_paste_window.9.pngbin350 -> 318 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_left.pngbin880 -> 974 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_middle.pngbin885 -> 1033 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_right.pngbin984 -> 994 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_focused_holo_dark.9.pngbin284 -> 303 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_focused_holo_light.9.pngbin285 -> 303 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_default_holo_dark.9.pngbin164 -> 151 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_default_holo_light.9.pngbin166 -> 152 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_default_holo_dark.9.pngbin159 -> 149 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_default_holo_light.9.pngbin161 -> 148 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_selected_holo_dark.9.pngbin158 -> 155 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_right_selected_holo_light.9.pngbin157 -> 151 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_selected_holo_dark.9.pngbin165 -> 158 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_selected_holo_light.9.pngbin159 -> 153 bytes
-rw-r--r--core/res/res/drawable-mdpi/vpn_connected.pngbin757 -> 762 bytes
-rw-r--r--core/res/res/drawable-mdpi/vpn_disconnected.pngbin717 -> 756 bytes
-rw-r--r--core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_green_up.pngbin0 -> 70 bytes
-rw-r--r--core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.pngbin0 -> 70 bytes
-rw-r--r--core/res/res/drawable-nodpi/platlogo.pngbin65254 -> 46426 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_bottom_solid_dark_holo.9.pngbin311 -> 226 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_bottom_solid_inverse_holo.9.pngbin326 -> 268 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_bottom_solid_light_holo.9.pngbin333 -> 270 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_bottom_transparent_dark_holo.9.pngbin261 -> 226 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_bottom_transparent_light_holo.9.pngbin259 -> 223 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_solid_dark_holo.9.pngbin285 -> 244 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_solid_light_holo.9.pngbin292 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_solid_shadow_holo.9.pngbin214 -> 220 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_stacked_solid_dark_holo.9.pngbin292 -> 245 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.pngbin292 -> 242 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_stacked_solid_light_holo.9.pngbin292 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_stacked_transparent_dark_holo.9.pngbin285 -> 236 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_stacked_transparent_light_holo.9.pngbin284 -> 229 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_transparent_dark_holo.9.pngbin285 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_transparent_light_holo.9.pngbin272 -> 232 bytes
-rw-r--r--core/res/res/drawable-xhdpi/activity_title_bar.9.pngbin0 -> 2332 bytes
-rw-r--r--core/res/res/drawable-xhdpi/arrow_down_float.pngbin0 -> 920 bytes
-rw-r--r--core/res/res/drawable-xhdpi/arrow_up_float.pngbin0 -> 918 bytes
-rw-r--r--core/res/res/drawable-xhdpi/battery_charge_background.pngbin0 -> 7472 bytes
-rw-r--r--core/res/res/drawable-xhdpi/bottom_bar.pngbin0 -> 562 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_buttonless_off.pngbin0 -> 1566 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_buttonless_on.pngbin0 -> 2449 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_label_background.9.pngbin0 -> 297 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_circle_disable.pngbin0 -> 4909 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_circle_disable_focused.pngbin0 -> 3925 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_circle_normal.pngbin0 -> 5242 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_circle_pressed.pngbin0 -> 6733 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_circle_selected.pngbin0 -> 6965 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_close_normal.pngbin0 -> 3382 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_close_pressed.pngbin0 -> 4024 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_close_selected.pngbin0 -> 4320 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_default.pngbin0 -> 2944 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_touched.pngbin0 -> 1692 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal.9.pngbin1639 -> 1597 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal_disable.9.pngbin1534 -> 1498 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.pngbin1807 -> 1779 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_pressed.9.pngbin1905 -> 1885 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_selected.9.pngbin1201 -> 1154 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal.9.pngbin1380 -> 1325 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.pngbin1285 -> 1201 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.pngbin1718 -> 1738 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_selected.9.pngbin1077 -> 1057 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.pngbin2810 -> 2789 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dialog_disable.pngbin0 -> 3684 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dialog_normal.pngbin0 -> 3382 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dialog_pressed.pngbin0 -> 4039 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dialog_selected.pngbin0 -> 4256 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_disabled.9.pngbin0 -> 4905 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.pngbin0 -> 5697 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_normal.9.pngbin0 -> 3625 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.pngbin0 -> 10434 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_selected.9.pngbin0 -> 11934 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_erase_default.9.pngbin0 -> 1777 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_erase_pressed.9.pngbin0 -> 1857 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_erase_selected.9.pngbin0 -> 1882 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_global_search_normal.9.pngbin0 -> 2087 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_disabled_holo_dark.9.pngbin0 -> 305 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_disabled_holo_light.9.pngbin0 -> 299 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_focused_holo_dark.9.pngbin0 -> 541 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_focused_holo_light.9.pngbin0 -> 541 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_normal_holo_dark.9.pngbin0 -> 305 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_normal_holo_light.9.pngbin0 -> 301 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_pressed_holo_dark.9.pngbin0 -> 541 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_group_pressed_holo_light.9.pngbin0 -> 546 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.pngbin0 -> 2997 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_off.9.pngbin0 -> 3619 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_on.9.pngbin0 -> 3721 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.pngbin0 -> 3085 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_off.9.pngbin0 -> 3745 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_on.9.pngbin0 -> 3804 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.pngbin0 -> 1263 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.pngbin0 -> 1786 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.pngbin0 -> 2052 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.pngbin0 -> 1243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.pngbin0 -> 1841 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.pngbin0 -> 2020 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal.9.pngbin0 -> 2029 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_off.9.pngbin0 -> 2015 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_on.9.pngbin0 -> 2253 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed.9.pngbin0 -> 3026 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_off.9.pngbin0 -> 2077 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_on.9.pngbin0 -> 2222 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_selected.9.pngbin0 -> 3075 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_media_player.9.pngbin0 -> 2177 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_media_player_disabled.9.pngbin0 -> 1805 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_media_player_disabled_selected.9.pngbin0 -> 2447 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_media_player_pressed.9.pngbin0 -> 2000 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_media_player_selected.9.pngbin0 -> 2752 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_minus_default.pngbin0 -> 13040 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_minus_disable.pngbin0 -> 12898 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_minus_disable_focused.pngbin0 -> 12096 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_minus_pressed.pngbin0 -> 11592 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_minus_selected.pngbin0 -> 14139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_plus_default.pngbin0 -> 13494 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_plus_disable.pngbin0 -> 13230 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_plus_disable_focused.pngbin0 -> 12514 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_plus_pressed.pngbin0 -> 14655 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_plus_selected.pngbin0 -> 14573 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_label_background.9.pngbin0 -> 298 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off.pngbin0 -> 6432 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_dark.pngbin0 -> 2241 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_light.pngbin0 -> 2235 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_dark.pngbin0 -> 889 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_light.pngbin0 -> 913 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_dark.pngbin0 -> 2296 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_light.pngbin0 -> 2291 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_holo.pngbin0 -> 1466 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_holo_dark.pngbin0 -> 940 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_holo_light.pngbin0 -> 997 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_pressed.pngbin0 -> 7382 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.pngbin0 -> 3364 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.pngbin0 -> 3346 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_off_selected.pngbin0 -> 7514 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on.pngbin0 -> 6624 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_dark.pngbin0 -> 3591 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_light.pngbin0 -> 3511 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_dark.pngbin0 -> 1541 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_light.pngbin0 -> 1565 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_dark.pngbin0 -> 3574 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_light.pngbin0 -> 3679 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_holo.pngbin0 -> 3491 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_holo_dark.pngbin0 -> 2372 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_holo_light.pngbin0 -> 2571 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_pressed.pngbin0 -> 7430 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.pngbin0 -> 4350 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.pngbin0 -> 4281 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_selected.pngbin0 -> 7591 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_off_normal.pngbin0 -> 5754 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.pngbin0 -> 11080 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_off_selected.pngbin0 -> 10986 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_on_normal.pngbin0 -> 11325 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.pngbin0 -> 11920 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_on_selected.pngbin0 -> 11846 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_default.9.pngbin0 -> 1424 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.pngbin0 -> 2452 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.pngbin0 -> 2517 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_default.9.pngbin0 -> 1985 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_pressed.9.pngbin0 -> 3151 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_selected.9.pngbin0 -> 3195 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_square_overlay_disabled.pngbin0 -> 1182 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_square_overlay_disabled_focused.pngbin0 -> 2434 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_square_overlay_normal.pngbin0 -> 1363 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_square_overlay_pressed.pngbin0 -> 2154 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_square_overlay_selected.pngbin0 -> 2191 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off.pngbin0 -> 2669 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_disable.pngbin0 -> 2933 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.pngbin0 -> 5466 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_pressed.pngbin0 -> 4760 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_selected.pngbin0 -> 4697 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on.pngbin0 -> 5052 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_disable.pngbin0 -> 5304 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.pngbin0 -> 5287 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_pressed.pngbin0 -> 4821 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_selected.pngbin0 -> 4646 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_label_background.9.pngbin0 -> 197 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_down_disabled.9.pngbin0 -> 4178 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_down_disabled_focused.9.pngbin0 -> 5232 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_down_normal.9.pngbin0 -> 6467 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_down_pressed.9.pngbin0 -> 7985 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_down_selected.9.pngbin0 -> 7989 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_page_normal.pngbin0 -> 7453 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_page_press.pngbin0 -> 7630 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_up_disabled.9.pngbin0 -> 4357 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_up_disabled_focused.9.pngbin0 -> 5296 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_up_normal.9.pngbin0 -> 6354 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_up_pressed.9.pngbin0 -> 6983 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_zoom_up_selected.9.pngbin0 -> 6971 bytes
-rw-r--r--core/res/res/drawable-xhdpi/button_onoff_indicator_off.pngbin0 -> 861 bytes
-rw-r--r--core/res/res/drawable-xhdpi/button_onoff_indicator_on.pngbin0 -> 810 bytes
-rw-r--r--core/res/res/drawable-xhdpi/call_contact.pngbin0 -> 3622 bytes
-rw-r--r--core/res/res/drawable-xhdpi/checkbox_off_background.pngbin0 -> 1110 bytes
-rw-r--r--core/res/res/drawable-xhdpi/checkbox_on_background.pngbin0 -> 1520 bytes
-rw-r--r--core/res/res/drawable-xhdpi/clock_dial.pngbin0 -> 12539 bytes
-rw-r--r--core/res/res/drawable-xhdpi/clock_hand_hour.pngbin0 -> 2642 bytes
-rw-r--r--core/res/res/drawable-xhdpi/clock_hand_minute.pngbin0 -> 3115 bytes
-rw-r--r--core/res/res/drawable-xhdpi/code_lock_bottom.9.pngbin0 -> 187 bytes
-rw-r--r--core/res/res/drawable-xhdpi/code_lock_left.9.pngbin0 -> 149 bytes
-rw-r--r--core/res/res/drawable-xhdpi/code_lock_top.9.pngbin0 -> 144 bytes
-rw-r--r--core/res/res/drawable-xhdpi/combobox_disabled.pngbin0 -> 1134 bytes
-rw-r--r--core/res/res/drawable-xhdpi/combobox_nohighlight.pngbin0 -> 2136 bytes
-rw-r--r--core/res/res/drawable-xhdpi/compass_arrow.pngbin0 -> 1874 bytes
-rw-r--r--core/res/res/drawable-xhdpi/compass_base.pngbin0 -> 7219 bytes
-rw-r--r--core/res/res/drawable-xhdpi/contact_header_bg.9.pngbin0 -> 254 bytes
-rw-r--r--core/res/res/drawable-xhdpi/create_contact.pngbin0 -> 1313 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dark_header.9.pngbin0 -> 138 bytes
-rw-r--r--core/res/res/drawable-xhdpi/day_picker_week_view_dayline_holo.9.pngbin0 -> 142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_dark.9.pngbin0 -> 176 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_light.9.pngbin0 -> 176 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_divider_horizontal_light.9.pngbin0 -> 319 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_dark.pngbin0 -> 762 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_light.pngbin0 -> 742 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_dark.pngbin0 -> 398 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_light.pngbin0 -> 398 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_dark.pngbin0 -> 509 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_light.pngbin0 -> 591 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_bright.9.pngbin0 -> 97 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_bright_opaque.9.pngbin0 -> 106 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_dark.9.pngbin0 -> 103 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_dark_opaque.9.pngbin0 -> 106 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_dim_dark.9.pngbin0 -> 103 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_holo_dark.9.pngbin0 -> 171 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_holo_light.9.pngbin0 -> 173 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_horizontal_textfield.9.pngbin0 -> 141 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_bright.9.pngbin0 -> 97 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_bright_opaque.9.pngbin0 -> 106 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_dark.9.pngbin0 -> 103 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_dark_opaque.9.pngbin0 -> 106 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.pngbin0 -> 135 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.pngbin0 -> 137 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_dark.9.pngbin0 -> 1392 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_light.9.pngbin0 -> 1395 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_disabled_holo_dark.9.pngbin0 -> 903 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_disabled_holo_light.9.pngbin0 -> 1034 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_focused_holo_dark.9.pngbin0 -> 1472 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_focused_holo_light.9.pngbin0 -> 1435 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_dark.pngbin0 -> 1298 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_light.pngbin0 -> 1246 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_dark.pngbin0 -> 667 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_light.pngbin0 -> 703 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_focused_holo_light.pngbin0 -> 1321 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.pngbin0 -> 810 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_light.pngbin0 -> 849 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_ic_arrow_pressed_holo_light.pngbin0 -> 1296 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_normal_holo_dark.9.pngbin0 -> 1167 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_normal_holo_light.9.pngbin0 -> 1234 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_pressed_holo_dark.9.pngbin0 -> 1329 bytes
-rw-r--r--core/res/res/drawable-xhdpi/dropdown_pressed_holo_light.9.pngbin0 -> 1408 bytes
-rw-r--r--core/res/res/drawable-xhdpi/edit_query.pngbin0 -> 5874 bytes
-rw-r--r--core/res/res/drawable-xhdpi/edit_query_background_normal.9.pngbin0 -> 437 bytes
-rw-r--r--core/res/res/drawable-xhdpi/edit_query_background_pressed.9.pngbin0 -> 2480 bytes
-rw-r--r--core/res/res/drawable-xhdpi/edit_query_background_selected.9.pngbin0 -> 2715 bytes
-rw-r--r--core/res/res/drawable-xhdpi/editbox_background_focus_yellow.9.pngbin0 -> 2146 bytes
-rw-r--r--core/res/res/drawable-xhdpi/editbox_background_normal.9.pngbin0 -> 1044 bytes
-rw-r--r--core/res/res/drawable-xhdpi/editbox_dropdown_background.9.pngbin0 -> 696 bytes
-rw-r--r--core/res/res/drawable-xhdpi/editbox_dropdown_background_dark.9.pngbin0 -> 640 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_angel.pngbin0 -> 1416 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_cool.pngbin0 -> 1349 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_crying.pngbin0 -> 1246 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_embarrassed.pngbin0 -> 1319 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.pngbin0 -> 1324 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_happy.pngbin0 -> 1223 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_kissing.pngbin0 -> 1408 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_laughing.pngbin0 -> 1222 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.pngbin0 -> 1485 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_money_mouth.pngbin0 -> 1561 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_sad.pngbin0 -> 1260 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_surprised.pngbin0 -> 1235 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.pngbin0 -> 1425 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_undecided.pngbin0 -> 1169 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_winking.pngbin0 -> 1288 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_wtf.pngbin0 -> 1287 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_yelling.pngbin0 -> 1332 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_ic_maximized.9.pngbin0 -> 5331 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_ic_minimized.9.pngbin0 -> 5514 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.pngbin407 -> 472 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.pngbin838 -> 795 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.pngbin133 -> 117 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.pngbin133 -> 117 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.pngbin133 -> 117 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.pngbin133 -> 117 bytes
-rw-r--r--core/res/res/drawable-xhdpi/focused_application_background_static.pngbin0 -> 4188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb.9.pngbin0 -> 1975 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.pngbin0 -> 1877 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.pngbin0 -> 1388 bytes
-rw-r--r--core/res/res/drawable-xhdpi/gallery_selected_default.9.pngbin0 -> 2986 bytes
-rw-r--r--core/res/res/drawable-xhdpi/gallery_selected_focused.9.pngbin0 -> 3999 bytes
-rw-r--r--core/res/res/drawable-xhdpi/gallery_selected_pressed.9.pngbin0 -> 3990 bytes
-rw-r--r--core/res/res/drawable-xhdpi/gallery_unselected_default.9.pngbin0 -> 1703 bytes
-rw-r--r--core/res/res/drawable-xhdpi/gallery_unselected_pressed.9.pngbin0 -> 2241 bytes
-rw-r--r--core/res/res/drawable-xhdpi/grid_selector_background_focus.9.pngbin0 -> 3059 bytes
-rw-r--r--core/res/res/drawable-xhdpi/grid_selector_background_pressed.9.pngbin0 -> 2707 bytes
-rw-r--r--core/res/res/drawable-xhdpi/highlight_disabled.9.pngbin0 -> 2575 bytes
-rw-r--r--core/res/res/drawable-xhdpi/highlight_pressed.9.pngbin0 -> 2710 bytes
-rw-r--r--core/res/res/drawable-xhdpi/highlight_selected.9.pngbin0 -> 3063 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_aggregated.pngbin0 -> 1999 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_alarm.pngbin0 -> 1729 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_alarm_mute.pngbin0 -> 1954 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_bt.pngbin0 -> 1281 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_bt_mute.pngbin0 -> 1640 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_notification.pngbin0 -> 1257 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_notification_mute.pngbin0 -> 1680 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_phone.pngbin0 -> 1195 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_ring_notif.pngbin0 -> 1579 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.pngbin0 -> 1971 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_vol.pngbin0 -> 1684 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_vol_mute.pngbin0 -> 1949 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_find_next.pngbin0 -> 1395 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_find_prev.pngbin0 -> 1381 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_round_more_disabled.pngbin0 -> 705 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_round_more_normal.pngbin0 -> 738 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_search.pngbin0 -> 1629 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_search_go.pngbin0 -> 804 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_speak_now.pngbin0 -> 1286 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_disabled.pngbin0 -> 1156 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_normal.pngbin0 -> 1665 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_disabled.pngbin0 -> 1124 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_normal.pngbin0 -> 2403 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_bullet_key_permission.pngbin0 -> 1166 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_cab_done_holo.pngbin0 -> 1409 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_clear_disabled.pngbin0 -> 2531 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_clear_search_api_disabled_holo_light.pngbin0 -> 1315 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_clear_search_api_holo_light.pngbin0 -> 1447 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_commit.pngbin0 -> 1978 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_commit_search_api_holo_dark.pngbin0 -> 703 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_commit_search_api_holo_light.pngbin0 -> 712 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_contact_picture.pngbin0 -> 1138 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_contact_picture_2.pngbin0 -> 2153 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_contact_picture_3.pngbin0 -> 1297 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_delete.pngbin0 -> 3444 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_alert.pngbin0 -> 1963 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_alert_holo_dark.pngbin0 -> 1287 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_alert_holo_light.pngbin0 -> 1359 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_close_normal_holo.pngbin0 -> 1171 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_close_pressed_holo.pngbin0 -> 1716 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_dialer.pngbin0 -> 1961 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_email.pngbin0 -> 2438 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_focused_holo.pngbin0 -> 3883 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_info.pngbin0 -> 2106 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_map.pngbin0 -> 2485 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_time.pngbin0 -> 3270 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_usb.pngbin0 -> 2129 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_emergency.pngbin0 -> 2170 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_go.pngbin0 -> 1983 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_go_search_api_holo_light.pngbin0 -> 836 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_input_add.pngbin0 -> 1382 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_input_delete.pngbin0 -> 1743 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_input_get.pngbin0 -> 1419 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_answer.pngbin0 -> 11685 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_end.pngbin0 -> 12354 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_hold.pngbin0 -> 13015 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_decline.pngbin0 -> 10518 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_sound_off.pngbin0 -> 10942 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_sound_on.pngbin0 -> 7074 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_unlock.pngbin0 -> 11052 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_jog_dial_vibrate_on.pngbin0 -> 15887 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_launcher_android.pngbin0 -> 11082 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_airplane_mode.pngbin0 -> 1668 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off.pngbin0 -> 1573 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_idle_charging.pngbin0 -> 1387 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_idle_lock.pngbin0 -> 1283 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_idle_low_battery.pngbin0 -> 1434 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_lock.pngbin0 -> 954 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_power_off.pngbin0 -> 1754 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_ringer_off.pngbin0 -> 1639 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_ringer_on.pngbin0 -> 2069 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_silent_mode.pngbin0 -> 2028 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_silent_mode_off.pngbin0 -> 1791 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lock_silent_mode_vibrate.pngbin0 -> 4185 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_ime.pngbin0 -> 217 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_maps_indicator_current_position.pngbin0 -> 3949 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim1.pngbin0 -> 3927 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim2.pngbin0 -> 3881 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim3.pngbin0 -> 3904 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_embed_play.pngbin0 -> 1660 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_ff.pngbin0 -> 1479 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_fullscreen.pngbin0 -> 2669 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_next.pngbin0 -> 1385 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_pause.pngbin0 -> 706 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_play.pngbin0 -> 1638 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_previous.pngbin0 -> 1393 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_rew.pngbin0 -> 1675 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_stop.pngbin0 -> 656 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_video_poster.pngbin0 -> 9589 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_notification_clear_all.pngbin0 -> 2931 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_notification_ime_default.pngbin0 -> 1012 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_notification_overlay.9.pngbin0 -> 1690 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_partial_secure.pngbin0 -> 949 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_disk_full.pngbin0 -> 3009 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_reminder.pngbin0 -> 2223 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_1.pngbin0 -> 2442 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_2.pngbin0 -> 2682 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_3.pngbin0 -> 2671 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_4.pngbin0 -> 2542 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_5.pngbin0 -> 2806 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_popup_sync_6.pngbin0 -> 2648 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_search.pngbin0 -> 3784 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_search_api_holo_light.pngbin0 -> 3037 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_search_category_default.pngbin0 -> 4654 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_secure.pngbin0 -> 1042 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_text_dot.pngbin0 -> 1166 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_vibrate.pngbin0 -> 6000 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_vibrate_small.pngbin0 -> 2607 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_voice_search.pngbin0 -> 3053 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.pngbin0 -> 1414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume.pngbin0 -> 4209 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume_bluetooth_ad2p.pngbin0 -> 6636 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume_bluetooth_in_call.pngbin0 -> 5543 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume_off.pngbin0 -> 3354 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume_off_small.pngbin0 -> 1257 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_volume_small.pngbin0 -> 1756 bytes
-rw-r--r--core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.pngbin0 -> 2516 bytes
-rw-r--r--core/res/res/drawable-xhdpi/icon_highlight_square.9.pngbin0 -> 3362 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ime_qwerty.pngbin0 -> 1091 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.pngbin0 -> 825 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up_holo.pngbin0 -> 1105 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up.pngbin0 -> 825 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up_holo.pngbin0 -> 1575 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default.pngbin0 -> 9531 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green.pngbin0 -> 19681 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_green.pngbin0 -> 17576 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_yellow.pngbin0 -> 17112 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_long_middle_yellow.pngbin0 -> 10253 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_red.pngbin0 -> 16814 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_yellow.pngbin0 -> 17268 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_short_left.pngbin0 -> 4682 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_short_left_and_right.pngbin0 -> 8484 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_arrow_short_right.pngbin0 -> 4830 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_bg.pngbin0 -> 37945 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_dimple.pngbin0 -> 7677 bytes
-rw-r--r--core/res/res/drawable-xhdpi/jog_dial_dimple_dim.pngbin0 -> 6587 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_accessory_bg_landscape.9.pngbin0 -> 246 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_background.9.pngbin0 -> 213 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_key_feedback_background.9.pngbin0 -> 3971 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.pngbin0 -> 4663 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_popup_panel_background.9.pngbin0 -> 2729 bytes
-rw-r--r--core/res/res/drawable-xhdpi/keyboard_popup_panel_trans_background.9.pngbin0 -> 3524 bytes
-rw-r--r--core/res/res/drawable-xhdpi/light_header.9.pngbin0 -> 146 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_divider_horizontal_holo_dark.9.pngbin0 -> 187 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.pngbin163 -> 163 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_pressed_holo_light.9.pngbin163 -> 163 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_divider_holo_dark.9.pngbin180 -> 179 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_divider_holo_light.9.pngbin173 -> 175 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_header_holo_dark.9.pngbin0 -> 425 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_header_holo_light.9.pngbin0 -> 294 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selected_holo_dark.9.pngbin160 -> 158 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selected_holo_light.9.pngbin160 -> 158 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_activated_holo_dark.9.pngbin0 -> 504 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_activated_holo_light.9.pngbin0 -> 452 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_default.9.pngbin0 -> 392 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_default_light.9.pngbin0 -> 417 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_disabled.9.pngbin0 -> 385 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_disabled_light.9.pngbin0 -> 791 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_focus.9.pngbin0 -> 7902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_focused.9.pngbin0 -> 599 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_focused_light.9.pngbin0 -> 599 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_focused_selected.9.pngbin0 -> 1133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_longpress.9.pngbin0 -> 2698 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_longpress_light.9.pngbin0 -> 398 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_pressed.9.pngbin0 -> 6676 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_pressed_light.9.pngbin0 -> 468 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_selected.9.pngbin0 -> 985 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_background_selected_light.9.pngbin0 -> 923 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_disabled_holo_dark.9.pngbin0 -> 190 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_disabled_holo_light.9.pngbin0 -> 188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_focused_holo_dark.9.pngbin0 -> 189 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_focused_holo_light.9.pngbin0 -> 190 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_multiselect_holo_dark.9.pngbin0 -> 321 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_multiselect_holo_light.9.pngbin0 -> 324 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_pressed_holo_dark.9.pngbin0 -> 189 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_selector_pressed_holo_light.9.pngbin0 -> 183 bytes
-rw-r--r--core/res/res/drawable-xhdpi/maps_google_logo.pngbin0 -> 5956 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_background.9.pngbin0 -> 334 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_background_fill_parent_width.9.pngbin0 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_separator.9.pngbin0 -> 146 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_submenu_background.9.pngbin0 -> 1092 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menuitem_background_focus.9.pngbin0 -> 3055 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menuitem_background_pressed.9.pngbin0 -> 2701 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menuitem_background_solid_focused.9.pngbin0 -> 105 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menuitem_background_solid_pressed.9.pngbin0 -> 105 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menuitem_checkbox_on.pngbin0 -> 664 bytes
-rw-r--r--core/res/res/drawable-xhdpi/minitab_lt_focus.9.pngbin0 -> 194 bytes
-rw-r--r--core/res/res/drawable-xhdpi/minitab_lt_press.9.pngbin0 -> 194 bytes
-rw-r--r--core/res/res/drawable-xhdpi/minitab_lt_selected.9.pngbin0 -> 186 bytes
-rw-r--r--core/res/res/drawable-xhdpi/minitab_lt_unselected.9.pngbin0 -> 148 bytes
-rw-r--r--core/res/res/drawable-xhdpi/minitab_lt_unselected_press.9.pngbin0 -> 177 bytes
-rw-r--r--core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.pngbin0 -> 1409 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.pngbin0 -> 1083 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.pngbin0 -> 2006 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_normal.9.pngbin0 -> 1921 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.pngbin0 -> 2926 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_selected.9.pngbin0 -> 2990 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.pngbin0 -> 594 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_normal.9.pngbin0 -> 1184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.pngbin0 -> 2111 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_selected.9.pngbin0 -> 1786 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.pngbin0 -> 1740 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.pngbin0 -> 2574 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_normal.9.pngbin0 -> 2788 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.pngbin0 -> 3865 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_selected.9.pngbin0 -> 3876 bytes
-rw-r--r--core/res/res/drawable-xhdpi/overscroll_glow.pngbin44139 -> 50899 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_background.9.pngbin0 -> 2179 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.pngbin0 -> 448 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_bg_holo_light.9.pngbin0 -> 680 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_picture_frame_bg_focus_blue.9.pngbin0 -> 3708 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_picture_frame_bg_normal.9.pngbin0 -> 1571 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_picture_frame_bg_pressed_blue.9.pngbin0 -> 3439 bytes
-rw-r--r--core/res/res/drawable-xhdpi/password_field_default.9.pngbin0 -> 2871 bytes
-rw-r--r--core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.pngbin0 -> 237 bytes
-rw-r--r--core/res/res/drawable-xhdpi/picture_emergency.pngbin0 -> 9521 bytes
-rw-r--r--core/res/res/drawable-xhdpi/picture_frame.9.pngbin0 -> 1549 bytes
-rw-r--r--core/res/res/drawable-xhdpi/pointer_arrow.pngbin0 -> 2312 bytes
-rw-r--r--core/res/res/drawable-xhdpi/pointer_spot_anchor.pngbin0 -> 11988 bytes
-rw-r--r--core/res/res/drawable-xhdpi/pointer_spot_hover.pngbin0 -> 14878 bytes
-rw-r--r--core/res/res/drawable-xhdpi/pointer_spot_touch.pngbin0 -> 5060 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_inline_error.9.pngbin0 -> 4445 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_inline_error_above.9.pngbin0 -> 4463 bytes
-rw-r--r--core/res/res/drawable-xhdpi/pressed_application_background_static.pngbin0 -> 3092 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.pngbin0 -> 174 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_bg_holo_light.9.pngbin0 -> 172 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.pngbin765 -> 1591 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_primary_holo_light.9.pngbin765 -> 1591 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.pngbin191 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.pngbin191 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate1.pngbin0 -> 943 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate2.pngbin0 -> 944 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate3.pngbin0 -> 945 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_dark.9.pngbin0 -> 702 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_light.9.pngbin0 -> 691 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_dark.9.pngbin0 -> 727 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_light.9.pngbin0 -> 732 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_dark.9.pngbin0 -> 685 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_light.9.pngbin0 -> 687 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_right_holo_dark.9.pngbin0 -> 707 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_right_holo_light.9.pngbin0 -> 698 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_dark.9.pngbin649 -> 479 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.pngbin834 -> 702 bytes
-rw-r--r--core/res/res/drawable-xhdpi/radiobutton_off_background.pngbin0 -> 1321 bytes
-rw-r--r--core/res/res/drawable-xhdpi/radiobutton_on_background.pngbin0 -> 1536 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_half.pngbin0 -> 3018 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_off.pngbin0 -> 1679 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_on.pngbin0 -> 3443 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_half.pngbin0 -> 2553 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_off.pngbin0 -> 1421 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_on.pngbin0 -> 2860 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_half.pngbin0 -> 1558 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_off.pngbin0 -> 861 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_on.pngbin0 -> 1593 bytes
-rw-r--r--core/res/res/drawable-xhdpi/recent_dialog_background.9.pngbin0 -> 316 bytes
-rw-r--r--core/res/res/drawable-xhdpi/reticle.pngbin0 -> 1429 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_primary_holo.9.pngbin177 -> 169 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.pngbin178 -> 188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.pngbin182 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.pngbin177 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/search_dropdown_background.9.pngbin0 -> 799 bytes
-rw-r--r--core/res/res/drawable-xhdpi/search_plate.9.pngbin0 -> 420 bytes
-rw-r--r--core/res/res/drawable-xhdpi/search_plate_global.9.pngbin0 -> 414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/seek_thumb_normal.pngbin0 -> 1840 bytes
-rw-r--r--core/res/res/drawable-xhdpi/seek_thumb_pressed.pngbin0 -> 2884 bytes
-rw-r--r--core/res/res/drawable-xhdpi/seek_thumb_selected.pngbin0 -> 2928 bytes
-rw-r--r--core/res/res/drawable-xhdpi/settings_header_raw.9.pngbin0 -> 21167 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.pngbin367 -> 324 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.pngbin368 -> 325 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.pngbin365 -> 323 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.pngbin365 -> 323 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.pngbin369 -> 327 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.pngbin369 -> 327 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.pngbin572 -> 519 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.pngbin568 -> 515 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.pngbin399 -> 354 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_default_holo_light.9.pngbin399 -> 353 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.pngbin393 -> 350 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.pngbin393 -> 350 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.pngbin0 -> 993 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.pngbin0 -> 951 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.pngbin388 -> 344 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.pngbin388 -> 344 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_normal.9.pngbin0 -> 2006 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_press.9.pngbin0 -> 3987 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.pngbin614 -> 558 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.pngbin611 -> 556 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_select.9.pngbin0 -> 4234 bytes
-rw-r--r--core/res/res/drawable-xhdpi/star_big_off.pngbin0 -> 3017 bytes
-rw-r--r--core/res/res/drawable-xhdpi/star_big_on.pngbin0 -> 5831 bytes
-rw-r--r--core/res/res/drawable-xhdpi/star_off.pngbin0 -> 1432 bytes
-rw-r--r--core/res/res/drawable-xhdpi/star_on.pngbin0 -> 3771 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_ecb_mode.pngbin0 -> 2093 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_call_mute.pngbin0 -> 1331 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_car_mode.pngbin0 -> 1797 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_chat.pngbin0 -> 1662 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_disk_full.pngbin0 -> 1316 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_email_generic.pngbin0 -> 947 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_error.pngbin0 -> 1099 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_gmail.pngbin0 -> 1055 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_missed_call.pngbin0 -> 1306 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_more.pngbin0 -> 1061 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sdcard.pngbin0 -> 944 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sdcard_prepare.pngbin0 -> 1420 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sdcard_usb.pngbin0 -> 1008 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sim_toolkit.pngbin0 -> 1480 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sync.pngbin0 -> 1306 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sync_anim0.pngbin0 -> 1306 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_sync_error.pngbin0 -> 1434 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_voicemail.pngbin0 -> 989 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.pngbin0 -> 1482 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_adb.pngbin0 -> 1414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_0.pngbin0 -> 925 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_100.pngbin0 -> 423 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_15.pngbin0 -> 512 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_28.pngbin0 -> 511 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_43.pngbin0 -> 505 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_57.pngbin0 -> 501 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_71.pngbin0 -> 493 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_85.pngbin0 -> 520 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim0.pngbin0 -> 1472 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim100.pngbin0 -> 856 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim15.pngbin0 -> 1488 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim28.pngbin0 -> 1501 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim43.pngbin0 -> 1461 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim57.pngbin0 -> 1377 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim71.pngbin0 -> 1347 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim85.pngbin0 -> 1338 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_battery_unknown.pngbin0 -> 1273 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_data_bluetooth.pngbin0 -> 1062 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_data_usb.pngbin0 -> 1244 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim0.pngbin0 -> 798 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim1.pngbin0 -> 811 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim2.pngbin0 -> 819 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim3.pngbin0 -> 821 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim4.pngbin0 -> 783 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_download_anim5.pngbin0 -> 785 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_gps_on.pngbin0 -> 1363 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_headset.pngbin0 -> 1267 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_phone_call.pngbin0 -> 2984 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_phone_call_forward.pngbin0 -> 4193 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_phone_call_on_hold.pngbin0 -> 3836 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_r_signal_0_cdma.pngbin0 -> 1021 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_r_signal_1_cdma.pngbin0 -> 2224 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_r_signal_2_cdma.pngbin0 -> 2495 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_r_signal_3_cdma.pngbin0 -> 2753 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_r_signal_4_cdma.pngbin0 -> 2959 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_ra_signal_0_cdma.pngbin0 -> 1005 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_ra_signal_1_cdma.pngbin0 -> 2191 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_ra_signal_2_cdma.pngbin0 -> 2452 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_ra_signal_3_cdma.pngbin0 -> 2709 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_ra_signal_4_cdma.pngbin0 -> 2918 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_secure.pngbin0 -> 929 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_0_cdma.pngbin0 -> 957 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_1_cdma.pngbin0 -> 2126 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_2_cdma.pngbin0 -> 2409 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_3_cdma.pngbin0 -> 2677 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_4_cdma.pngbin0 -> 2959 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_evdo_0.pngbin0 -> 1073 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_evdo_1.pngbin0 -> 2434 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_evdo_2.pngbin0 -> 2628 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_evdo_3.pngbin0 -> 2887 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_signal_evdo_4.pngbin0 -> 3180 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_speakerphone.pngbin0 -> 1471 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.pngbin0 -> 1602 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_general.pngbin0 -> 1999 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_usb.pngbin0 -> 1738 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_wifi.pngbin0 -> 1331 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_throttled.pngbin0 -> 1261 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim0.pngbin0 -> 813 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim1.pngbin0 -> 814 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim2.pngbin0 -> 759 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim3.pngbin0 -> 848 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim4.pngbin0 -> 837 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_upload_anim5.pngbin0 -> 794 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_vp_phone_call.pngbin0 -> 3843 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_vp_phone_call_on_hold.pngbin0 -> 4033 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_warning.pngbin0 -> 1099 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_background.pngbin0 -> 6468 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_header_background.9.pngbin0 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_item_app_background_normal.9.pngbin0 -> 371 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_item_background_focus.9.pngbin0 -> 3053 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_item_background_normal.9.pngbin0 -> 196 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_item_background_pressed.9.pngbin0 -> 2701 bytes
-rw-r--r--core/res/res/drawable-xhdpi/statusbar_background.9.pngbin0 -> 6272 bytes
-rw-r--r--core/res/res/drawable-xhdpi/submenu_arrow_nofocus.pngbin0 -> 559 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_action_add.pngbin0 -> 2071 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_action_call.pngbin0 -> 3020 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_action_chat.pngbin0 -> 1828 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_action_email.pngbin0 -> 1945 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_app_on_sd_unavailable_icon.pngbin0 -> 4125 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_call_incoming.pngbin0 -> 4360 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_call_missed.pngbin0 -> 3953 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_call_outgoing.pngbin0 -> 4120 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_contact_card.pngbin0 -> 1220 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_def_app_icon.pngbin0 -> 7222 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_delete.pngbin0 -> 3245 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_delete_dim.pngbin0 -> 2825 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_delete.pngbin0 -> 2317 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_ok.pngbin0 -> 1986 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_return.pngbin0 -> 1263 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift.pngbin0 -> 1648 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift_locked.pngbin0 -> 1201 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_feedback_space.pngbin0 -> 589 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num0_no_plus.pngbin0 -> 1811 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num1.pngbin0 -> 1051 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num2.pngbin0 -> 3941 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num3.pngbin0 -> 3566 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num4.pngbin0 -> 3341 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num5.pngbin0 -> 3051 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num6.pngbin0 -> 4377 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num7.pngbin0 -> 4429 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num8.pngbin0 -> 3626 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_num9.pngbin0 -> 4729 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_ok.pngbin0 -> 3159 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_ok_dim.pngbin0 -> 2599 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_return.pngbin0 -> 1575 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_shift.pngbin0 -> 2161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_shift_locked.pngbin0 -> 1593 bytes
-rw-r--r--core/res/res/drawable-xhdpi/sym_keyboard_space.pngbin0 -> 762 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_bottom_holo.9.pngbin0 -> 133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_focus.9.pngbin0 -> 883 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_focus_bar_left.9.pngbin0 -> 140 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_focus_bar_right.9.pngbin0 -> 140 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_press.9.pngbin0 -> 906 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_press_bar_left.9.pngbin0 -> 139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_press_bar_right.9.pngbin0 -> 139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_pressed_holo.9.pngbin0 -> 503 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected.9.pngbin0 -> 839 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_bar_left.9.pngbin0 -> 137 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_bar_left_v4.9.pngbin0 -> 135 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_bar_right.9.pngbin0 -> 137 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_bar_right_v4.9.pngbin0 -> 135 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_v4.9.pngbin0 -> 682 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_unselected.9.pngbin0 -> 477 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_unselected_v4.9.pngbin0 -> 414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.pngbin0 -> 143 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_cursor_holo_light.9.pngbin0 -> 143 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_edit_side_paste_window.9.pngbin0 -> 522 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_left.pngbin0 -> 1988 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_middle.pngbin0 -> 2237 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_right.pngbin0 -> 2154 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_default.9.pngbin0 -> 944 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_disabled.9.pngbin0 -> 1139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_disabled_selected.9.pngbin0 -> 1657 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_focused_holo_dark.9.pngbin0 -> 494 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_focused_holo_light.9.pngbin0 -> 494 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_default.9.pngbin0 -> 1377 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_default.9.pngbin0 -> 1821 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.pngbin0 -> 2444 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.pngbin0 -> 2222 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_pressed.9.pngbin0 -> 2408 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_selected.9.pngbin0 -> 1847 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_selected.9.pngbin0 -> 1359 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_medium.9.pngbin0 -> 333 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_portrait.9.pngbin0 -> 237 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_shadow.9.pngbin0 -> 188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_tall.9.pngbin0 -> 356 bytes
-rw-r--r--core/res/res/drawable-xhdpi/unknown_image.pngbin0 -> 426 bytes
-rw-r--r--core/res/res/drawable-xhdpi/usb_android.pngbin0 -> 15574 bytes
-rw-r--r--core/res/res/drawable-xhdpi/usb_android_connected.pngbin0 -> 13142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/vpn_connected.pngbin0 -> 2017 bytes
-rw-r--r--core/res/res/drawable-xhdpi/vpn_disconnected.pngbin0 -> 1973 bytes
-rw-r--r--core/res/res/drawable-xhdpi/zoom_plate.9.pngbin0 -> 2979 bytes
-rw-r--r--core/res/res/layout-sw600dp/preference_list_content.xml7
-rw-r--r--core/res/res/layout/action_bar_title_item.xml4
-rw-r--r--core/res/res/layout/activity_chooser_view.xml7
-rw-r--r--core/res/res/layout/activity_list_item.xml4
-rw-r--r--core/res/res/layout/breadcrumbs_in_fragment.xml10
-rw-r--r--core/res/res/layout/keyguard_screen_password_landscape.xml16
-rw-r--r--core/res/res/layout/keyguard_screen_password_portrait.xml45
-rw-r--r--core/res/res/layout/list_menu_item_layout.xml6
-rw-r--r--core/res/res/layout/preference_list_content.xml3
-rw-r--r--core/res/res/layout/preference_list_fragment.xml8
-rw-r--r--core/res/res/layout/search_bar.xml7
-rw-r--r--core/res/res/layout/search_view.xml16
-rw-r--r--core/res/res/layout/select_dialog_item_holo.xml2
-rw-r--r--core/res/res/layout/simple_expandable_list_item_1.xml2
-rw-r--r--core/res/res/layout/simple_expandable_list_item_2.xml2
-rw-r--r--core/res/res/layout/simple_list_item_1.xml5
-rw-r--r--core/res/res/layout/simple_list_item_2.xml6
-rw-r--r--core/res/res/layout/simple_list_item_activated_1.xml2
-rw-r--r--core/res/res/layout/simple_list_item_activated_2.xml4
-rw-r--r--core/res/res/layout/simple_list_item_checked.xml6
-rw-r--r--core/res/res/layout/simple_list_item_multiple_choice.xml6
-rw-r--r--core/res/res/layout/simple_list_item_single_choice.xml6
-rw-r--r--core/res/res/layout/simple_selectable_list_item.xml6
-rw-r--r--core/res/res/layout/tab_indicator_holo.xml34
-rw-r--r--core/res/res/layout/tab_indicator_holo_large.xml46
-rw-r--r--core/res/res/layout/volume_adjust.xml1
-rw-r--r--core/res/res/values-af/strings.xml157
-rw-r--r--core/res/res/values-am/strings.xml157
-rw-r--r--core/res/res/values-ar/strings.xml157
-rw-r--r--core/res/res/values-bg/strings.xml151
-rw-r--r--core/res/res/values-ca/strings.xml153
-rw-r--r--core/res/res/values-cs/strings.xml153
-rw-r--r--core/res/res/values-da/strings.xml153
-rw-r--r--core/res/res/values-de/strings.xml153
-rw-r--r--core/res/res/values-el/strings.xml151
-rw-r--r--core/res/res/values-en-rGB/strings.xml142
-rw-r--r--core/res/res/values-es-rUS/strings.xml155
-rw-r--r--core/res/res/values-es/strings.xml151
-rw-r--r--core/res/res/values-fa/strings.xml163
-rw-r--r--core/res/res/values-fi/strings.xml186
-rw-r--r--core/res/res/values-fr/strings.xml163
-rw-r--r--core/res/res/values-h720dp/dimens.xml6
-rw-r--r--core/res/res/values-hr/strings.xml159
-rw-r--r--core/res/res/values-hu/strings.xml157
-rw-r--r--core/res/res/values-in/strings.xml159
-rw-r--r--core/res/res/values-it/strings.xml122
-rw-r--r--core/res/res/values-iw/strings.xml727
-rw-r--r--core/res/res/values-ja/strings.xml161
-rw-r--r--core/res/res/values-ko/strings.xml182
-rw-r--r--core/res/res/values-lt/strings.xml151
-rw-r--r--core/res/res/values-lv/strings.xml155
-rw-r--r--core/res/res/values-ms/strings.xml142
-rw-r--r--core/res/res/values-nb/strings.xml185
-rw-r--r--core/res/res/values-nl/strings.xml151
-rw-r--r--core/res/res/values-pl/strings.xml149
-rw-r--r--core/res/res/values-pt-rPT/strings.xml159
-rw-r--r--core/res/res/values-pt/strings.xml161
-rw-r--r--core/res/res/values-rm/strings.xml110
-rw-r--r--core/res/res/values-ro/strings.xml153
-rw-r--r--core/res/res/values-ru/strings.xml157
-rw-r--r--core/res/res/values-sk/strings.xml155
-rw-r--r--core/res/res/values-sl/strings.xml151
-rw-r--r--core/res/res/values-sr/strings.xml151
-rw-r--r--core/res/res/values-sv/strings.xml153
-rw-r--r--core/res/res/values-sw/strings.xml157
-rw-r--r--core/res/res/values-sw600dp/styles.xml16
-rw-r--r--core/res/res/values-th/strings.xml151
-rw-r--r--core/res/res/values-tl/strings.xml161
-rw-r--r--core/res/res/values-tr/strings.xml157
-rw-r--r--core/res/res/values-uk/strings.xml151
-rw-r--r--core/res/res/values-vi/strings.xml151
-rw-r--r--core/res/res/values-w360dp/dimens.xml (renamed from core/res/res/values-port/dimens.xml)2
-rw-r--r--core/res/res/values-w500dp/dimens.xml24
-rw-r--r--core/res/res/values-w600dp/dimens.xml24
-rw-r--r--core/res/res/values-w720dp/dimens.xml5
-rw-r--r--core/res/res/values-zh-rCN/strings.xml155
-rw-r--r--core/res/res/values-zh-rTW/strings.xml157
-rw-r--r--core/res/res/values-zu/strings.xml157
-rw-r--r--core/res/res/values/arrays.xml3
-rwxr-xr-xcore/res/res/values/attrs.xml25
-rwxr-xr-xcore/res/res/values/config.xml1
-rw-r--r--core/res/res/values/dimens.xml22
-rw-r--r--core/res/res/values/public.xml3
-rwxr-xr-xcore/res/res/values/strings.xml125
-rw-r--r--core/res/res/values/styles.xml43
-rw-r--r--core/res/res/values/themes.xml11
-rw-r--r--core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java41
-rw-r--r--core/tests/coretests/src/android/net/NetworkStatsTest.java100
-rw-r--r--core/tests/coretests/src/android/provider/SettingsProviderTest.java50
-rw-r--r--data/etc/platform.xml1
-rw-r--r--data/fonts/Lohit_Hindi.ttfbin0 -> 67960 bytes
-rw-r--r--data/fonts/fallback_fonts.xml5
-rw-r--r--data/fonts/fonts.mk1
-rw-r--r--docs/html/guide/developing/tools/adt.html10
-rw-r--r--docs/html/guide/developing/tools/adt.jd528
-rw-r--r--docs/html/guide/guide_toc.cs3
-rw-r--r--docs/html/guide/topics/graphics/opengl.jd423
-rw-r--r--docs/html/images/canvas.pngbin0 -> 148656 bytes
-rw-r--r--docs/html/images/layout_bar.pngbin0 -> 14486 bytes
-rw-r--r--docs/html/images/layout_editor.pngbin0 -> 249030 bytes
-rw-r--r--docs/html/images/layout_outline.pngbin0 -> 16080 bytes
-rw-r--r--docs/html/images/opengl/coordinates.pngbin0 -> 14019 bytes
-rw-r--r--docs/html/images/opengl/helloopengl-es10-1.pngbin0 -> 8448 bytes
-rw-r--r--docs/html/images/opengl/helloopengl-es10-2.pngbin0 -> 7259 bytes
-rw-r--r--docs/html/images/opengl/helloopengl-es20-1.pngbin0 -> 6935 bytes
-rw-r--r--docs/html/images/opengl/helloopengl-es20-2.pngbin0 -> 6833 bytes
-rw-r--r--docs/html/images/palette.pngbin0 -> 29726 bytes
-rw-r--r--docs/html/resources/resources-data.js20
-rw-r--r--docs/html/resources/tutorials/opengl/opengl-es10.jd532
-rw-r--r--docs/html/resources/tutorials/opengl/opengl-es20.jd652
-rw-r--r--docs/html/sdk/ndk/overview.jd3
-rw-r--r--graphics/java/android/graphics/drawable/LayerDrawable.java11
-rw-r--r--include/camera/CameraParameters.h23
-rw-r--r--include/gui/SurfaceTexture.h2
-rw-r--r--include/media/MediaProfiles.h26
-rw-r--r--include/media/stagefright/ACodec.h3
-rw-r--r--include/surfaceflinger/ISurfaceComposer.h5
-rwxr-xr-xinclude/ui/KeycodeLabels.h2
-rw-r--r--include/utils/String16.h2
-rw-r--r--libs/camera/CameraParameters.cpp1
-rw-r--r--libs/gui/ISurfaceComposer.cpp26
-rw-r--r--libs/gui/Surface.cpp3
-rw-r--r--libs/gui/SurfaceTexture.cpp36
-rw-r--r--libs/gui/SurfaceTextureClient.cpp12
-rw-r--r--libs/hwui/Layer.h9
-rw-r--r--libs/hwui/LayerCache.cpp2
-rw-r--r--libs/hwui/LayerCache.h6
-rw-r--r--libs/hwui/Matrix.cpp23
-rw-r--r--libs/hwui/Matrix.h2
-rw-r--r--libs/hwui/OpenGLRenderer.cpp10
-rw-r--r--libs/hwui/Properties.h6
-rw-r--r--libs/rs/driver/rsdBcc.cpp67
-rw-r--r--libs/rs/driver/rsdCore.cpp111
-rw-r--r--libs/rs/driver/rsdCore.h5
-rw-r--r--libs/rs/rs.spec7
-rw-r--r--libs/rs/rsAllocation.cpp34
-rw-r--r--libs/rs/rsAllocation.h2
-rw-r--r--libs/rs/rsComponent.cpp30
-rw-r--r--libs/rs/rsComponent.h2
-rw-r--r--libs/rs/rsContext.cpp14
-rw-r--r--libs/rs/rsElement.cpp178
-rw-r--r--libs/rs/rsElement.h53
-rw-r--r--libs/rs/rsFileA3D.cpp4
-rw-r--r--libs/rs/rsFont.cpp70
-rw-r--r--libs/rs/rsFont.h1
-rw-r--r--libs/rs/rsObjectBase.cpp26
-rw-r--r--libs/rs/rsObjectBase.h7
-rw-r--r--libs/rs/rsProgram.cpp23
-rw-r--r--libs/rs/rsProgram.h1
-rw-r--r--libs/rs/rsProgramFragment.cpp14
-rw-r--r--libs/rs/rsProgramRaster.cpp59
-rw-r--r--libs/rs/rsProgramRaster.h28
-rw-r--r--libs/rs/rsProgramStore.cpp82
-rw-r--r--libs/rs/rsProgramStore.h25
-rw-r--r--libs/rs/rsProgramVertex.cpp50
-rw-r--r--libs/rs/rsSampler.cpp47
-rw-r--r--libs/rs/rsSampler.h36
-rw-r--r--libs/rs/rsType.cpp48
-rw-r--r--libs/rs/rsType.h20
-rw-r--r--libs/rs/rs_hal.h13
-rw-r--r--libs/ui/EGLUtils.cpp58
-rw-r--r--media/java/android/media/AudioManager.java191
-rw-r--r--media/java/android/media/AudioService.java81
-rw-r--r--media/java/android/media/IAudioService.aidl9
-rw-r--r--media/java/android/media/IRemoteControlClient.aidl76
-rw-r--r--media/java/android/media/IRemoteControlClientDispatcher.aidl92
-rw-r--r--media/java/android/media/RemoteControlClient.java243
-rw-r--r--media/java/android/media/audiofx/AudioEffect.java15
-rw-r--r--media/java/android/media/audiofx/BassBoost.java13
-rw-r--r--media/java/android/media/audiofx/Equalizer.java15
-rw-r--r--media/java/android/media/audiofx/Virtualizer.java16
-rw-r--r--media/java/android/media/videoeditor/MediaArtistNativeHelper.java300
-rwxr-xr-xmedia/java/android/media/videoeditor/MediaImageItem.java26
-rwxr-xr-xmedia/java/android/media/videoeditor/MediaItem.java38
-rwxr-xr-xmedia/java/android/media/videoeditor/MediaProperties.java174
-rwxr-xr-xmedia/java/android/media/videoeditor/MediaVideoItem.java46
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditor.java2
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditorImpl.java98
-rwxr-xr-xmedia/java/android/media/videoeditor/VideoEditorProfile.java48
-rw-r--r--media/jni/android_media_MediaProfiles.cpp40
-rwxr-xr-xmedia/jni/mediaeditor/VideoBrowserInternal.h3
-rwxr-xr-xmedia/jni/mediaeditor/VideoBrowserMain.c19
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorClasses.cpp122
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorClasses.h38
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorMain.cpp364
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorPropertiesMain.cpp19
-rw-r--r--media/libmedia/MediaProfiles.cpp59
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp18
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp33
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h2
-rw-r--r--media/libstagefright/ACodec.cpp74
-rw-r--r--media/libstagefright/Android.mk6
-rw-r--r--media/libstagefright/AwesomePlayer.cpp74
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp5
-rwxr-xr-xmedia/libstagefright/OMXCodec.cpp9
-rw-r--r--media/libstagefright/SampleTable.cpp7
-rw-r--r--media/libstagefright/codecs/on2/dec/SoftVPX.cpp2
-rw-r--r--media/libstagefright/include/AwesomePlayer.h3
-rw-r--r--media/libstagefright/include/SampleTable.h2
-rw-r--r--media/libstagefright/matroska/MatroskaExtractor.cpp12
-rw-r--r--media/libstagefright/matroska/MatroskaExtractor.h1
-rw-r--r--media/libstagefright/omx/OMXNodeInstance.cpp5
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java28
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java105
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java16
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java9
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java15
-rw-r--r--native/include/android/input.h1
-rw-r--r--opengl/libagl/state.cpp3
-rw-r--r--opengl/libagl/texture.cpp8
-rw-r--r--opengl/tests/swapinterval/swapinterval.cpp16
-rw-r--r--packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-it/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ms/strings.xml29
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pl/strings.xml29
-rw-r--r--packages/DefaultContainerService/res/values-iw/strings.xml2
-rw-r--r--packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java6
-rw-r--r--packages/SystemUI/AndroidManifest.xml1
-rw-r--r--packages/SystemUI/res/anim/recent_appear.xml (renamed from packages/SystemUI/res/drawable/recents_thumbnail_layers.xml)11
-rw-r--r--packages/SystemUI/res/drawable-hdpi/compat_mode_help_top_divider.9.pngbin155 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_notification_open.pngbin886 -> 1043 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_airplane_off.pngbin1091 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default.pngbin719 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default_land.pngbin709 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default_land.pngbin443 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_brightness_low.pngbin1126 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_gps_on.pngbin1734 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default_land.pngbin960 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.pngbin1384 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.pngbin1322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.pngbin895 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.pngbin908 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_settings.pngbin1349 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.pngbin208 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_off.pngbin1196 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_on.pngbin1186 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/recent_overlay.pngbin277728 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/recent_rez_border.pngbin26875 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/shade_handlebar.9.pngbin2101 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/shade_header_background.9.pngbin164 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.pngbin816 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.pngbin302 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/statusbar_background.9.pngbin119 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/title_bar_portrait.9.pngbin172 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_notification_open.pngbin611 -> 788 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_airplane_off.pngbin786 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default.pngbin663 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default_land.pngbin622 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default_land.pngbin375 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_brightness_low.pngbin793 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_gps_on.pngbin465 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default_land.pngbin733 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.pngbin974 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.pngbin966 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.pngbin713 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.pngbin728 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_settings.pngbin953 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_shadow.9.pngbin156 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_off.pngbin849 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_on.pngbin826 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/recent_overlay.pngbin159608 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/recent_rez_border.pngbin20126 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/shade_handlebar.9.pngbin614 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/shade_header_background.9.pngbin149 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.pngbin651 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.pngbin92 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/statusbar_background.9.pngbin119 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/title_bar_portrait.9.pngbin160 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/bg_scrim_notification.pngbin55518 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/compat_mode_help_bg.pngbin2561 -> 2067 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/notify_glow_back.pngbin57373 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/notify_item_glow_left.pngbin99 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/notify_item_glow_top.pngbin104 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-nodpi/panel_notification.pngbin224 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.pngbin1089 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.pngbin802 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.pngbin1335 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_notification_open.pngbin0 -> 1310 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_airplane_off.pngbin1455 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default.pngbin901 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default_land.pngbin919 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default_land.pngbin501 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_brightness_low.pngbin1602 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_gps_on.pngbin3199 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default_land.pngbin1165 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd.pngbin1794 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd_off.pngbin1767 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_lanscape.pngbin1078 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_portrait.pngbin1076 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_settings.pngbin1865 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_shadow.9.pngbin367 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_off.pngbin1637 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_on.pngbin1601 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.pngbin1000 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.pngbin322 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable/compat_mode_help_bg.pngbin2067 -> 0 bytes
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_recent_item.xml12
-rw-r--r--packages/SystemUI/res/layout-port/status_bar_recent_item.xml10
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar.xml19
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml1
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml10
-rw-r--r--packages/SystemUI/res/layout/navigation_bar.xml105
-rw-r--r--packages/SystemUI/res/values-af/strings.xml23
-rw-r--r--packages/SystemUI/res/values-am/strings.xml23
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml48
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml46
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml70
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml54
-rw-r--r--packages/SystemUI/res/values-da/strings.xml38
-rw-r--r--packages/SystemUI/res/values-de/strings.xml44
-rw-r--r--packages/SystemUI/res/values-el/strings.xml42
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml38
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml66
-rw-r--r--packages/SystemUI/res/values-es/strings.xml58
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml46
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml60
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml44
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml56
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml48
-rw-r--r--packages/SystemUI/res/values-in/strings.xml38
-rw-r--r--packages/SystemUI/res/values-it/strings.xml10
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml56
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml88
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml68
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml40
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml88
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml42
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml58
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml38
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml38
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml44
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml64
-rw-r--r--packages/SystemUI/res/values-rm/strings.xml2
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml46
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml74
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml78
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml42
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml46
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml48
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml23
-rw-r--r--packages/SystemUI/res/values-th/strings.xml38
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml76
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml52
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml44
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml38
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml60
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml46
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml23
-rw-r--r--packages/SystemUI/res/values/attrs.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/SwipeHelper.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java217
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java46
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java32
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java69
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java91
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java90
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java44
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java142
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java26
-rw-r--r--packages/VpnDialogs/res/values-af/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-am/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ar/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-bg/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ca/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-cs/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-da/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-de/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-el/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-en-rGB/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-es-rUS/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-es/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-fa/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-fi/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-fr/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-hr/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-hu/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-in/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-it/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-iw/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ja/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ko/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-lt/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-lv/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ms/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-nb/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-nl/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-pl/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-pt-rPT/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-pt/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ro/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-ru/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-sk/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-sl/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-sr/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-sv/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-sw/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-th/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-tl/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-tr/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-uk/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-vi/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-zh-rCN/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-zh-rTW/strings.xml31
-rw-r--r--packages/VpnDialogs/res/values-zu/strings.xml31
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java7
-rw-r--r--policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java125
-rw-r--r--policy/src/com/android/internal/policy/impl/LockScreen.java10
-rw-r--r--policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java71
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java31
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java128
-rw-r--r--services/input/InputDispatcher.cpp79
-rw-r--r--services/input/InputDispatcher.h18
-rw-r--r--services/input/InputListener.cpp19
-rw-r--r--services/input/InputListener.h20
-rw-r--r--services/input/InputReader.cpp1534
-rw-r--r--services/input/InputReader.h309
-rw-r--r--services/input/tests/InputReader_test.cpp509
-rw-r--r--services/java/com/android/server/AppWidgetService.java8
-rw-r--r--services/java/com/android/server/BackupManagerService.java2
-rw-r--r--services/java/com/android/server/BatteryService.java2
-rw-r--r--services/java/com/android/server/ConnectivityService.java183
-rw-r--r--services/java/com/android/server/DevicePolicyManagerService.java7
-rw-r--r--services/java/com/android/server/DropBoxManagerService.java6
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java85
-rw-r--r--services/java/com/android/server/MountService.java22
-rw-r--r--services/java/com/android/server/NativeDaemonConnector.java72
-rw-r--r--services/java/com/android/server/NetworkManagementService.java36
-rw-r--r--services/java/com/android/server/SystemServer.java257
-rw-r--r--services/java/com/android/server/ThrottleService.java4
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java470
-rw-r--r--services/java/com/android/server/am/ActivityStack.java49
-rw-r--r--services/java/com/android/server/am/BatteryStatsService.java2
-rw-r--r--services/java/com/android/server/am/BroadcastRecord.java4
-rw-r--r--services/java/com/android/server/connectivity/Vpn.java4
-rw-r--r--services/java/com/android/server/net/NetworkPolicyManagerService.java134
-rw-r--r--services/java/com/android/server/net/NetworkStatsService.java348
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java363
-rw-r--r--services/java/com/android/server/pm/PackageSignatures.java6
-rw-r--r--services/java/com/android/server/usb/UsbDeviceManager.java41
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java52
-rw-r--r--services/jni/com_android_server_InputManager.cpp68
-rw-r--r--services/sensorservice/Fusion.cpp27
-rw-r--r--services/sensorservice/Fusion.h4
-rw-r--r--services/sensorservice/mat.h23
-rw-r--r--services/sensorservice/tests/sensorservicetest.cpp16
-rw-r--r--services/surfaceflinger/Android.mk4
-rw-r--r--services/surfaceflinger/DdmConnection.cpp75
-rw-r--r--services/surfaceflinger/DdmConnection.h29
-rw-r--r--services/surfaceflinger/Layer.cpp10
-rw-r--r--services/surfaceflinger/Layer.h3
-rw-r--r--services/surfaceflinger/LayerBase.cpp5
-rw-r--r--services/surfaceflinger/LayerBase.h2
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp34
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h3
-rw-r--r--services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set13
-rw-r--r--services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java17
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java62
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java30
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java458
-rw-r--r--services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java5
-rw-r--r--telephony/java/android/telephony/PhoneNumberUtils.java37
-rw-r--r--telephony/java/com/android/internal/telephony/IccCard.java3
-rw-r--r--test-runner/src/android/test/mock/MockPackageManager.java19
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java2
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java14
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java4
-rw-r--r--tests/RenderScriptTests/ShadersTest/Android.mk26
-rw-r--r--tests/RenderScriptTests/ShadersTest/AndroidManifest.xml32
-rw-r--r--tests/RenderScriptTests/ShadersTest/res/drawable-nodpi/robot.pngbin0 -> 292580 bytes
-rw-r--r--tests/RenderScriptTests/ShadersTest/res/raw/depth_fs.glsl13
-rw-r--r--tests/RenderScriptTests/ShadersTest/res/raw/robot.a3dbin0 -> 144528 bytes
-rw-r--r--tests/RenderScriptTests/ShadersTest/res/raw/vignette_fs.glsl31
-rw-r--r--tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTest.java46
-rw-r--r--tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestRS.java202
-rw-r--r--tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestView.java138
-rw-r--r--tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs193
-rw-r--r--tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java1
-rw-r--r--tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java56
-rw-r--r--tests/RenderScriptTests/tests/src/com/android/rs/test/foreach.rs42
-rw-r--r--tests/TileBenchmark/res/values/strings.xml2
-rw-r--r--tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java14
-rw-r--r--tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java51
-rw-r--r--tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java2
-rw-r--r--tools/aapt/Command.cpp29
-rw-r--r--tools/aapt/Package.cpp9
-rw-r--r--tools/aapt/Resource.cpp4
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java25
-rw-r--r--voip/java/android/net/sip/SipSession.java3
-rw-r--r--voip/java/com/android/server/sip/SipSessionGroup.java30
-rw-r--r--wifi/java/android/net/wifi/WifiNative.java97
-rw-r--r--wifi/java/android/net/wifi/WifiStateTracker.java24
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pConfig.java4
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pDevice.java8
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pManager.java155
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pService.java203
1910 files changed, 20218 insertions, 9636 deletions
diff --git a/Android.mk b/Android.mk
index 752a5f8cdf93..fdf0933f4638 100644
--- a/Android.mk
+++ b/Android.mk
@@ -183,7 +183,7 @@ LOCAL_SRC_FILES += \
media/java/android/media/IAudioFocusDispatcher.aidl \
media/java/android/media/IMediaScannerListener.aidl \
media/java/android/media/IMediaScannerService.aidl \
- media/java/android/media/IRemoteControlClient.aidl \
+ media/java/android/media/IRemoteControlClientDispatcher.aidl \
telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl \
telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \
telephony/java/com/android/internal/telephony/ITelephony.aidl \
@@ -319,6 +319,9 @@ fwbase_dirs_to_document := \
# include definition of libcore_to_document
include $(LOCAL_PATH)/../../libcore/Docs.mk
+# include definition of libfilterfw_to_document
+include $(LOCAL_PATH)/../../system/media/mca/Docs.mk
+
non_base_dirs := \
../../external/apache-http/src/org/apache/http
@@ -335,7 +338,8 @@ html_dirs := \
framework_docs_LOCAL_SRC_FILES := \
$(call find-other-java-files, $(dirs_to_document)) \
$(call find-other-html-files, $(html_dirs)) \
- $(addprefix ../../libcore/, $(call libcore_to_document, $(LOCAL_PATH)/../../libcore))
+ $(addprefix ../../libcore/, $(call libcore_to_document, $(LOCAL_PATH)/../../libcore)) \
+ $(addprefix ../../system/media/mca/, $(call libfilterfw_to_document, $(LOCAL_PATH)/../../system/media/mca))
# This is used by ide.mk as the list of source files that are
# always included.
diff --git a/CleanSpec.mk b/CleanSpec.mk
index bf473148120e..25930652e51f 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -104,6 +104,7 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/nfc)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/SystemUI_intermediates)
$(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)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/current.txt b/api/current.txt
index c70cea85bfd0..ef3d5b519751 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -958,6 +958,8 @@ package android {
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 textAppearanceMedium = 16842817; // 0x1010041
field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0
@@ -7205,6 +7207,7 @@ package android.database.sqlite {
ctor public SQLiteOpenHelper(android.content.Context, java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int);
ctor public SQLiteOpenHelper(android.content.Context, java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler);
method public synchronized void close();
+ method public java.lang.String getDatabaseName();
method public synchronized android.database.sqlite.SQLiteDatabase getReadableDatabase();
method public synchronized android.database.sqlite.SQLiteDatabase getWritableDatabase();
method public abstract void onCreate(android.database.sqlite.SQLiteDatabase);
@@ -9235,7 +9238,11 @@ package android.hardware {
public static class Camera.Face {
ctor public Camera.Face();
+ field public int id;
+ field public android.graphics.Point leftEye;
+ field public android.graphics.Point mouth;
field public android.graphics.Rect rect;
+ field public android.graphics.Point rightEye;
field public int score;
}
@@ -11267,6 +11274,37 @@ package android.media.audiofx {
}
+package android.media.effect {
+
+ public abstract class Effect {
+ ctor public Effect();
+ method public abstract void apply(int, int, int, int);
+ method public abstract java.lang.String getName();
+ method public abstract void release();
+ method public abstract void setParameter(java.lang.String, java.lang.Object);
+ method public void setUpdateListener(android.media.effect.EffectUpdateListener);
+ }
+
+ public class EffectContext {
+ method public static android.media.effect.EffectContext createWithCurrentGlContext();
+ method public android.media.effect.EffectFactory getFactory();
+ method public void release();
+ }
+
+ public class EffectFactory {
+ method public android.media.effect.Effect createEffect(java.lang.String);
+ method public static boolean isEffectSupported(java.lang.String);
+ field public static final java.lang.String EFFECT_BRIGHTNESS = "BrightnessEffect";
+ field public static final java.lang.String EFFECT_CONTRAST = "ContrastEffect";
+ field public static final java.lang.String EFFECT_FISHEYE = "FisheyeEffect";
+ }
+
+ public abstract interface EffectUpdateListener {
+ method public abstract void onEffectUpdated(android.media.effect.Effect, java.lang.Object);
+ }
+
+}
+
package android.mtp {
public final class MtpConstants {
@@ -11400,7 +11438,7 @@ package android.net {
method public android.net.NetworkInfo getActiveNetworkInfo();
method public android.net.NetworkQuotaInfo getActiveNetworkQuotaInfo();
method public android.net.NetworkInfo[] getAllNetworkInfo();
- method public boolean getBackgroundDataSetting();
+ method public deprecated boolean getBackgroundDataSetting();
method public android.net.NetworkInfo getNetworkInfo(int);
method public int getNetworkPreference();
method public static boolean isNetworkTypeValid(int);
@@ -14658,6 +14696,7 @@ package android.os {
method public int describeContents();
method public int detachFd();
method public static android.os.ParcelFileDescriptor dup(java.io.FileDescriptor) throws java.io.IOException;
+ method public android.os.ParcelFileDescriptor dup() throws java.io.IOException;
method public static android.os.ParcelFileDescriptor fromDatagramSocket(java.net.DatagramSocket);
method public static android.os.ParcelFileDescriptor fromFd(int) throws java.io.IOException;
method public static android.os.ParcelFileDescriptor fromSocket(java.net.Socket);
@@ -16036,6 +16075,12 @@ package android.provider {
field public static final java.lang.String GROUP_SOURCE_ID = "group_sourceid";
}
+ public static final class ContactsContract.CommonDataKinds.Identity implements android.provider.ContactsContract.DataColumnsWithJoins {
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/identity";
+ field public static final java.lang.String IDENTITY = "data1";
+ field public static final java.lang.String NAMESPACE = "data2";
+ }
+
public static final class ContactsContract.CommonDataKinds.Im implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
method public static final java.lang.CharSequence getProtocolLabel(android.content.res.Resources, int, java.lang.CharSequence);
method public static final int getProtocolLabelResource(int);
@@ -17049,7 +17094,7 @@ package android.provider {
field public static final java.lang.String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins";
field public static final java.lang.String ALLOW_MOCK_LOCATION = "mock_location";
field public static final java.lang.String ANDROID_ID = "android_id";
- field public static final java.lang.String BACKGROUND_DATA = "background_data";
+ field public static final deprecated java.lang.String BACKGROUND_DATA = "background_data";
field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DATA_ROAMING = "data_roaming";
@@ -18358,6 +18403,7 @@ package android.service.wallpaper {
public class WallpaperService.Engine {
ctor public WallpaperService.Engine();
+ method protected void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public int getDesiredMinimumHeight();
method public int getDesiredMinimumWidth();
method public android.view.SurfaceHolder getSurfaceHolder();
@@ -20729,7 +20775,7 @@ package android.text.style {
method public void writeToParcel(android.os.Parcel, int);
}
- public class SuggestionSpan implements android.text.ParcelableSpan {
+ public class SuggestionSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan {
ctor public SuggestionSpan(android.content.Context, java.lang.String[], int);
ctor public SuggestionSpan(java.util.Locale, java.lang.String[], int);
ctor public SuggestionSpan(android.content.Context, java.util.Locale, java.lang.String[], int, java.lang.Class<?>);
@@ -20739,10 +20785,12 @@ package android.text.style {
method public java.lang.String getLocale();
method public int getSpanTypeId();
method public java.lang.String[] getSuggestions();
+ 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";
field public static final android.os.Parcelable.Creator CREATOR;
- field public static final int FLAG_VERBATIM = 1; // 0x1
+ field public static final int FLAG_EASY_CORRECT = 1; // 0x1
+ field public static final int FLAG_MISSPELLED = 2; // 0x2
field public static final int SUGGESTIONS_MAX_SIZE = 5; // 0x5
field public static final java.lang.String SUGGESTION_SPAN_PICKED_AFTER = "after";
field public static final java.lang.String SUGGESTION_SPAN_PICKED_BEFORE = "before";
@@ -22275,6 +22323,7 @@ package android.view {
field public static final int AXIS_RZ = 14; // 0xe
field public static final int AXIS_SIZE = 3; // 0x3
field public static final int AXIS_THROTTLE = 19; // 0x13
+ field public static final int AXIS_TILT = 25; // 0x19
field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
field public static final int AXIS_TOOL_MINOR = 7; // 0x7
field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
@@ -22478,12 +22527,14 @@ package android.view {
method public android.graphics.Bitmap getBitmap(android.graphics.Bitmap);
method public android.graphics.SurfaceTexture getSurfaceTexture();
method public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener();
+ method public android.graphics.Matrix getTransform(android.graphics.Matrix);
method public boolean isAvailable();
method public android.graphics.Canvas lockCanvas();
method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
method protected final void onDraw(android.graphics.Canvas);
method public void setOpaque(boolean);
method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
+ method public void setTransform(android.graphics.Matrix);
method public void unlockCanvasAndPost(android.graphics.Canvas);
}
@@ -23456,6 +23507,7 @@ package android.view {
method public abstract void setContentView(android.view.View);
method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
method protected void setDefaultWindowFormat(int);
+ method public void setDimAmount(float);
method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable);
method public abstract void setFeatureDrawableAlpha(int, int);
method public abstract void setFeatureDrawableResource(int, int);
@@ -23470,6 +23522,7 @@ package android.view {
method public abstract void setTitleColor(int);
method public void setType(int);
method public void setUiOptions(int);
+ method public void setUiOptions(int, int);
method public abstract void setVolumeControlStream(int);
method public void setWindowAnimations(int);
method public void setWindowManager(android.view.WindowManager, android.os.IBinder, java.lang.String);
@@ -26646,11 +26699,16 @@ package android.widget {
public class ShareActionProvider extends android.view.ActionProvider {
ctor public ShareActionProvider(android.content.Context);
method public android.view.View onCreateActionView();
+ method public void setOnShareTargetSelectedListener(android.widget.ShareActionProvider.OnShareTargetSelectedListener);
method public void setShareHistoryFileName(java.lang.String);
method public void setShareIntent(android.content.Intent);
field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
}
+ public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public abstract boolean onShareTargetSelected(android.widget.ShareActionProvider, android.content.Intent);
+ }
+
public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
ctor public SimpleAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String, ?>>, int, java.lang.String[], int[]);
method public int getCount();
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 6dfa12be9592..293116cb671e 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -28,6 +28,8 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.IIntentReceiver;
import android.content.Intent;
+import android.content.pm.IPackageManager;
+import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
@@ -44,8 +46,8 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.URISyntaxException;
-import java.util.Iterator;
-import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
public class Am {
@@ -56,6 +58,10 @@ public class Am {
private boolean mDebugOption = false;
private boolean mWaitOption = false;
+ private boolean mStopOption = false;
+
+ private String mProfileFile;
+ private boolean mProfileAutoStop;
// These are magic strings understood by the Eclipse plugin.
private static final String FATAL_ERROR_CODE = "Error type 1";
@@ -74,7 +80,7 @@ public class Am {
showUsage();
System.err.println("Error: " + e.getMessage());
} catch (Exception e) {
- System.err.println(e.toString());
+ e.printStackTrace(System.err);
System.exit(1);
}
}
@@ -126,6 +132,8 @@ public class Am {
mDebugOption = false;
mWaitOption = false;
+ mStopOption = false;
+ mProfileFile = null;
Uri data = null;
String type = null;
@@ -249,6 +257,14 @@ public class Am {
mDebugOption = true;
} else if (opt.equals("-W")) {
mWaitOption = true;
+ } else if (opt.equals("-P")) {
+ mProfileFile = nextArgRequired();
+ mProfileAutoStop = true;
+ } else if (opt.equals("--start-profiler")) {
+ mProfileFile = nextArgRequired();
+ mProfileAutoStop = false;
+ } else if (opt.equals("-S")) {
+ mStopOption = true;
} else {
System.err.println("Error: Unknown option: " + opt);
showUsage();
@@ -257,23 +273,43 @@ public class Am {
}
intent.setDataAndType(data, type);
- String uri = nextArg();
- if (uri != null) {
- Intent oldIntent = intent;
- intent = Intent.parseUri(uri, 0);
- if (oldIntent.getAction() != null) {
- intent.setAction(oldIntent.getAction());
- }
- if (oldIntent.getData() != null || oldIntent.getType() != null) {
- intent.setDataAndType(oldIntent.getData(), oldIntent.getType());
+ String arg = nextArg();
+ if (arg != null) {
+ Intent baseIntent;
+ if (arg.indexOf(':') >= 0) {
+ // The argument is a URI. Fully parse it, and use that result
+ // to fill in any data not specified so far.
+ baseIntent = Intent.parseUri(arg, Intent.URI_INTENT_SCHEME);
+ } else if (arg.indexOf('/') >= 0) {
+ // The argument is a component name. Build an Intent to launch
+ // it.
+ baseIntent = new Intent(Intent.ACTION_MAIN);
+ baseIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ baseIntent.setComponent(ComponentName.unflattenFromString(arg));
+ } else {
+ // Assume the argument is a package name.
+ baseIntent = new Intent(Intent.ACTION_MAIN);
+ baseIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ baseIntent.setPackage(arg);
}
- Set cats = oldIntent.getCategories();
- if (cats != null) {
- Iterator it = cats.iterator();
- while (it.hasNext()) {
- intent.addCategory((String)it.next());
+ Bundle extras = intent.getExtras();
+ intent.replaceExtras((Bundle)null);
+ Bundle uriExtras = baseIntent.getExtras();
+ baseIntent.replaceExtras((Bundle)null);
+ if (intent.getAction() != null && baseIntent.getCategories() != null) {
+ HashSet<String> cats = new HashSet<String>(baseIntent.getCategories());
+ for (String c : cats) {
+ baseIntent.removeCategory(c);
}
}
+ intent.fillIn(baseIntent, Intent.FILL_IN_COMPONENT);
+ if (extras == null) {
+ extras = uriExtras;
+ } else if (uriExtras != null) {
+ uriExtras.putAll(extras);
+ extras = uriExtras;
+ }
+ intent.replaceExtras(extras);
hasIntentInfo = true;
}
@@ -292,18 +328,70 @@ public class Am {
private void runStart() throws Exception {
Intent intent = makeIntent();
+
+ String mimeType = intent.getType();
+ if (mimeType == null && intent.getData() != null
+ && "content".equals(intent.getData().getScheme())) {
+ mimeType = mAm.getProviderMimeType(intent.getData());
+ }
+
+ if (mStopOption) {
+ String packageName;
+ if (intent.getComponent() != null) {
+ packageName = intent.getComponent().getPackageName();
+ } else {
+ IPackageManager pm = IPackageManager.Stub.asInterface(
+ ServiceManager.getService("package"));
+ if (pm == null) {
+ System.err.println("Error: Package manager not running; aborting");
+ return;
+ }
+ List<ResolveInfo> activities = pm.queryIntentActivities(intent, mimeType, 0);
+ if (activities == null || activities.size() <= 0) {
+ System.err.println("Error: Intent does not match any activities: "
+ + intent);
+ return;
+ } else if (activities.size() > 1) {
+ System.err.println("Error: Intent matches multiple activities; can't stop: "
+ + intent);
+ return;
+ }
+ packageName = activities.get(0).activityInfo.packageName;
+ }
+ System.out.println("Stopping: " + packageName);
+ mAm.forceStopPackage(packageName);
+ Thread.sleep(250);
+ }
+
System.out.println("Starting: " + intent);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- // XXX should do something to determine the MIME type.
+
+ ParcelFileDescriptor fd = null;
+
+ if (mProfileFile != null) {
+ try {
+ fd = ParcelFileDescriptor.open(
+ new File(mProfileFile),
+ ParcelFileDescriptor.MODE_CREATE |
+ ParcelFileDescriptor.MODE_TRUNCATE |
+ ParcelFileDescriptor.MODE_READ_WRITE);
+ } catch (FileNotFoundException e) {
+ System.err.println("Error: Unable to open file: " + mProfileFile);
+ return;
+ }
+ }
+
IActivityManager.WaitResult result = null;
int res;
if (mWaitOption) {
- result = mAm.startActivityAndWait(null, intent, intent.getType(),
- null, 0, null, null, 0, false, mDebugOption);
+ result = mAm.startActivityAndWait(null, intent, mimeType,
+ null, 0, null, null, 0, false, mDebugOption,
+ mProfileFile, fd, mProfileAutoStop);
res = result.result;
} else {
- res = mAm.startActivity(null, intent, intent.getType(),
- null, 0, null, null, 0, false, mDebugOption);
+ res = mAm.startActivity(null, intent, mimeType,
+ null, 0, null, null, 0, false, mDebugOption,
+ mProfileFile, fd, mProfileAutoStop);
}
PrintStream out = mWaitOption ? System.out : System.err;
boolean launched = false;
@@ -483,7 +571,7 @@ public class Am {
wall = "--wall".equals(nextOption());
process = nextArgRequired();
} else if ("stop".equals(cmd)) {
- process = nextArgRequired();
+ process = nextArg();
} else {
// Compatibility with old syntax: process is specified first.
process = cmd;
@@ -1076,14 +1164,14 @@ public class Am {
private static void showUsage() {
System.err.println(
"usage: am [subcommand] [options]\n" +
- "usage: am start [-D] [-W] <INTENT>\n" +
+ "usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <FILE>] [-S] <INTENT>\n" +
" am startservice <INTENT>\n" +
" am force-stop <PACKAGE>\n" +
" am broadcast <INTENT>\n" +
- " am instrument [-r] [-e <NAME> <VALUE>] [-p] [-w]\n" +
+ " am instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w]\n" +
" [--no-window-animation] <COMPONENT>\n" +
" am profile [looper] start <PROCESS> <FILE>\n" +
- " am profile [looper] stop <PROCESS>\n" +
+ " am profile [looper] stop [<PROCESS>]\n" +
" am dumpheap [flags] <PROCESS> <FILE>\n" +
" am monitor [--gdb <port>]\n" +
" am screen-compat [on|off] <PACKAGE>\n" +
@@ -1092,6 +1180,9 @@ public class Am {
"am start: start an Activity. Options are:\n" +
" -D: enable debugging\n" +
" -W: wait for launch to complete\n" +
+ " --start-profiler <FILE>: start profiler and send results to <FILE>\n" +
+ " -P <FILE>: like above, but profiling stops when app goes idle\n" +
+ " -S: force stop the target app before starting the activity\n" +
"\n" +
"am startservice: start a Service.\n" +
"\n" +
@@ -1146,7 +1237,7 @@ public class Am {
" [--activity-single-top] [--activity-clear-task]\n" +
" [--activity-task-on-home]\n" +
" [--receiver-registered-only] [--receiver-replace-pending]\n" +
- " [<URI>]\n"
+ " [<URI> | <PACKAGE> | <COMPONENT>]\n"
);
}
}
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index ccd668d08192..d816e7ce639b 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -37,7 +37,6 @@
#include <ui/Region.h>
#include <ui/DisplayInfo.h>
#include <ui/FramebufferNativeWindow.h>
-#include <ui/EGLUtils.h>
#include <surfaceflinger/ISurfaceComposer.h>
#include <surfaceflinger/ISurfaceComposerClient.h>
@@ -222,6 +221,9 @@ status_t BootAnimation::readyToRun() {
// initialize opengl and egl
const EGLint attribs[] = {
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
EGL_DEPTH_SIZE, 0,
EGL_NONE
};
@@ -234,7 +236,7 @@ status_t BootAnimation::readyToRun() {
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
- EGLUtils::selectConfigForNativeWindow(display, attribs, s.get(), &config);
+ eglChooseConfig(display, attribs, &config, 1, &numConfigs);
surface = eglCreateWindowSurface(display, config, s.get(), NULL);
context = eglCreateContext(display, config, NULL, NULL);
eglQuerySurface(display, surface, EGL_WIDTH, &w);
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c
index c2beb746e939..836cf1531e34 100644
--- a/cmds/dumpstate/dumpstate.c
+++ b/cmds/dumpstate/dumpstate.c
@@ -79,6 +79,7 @@ static void dumpstate() {
dump_file("VMALLOC INFO", "/proc/vmallocinfo");
dump_file("SLAB INFO", "/proc/slabinfo");
dump_file("ZONEINFO", "/proc/zoneinfo");
+ dump_file("PAGETYPEINFO", "/proc/pagetypeinfo");
if (screenshot_path[0]) {
LOGI("taking screenshot\n");
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index c98071519c88..0ec007cf9daa 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -772,18 +772,33 @@ public final class Pm {
}
}
- String apkFilePath = nextArg();
+ final Uri apkURI;
+ final Uri verificationURI;
+
+ // Populate apkURI, must be present
+ final String apkFilePath = nextArg();
System.err.println("\tpkg: " + apkFilePath);
- if (apkFilePath == null) {
+ if (apkFilePath != null) {
+ apkURI = Uri.fromFile(new File(apkFilePath));
+ } else {
System.err.println("Error: no package specified");
showUsage();
return;
}
+ // Populate verificationURI, optionally present
+ final String verificationFilePath = nextArg();
+ if (verificationFilePath != null) {
+ System.err.println("\tver: " + verificationFilePath);
+ verificationURI = Uri.fromFile(new File(verificationFilePath));
+ } else {
+ verificationURI = null;
+ }
+
PackageInstallObserver obs = new PackageInstallObserver();
try {
- mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,
- installerPackageName);
+ mPm.installPackageWithVerification(apkURI, obs, installFlags, installerPackageName,
+ verificationURI, null);
synchronized (obs) {
while (!obs.finished) {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 929867bc8e7b..1271ddd68c83 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -3353,7 +3353,8 @@ public class Activity extends ContextThemeWrapper
intent, intent.resolveTypeIfNeeded(
getContentResolver()),
null, 0,
- mToken, mEmbeddedID, requestCode, true, false);
+ mToken, mEmbeddedID, requestCode, true, false,
+ null, null, false);
} catch (RemoteException e) {
// Empty
}
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index a73e10a863b3..77997796a8f7 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -124,9 +124,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
int requestCode = data.readInt();
boolean onlyIfNeeded = data.readInt() != 0;
boolean debug = data.readInt() != 0;
+ String profileFile = data.readString();
+ ParcelFileDescriptor profileFd = data.readInt() != 0
+ ? data.readFileDescriptor() : null;
+ boolean autoStopProfiler = data.readInt() != 0;
int result = startActivity(app, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
- requestCode, onlyIfNeeded, debug);
+ requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler);
reply.writeNoException();
reply.writeInt(result);
return true;
@@ -146,9 +150,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
int requestCode = data.readInt();
boolean onlyIfNeeded = data.readInt() != 0;
boolean debug = data.readInt() != 0;
+ String profileFile = data.readString();
+ ParcelFileDescriptor profileFd = data.readInt() != 0
+ ? data.readFileDescriptor() : null;
+ boolean autoStopProfiler = data.readInt() != 0;
WaitResult result = startActivityAndWait(app, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
- requestCode, onlyIfNeeded, debug);
+ requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler);
reply.writeNoException();
result.writeToParcel(reply, 0);
return true;
@@ -349,8 +357,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
if (data.readInt() != 0) {
config = Configuration.CREATOR.createFromParcel(data);
}
+ boolean stopProfiling = data.readInt() != 0;
if (token != null) {
- activityIdle(token, config);
+ activityIdle(token, config, stopProfiling);
}
reply.writeNoException();
return true;
@@ -1532,6 +1541,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
return true;
}
+ case SHOW_BOOT_MESSAGE_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
+ boolean always = data.readInt() != 0;
+ showBootMessage(msg, always);
+ reply.writeNoException();
+ return true;
+ }
+
}
return super.onTransact(code, data, reply, flags);
@@ -1572,7 +1590,8 @@ class ActivityManagerProxy implements IActivityManager
String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
IBinder resultTo, String resultWho,
int requestCode, boolean onlyIfNeeded,
- boolean debug) throws RemoteException {
+ boolean debug, String profileFile, ParcelFileDescriptor profileFd,
+ boolean autoStopProfiler) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
@@ -1586,6 +1605,14 @@ class ActivityManagerProxy implements IActivityManager
data.writeInt(requestCode);
data.writeInt(onlyIfNeeded ? 1 : 0);
data.writeInt(debug ? 1 : 0);
+ data.writeString(profileFile);
+ if (profileFd != null) {
+ data.writeInt(1);
+ profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ } else {
+ data.writeInt(0);
+ }
+ data.writeInt(autoStopProfiler ? 1 : 0);
mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
reply.readException();
int result = reply.readInt();
@@ -1597,7 +1624,8 @@ class ActivityManagerProxy implements IActivityManager
String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
IBinder resultTo, String resultWho,
int requestCode, boolean onlyIfNeeded,
- boolean debug) throws RemoteException {
+ boolean debug, String profileFile, ParcelFileDescriptor profileFd,
+ boolean autoStopProfiler) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
@@ -1611,6 +1639,14 @@ class ActivityManagerProxy implements IActivityManager
data.writeInt(requestCode);
data.writeInt(onlyIfNeeded ? 1 : 0);
data.writeInt(debug ? 1 : 0);
+ data.writeString(profileFile);
+ if (profileFd != null) {
+ data.writeInt(1);
+ profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ } else {
+ data.writeInt(0);
+ }
+ data.writeInt(autoStopProfiler ? 1 : 0);
mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
reply.readException();
WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
@@ -1829,7 +1865,8 @@ class ActivityManagerProxy implements IActivityManager
data.recycle();
reply.recycle();
}
- public void activityIdle(IBinder token, Configuration config) throws RemoteException
+ public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
+ throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
@@ -1841,6 +1878,7 @@ class ActivityManagerProxy implements IActivityManager
} else {
data.writeInt(0);
}
+ data.writeInt(stopProfiling ? 1 : 0);
mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
reply.readException();
data.recycle();
@@ -3454,5 +3492,17 @@ class ActivityManagerProxy implements IActivityManager
return res;
}
+ public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ TextUtils.writeToParcel(msg, data, 0);
+ data.writeInt(always ? 1 : 0);
+ mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
+
private IBinder mRemote;
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index d5f630a647d0..e3762206588d 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -225,6 +225,10 @@ public final class ActivityThread {
Configuration createdConfig;
ActivityClientRecord nextIdle;
+ String profileFile;
+ ParcelFileDescriptor profileFd;
+ boolean autoStopProfiler;
+
ActivityInfo activityInfo;
CompatibilityInfo compatInfo;
LoadedApk packageInfo;
@@ -361,6 +365,9 @@ public final class ActivityThread {
List<ProviderInfo> providers;
ComponentName instrumentationName;
String profileFile;
+ ParcelFileDescriptor profileFd;
+ boolean autoStopProfiler;
+ boolean profiling;
Bundle instrumentationArgs;
IInstrumentationWatcher instrumentationWatcher;
int debugMode;
@@ -371,6 +378,57 @@ public final class ActivityThread {
public String toString() {
return "AppBindData{appInfo=" + appInfo + "}";
}
+ public void setProfiler(String file, ParcelFileDescriptor fd) {
+ if (profiling) {
+ if (fd != null) {
+ try {
+ fd.close();
+ } catch (IOException e) {
+ }
+ }
+ return;
+ }
+ if (profileFd != null) {
+ try {
+ profileFd.close();
+ } catch (IOException e) {
+ }
+ }
+ profileFile = file;
+ profileFd = fd;
+ }
+ public void startProfiling() {
+ if (profileFd == null || profiling) {
+ return;
+ }
+ try {
+ Debug.startMethodTracing(profileFile, profileFd.getFileDescriptor(),
+ 8 * 1024 * 1024, 0);
+ profiling = true;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Profiling failed on path " + profileFile);
+ try {
+ profileFd.close();
+ profileFd = null;
+ } catch (IOException e2) {
+ Slog.w(TAG, "Failure closing profile fd", e2);
+ }
+ }
+ }
+ public void stopProfiling() {
+ if (profiling) {
+ profiling = false;
+ Debug.stopMethodTracing();
+ if (profileFd != null) {
+ try {
+ profileFd.close();
+ } catch (IOException e) {
+ }
+ }
+ profileFd = null;
+ profileFile = null;
+ }
+ }
}
static final class DumpComponentInfo {
@@ -463,7 +521,8 @@ public final class ActivityThread {
public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
List<ResultInfo> pendingResults,
- List<Intent> pendingNewIntents, boolean notResumed, boolean isForward) {
+ List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+ String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
ActivityClientRecord r = new ActivityClientRecord();
r.token = token;
@@ -479,6 +538,10 @@ public final class ActivityThread {
r.startsNotResumed = notResumed;
r.isForward = isForward;
+ r.profileFile = profileName;
+ r.profileFd = profileFd;
+ r.autoStopProfiler = autoStopProfiler;
+
queueOrSendMessage(H.LAUNCH_ACTIVITY, r);
}
@@ -579,6 +642,7 @@ public final class ActivityThread {
public final void bindApplication(String processName,
ApplicationInfo appInfo, List<ProviderInfo> providers,
ComponentName instrumentationName, String profileFile,
+ ParcelFileDescriptor profileFd, boolean autoStopProfiler,
Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher,
int debugMode, boolean isRestrictedBackupMode, Configuration config,
CompatibilityInfo compatInfo, Map<String, IBinder> services,
@@ -596,7 +660,8 @@ public final class ActivityThread {
data.appInfo = appInfo;
data.providers = providers;
data.instrumentationName = instrumentationName;
- data.profileFile = profileFile;
+ data.setProfiler(profileFile, profileFd);
+ data.autoStopProfiler = false;
data.instrumentationArgs = instrumentationArgs;
data.instrumentationWatcher = instrumentationWatcher;
data.debugMode = debugMode;
@@ -1225,6 +1290,10 @@ public final class ActivityThread {
private class Idler implements MessageQueue.IdleHandler {
public final boolean queueIdle() {
ActivityClientRecord a = mNewActivities;
+ boolean stopProfiling = false;
+ if (mBoundApplication.profileFd != null && mBoundApplication.autoStopProfiler) {
+ stopProfiling = true;
+ }
if (a != null) {
mNewActivities = null;
IActivityManager am = ActivityManagerNative.getDefault();
@@ -1236,7 +1305,7 @@ public final class ActivityThread {
(a.activity != null && a.activity.mFinished));
if (a.activity != null && !a.activity.mFinished) {
try {
- am.activityIdle(a.token, a.createdConfig);
+ am.activityIdle(a.token, a.createdConfig, stopProfiling);
a.createdConfig = null;
} catch (RemoteException ex) {
// Ignore
@@ -1247,6 +1316,9 @@ public final class ActivityThread {
prev.nextIdle = null;
} while (a != null);
}
+ if (stopProfiling) {
+ mBoundApplication.stopProfiling();
+ }
ensureJitEnabled();
return false;
}
@@ -1560,7 +1632,8 @@ public final class ActivityThread {
}
public boolean isProfiling() {
- return mBoundApplication != null && mBoundApplication.profileFile != null;
+ return mBoundApplication != null && mBoundApplication.profileFile != null
+ && mBoundApplication.profileFd == null;
}
public String getProfileFilePath() {
@@ -1870,6 +1943,13 @@ public final class ActivityThread {
// we are back active so skip it.
unscheduleGcIdler();
+ Slog.i(TAG, "Launch: profileFd=" + r.profileFile + " stop=" + r.autoStopProfiler);
+ if (r.profileFd != null) {
+ mBoundApplication.setProfiler(r.profileFile, r.profileFd);
+ mBoundApplication.startProfiling();
+ mBoundApplication.autoStopProfiler = r.autoStopProfiler;
+ }
+
if (localLOGV) Slog.v(
TAG, "Handling launch of " + r);
Activity a = performLaunchActivity(r, customIntent);
@@ -3489,8 +3569,9 @@ public final class ActivityThread {
ViewDebug.startLooperProfiling(pcd.path, pcd.fd.getFileDescriptor());
break;
default:
- Debug.startMethodTracing(pcd.path, pcd.fd.getFileDescriptor(),
- 8 * 1024 * 1024, 0);
+ mBoundApplication.setProfiler(pcd.path, pcd.fd);
+ mBoundApplication.autoStopProfiler = false;
+ mBoundApplication.startProfiling();
break;
}
} catch (RuntimeException e) {
@@ -3509,9 +3590,8 @@ public final class ActivityThread {
ViewDebug.stopLooperProfiling();
break;
default:
- Debug.stopMethodTracing();
+ mBoundApplication.stopProfiling();
break;
-
}
}
}
@@ -3607,6 +3687,10 @@ public final class ActivityThread {
Process.setArgV0(data.processName);
android.ddm.DdmHandleAppName.setAppName(data.processName);
+ if (data.profileFd != null) {
+ data.startProfiling();
+ }
+
// If the app is Honeycomb MR1 or earlier, switch its AsyncTask
// implementation to use the pool executor. Normally, we use the
// serialized executor as the default. This has to happen in the
@@ -3745,7 +3829,8 @@ public final class ActivityThread {
mInstrumentation.init(this, instrContext, appContext,
new ComponentName(ii.packageName, ii.name), data.instrumentationWatcher);
- if (data.profileFile != null && !ii.handleProfiling) {
+ if (data.profileFile != null && !ii.handleProfiling
+ && data.profileFd == null) {
data.handlingProfiling = true;
File file = new File(data.profileFile);
file.getParentFile().mkdirs();
@@ -3799,7 +3884,8 @@ public final class ActivityThread {
/*package*/ final void finishInstrumentation(int resultCode, Bundle results) {
IActivityManager am = ActivityManagerNative.getDefault();
- if (mBoundApplication.profileFile != null && mBoundApplication.handlingProfiling) {
+ if (mBoundApplication.profileFile != null && mBoundApplication.handlingProfiling
+ && mBoundApplication.profileFd == null) {
Debug.stopMethodTracing();
}
//Slog.i(TAG, "am: " + ActivityManagerNative.getDefault()
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 4cff12f504cf..4b2a8d2bf3b1 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -41,11 +41,11 @@ import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
+import android.content.pm.ManifestDigest;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.Parcel;
import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
@@ -941,6 +941,27 @@ final class ApplicationPackageManager extends PackageManager {
}
@Override
+ public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
+ int flags, String installerPackageName, Uri verificationURI,
+ ManifestDigest manifestDigest) {
+ try {
+ mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
+ verificationURI, manifestDigest);
+ } catch (RemoteException e) {
+ // Should never happen!
+ }
+ }
+
+ @Override
+ public void verifyPendingInstall(int id, boolean verified, String failureMessage) {
+ try {
+ mPM.verifyPendingInstall(id, verified, failureMessage);
+ } catch (RemoteException e) {
+ // Should never happen!
+ }
+ }
+
+ @Override
public void setInstallerPackageName(String targetPackage,
String installerPackageName) {
try {
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index bea057eb2677..0a6fdd4af98f 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -138,8 +138,12 @@ public abstract class ApplicationThreadNative extends Binder
List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
boolean notResumed = data.readInt() != 0;
boolean isForward = data.readInt() != 0;
+ String profileName = data.readString();
+ ParcelFileDescriptor profileFd = data.readInt() != 0
+ ? data.readFileDescriptor() : null;
+ boolean autoStopProfiler = data.readInt() != 0;
scheduleLaunchActivity(intent, b, ident, info, compatInfo, state, ri, pi,
- notResumed, isForward);
+ notResumed, isForward, profileName, profileFd, autoStopProfiler);
return true;
}
@@ -255,6 +259,9 @@ public abstract class ApplicationThreadNative extends Binder
ComponentName testName = (data.readInt() != 0)
? new ComponentName(data) : null;
String profileName = data.readString();
+ ParcelFileDescriptor profileFd = data.readInt() != 0
+ ? data.readFileDescriptor() : null;
+ boolean autoStopProfiler = data.readInt() != 0;
Bundle testArgs = data.readBundle();
IBinder binder = data.readStrongBinder();
IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder);
@@ -265,7 +272,7 @@ public abstract class ApplicationThreadNative extends Binder
HashMap<String, IBinder> services = data.readHashMap(null);
Bundle coreSettings = data.readBundle();
bindApplication(packageName, info,
- providers, testName, profileName,
+ providers, testName, profileName, profileFd, autoStopProfiler,
testArgs, testWatcher, testMode, restrictedBackupMode,
config, compatInfo, services, coreSettings);
return true;
@@ -624,7 +631,8 @@ class ApplicationThreadProxy implements IApplicationThread {
public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
List<ResultInfo> pendingResults,
- List<Intent> pendingNewIntents, boolean notResumed, boolean isForward)
+ List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+ String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
@@ -638,6 +646,14 @@ class ApplicationThreadProxy implements IApplicationThread {
data.writeTypedList(pendingNewIntents);
data.writeInt(notResumed ? 1 : 0);
data.writeInt(isForward ? 1 : 0);
+ data.writeString(profileName);
+ if (profileFd != null) {
+ data.writeInt(1);
+ profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ } else {
+ data.writeInt(0);
+ }
+ data.writeInt(autoStopProfiler ? 1 : 0);
mRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null,
IBinder.FLAG_ONEWAY);
data.recycle();
@@ -793,8 +809,9 @@ class ApplicationThreadProxy implements IApplicationThread {
}
public final void bindApplication(String packageName, ApplicationInfo info,
- List<ProviderInfo> providers, ComponentName testName,
- String profileName, Bundle testArgs, IInstrumentationWatcher testWatcher, int debugMode,
+ List<ProviderInfo> providers, ComponentName testName, String profileName,
+ ParcelFileDescriptor profileFd, boolean autoStopProfiler, Bundle testArgs,
+ IInstrumentationWatcher testWatcher, int debugMode,
boolean restrictedBackupMode, Configuration config, CompatibilityInfo compatInfo,
Map<String, IBinder> services, Bundle coreSettings) throws RemoteException {
Parcel data = Parcel.obtain();
@@ -809,6 +826,13 @@ class ApplicationThreadProxy implements IApplicationThread {
testName.writeToParcel(data, 0);
}
data.writeString(profileName);
+ if (profileFd != null) {
+ data.writeInt(1);
+ profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ } else {
+ data.writeInt(0);
+ }
+ data.writeInt(autoStopProfiler ? 1 : 0);
data.writeBundle(testArgs);
data.writeStrongInterface(testWatcher);
data.writeInt(debugMode);
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index b1b0583a5d7f..27dd6916af18 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -84,11 +84,13 @@ public interface IActivityManager extends IInterface {
public int startActivity(IApplicationThread caller,
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo, String resultWho, int requestCode,
- boolean onlyIfNeeded, boolean debug) throws RemoteException;
+ boolean onlyIfNeeded, boolean debug, String profileFile,
+ ParcelFileDescriptor profileFd, boolean autoStopProfiler) throws RemoteException;
public WaitResult startActivityAndWait(IApplicationThread caller,
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo, String resultWho, int requestCode,
- boolean onlyIfNeeded, boolean debug) throws RemoteException;
+ boolean onlyIfNeeded, boolean debug, String profileFile,
+ ParcelFileDescriptor profileFd, boolean autoStopProfiler) throws RemoteException;
public int startActivityWithConfig(IApplicationThread caller,
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo, String resultWho, int requestCode,
@@ -118,7 +120,8 @@ public interface IActivityManager extends IInterface {
public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException;
public void attachApplication(IApplicationThread app) throws RemoteException;
/* oneway */
- public void activityIdle(IBinder token, Configuration config) throws RemoteException;
+ public void activityIdle(IBinder token, Configuration config,
+ boolean stopProfiling) throws RemoteException;
public void activityPaused(IBinder token) throws RemoteException;
/* oneway */
public void activityStopped(IBinder token, Bundle state,
@@ -367,6 +370,8 @@ public interface IActivityManager extends IInterface {
public long[] getProcessPss(int[] pids) throws RemoteException;
+ public void showBootMessage(CharSequence msg, boolean always) throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -596,4 +601,5 @@ public interface IActivityManager extends IInterface {
int IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+134;
int UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+135;
int GET_PROCESS_PSS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+136;
+ int SHOW_BOOT_MESSAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+137;
}
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 3a8eb285b997..9ae5ab19760b 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -55,7 +55,8 @@ public interface IApplicationThread extends IInterface {
void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
ActivityInfo info, CompatibilityInfo compatInfo, Bundle state,
List<ResultInfo> pendingResults,
- List<Intent> pendingNewIntents, boolean notResumed, boolean isForward)
+ List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+ String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
throws RemoteException;
void scheduleRelaunchActivity(IBinder token, List<ResultInfo> pendingResults,
List<Intent> pendingNewIntents, int configChanges,
@@ -86,7 +87,8 @@ public interface IApplicationThread extends IInterface {
static final int DEBUG_ON = 1;
static final int DEBUG_WAIT = 2;
void bindApplication(String packageName, ApplicationInfo info, List<ProviderInfo> providers,
- ComponentName testName, String profileName, Bundle testArguments,
+ ComponentName testName, String profileName, ParcelFileDescriptor profileFd,
+ boolean autoStopProfiler, Bundle testArguments,
IInstrumentationWatcher testWatcher, int debugMode, boolean restrictedBackupMode,
Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
Bundle coreSettings) throws RemoteException;
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index f99b42074018..f3bc495e2a91 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1379,7 +1379,7 @@ public class Instrumentation {
.startActivity(whoThread, intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
null, 0, token, target != null ? target.mEmbeddedID : null,
- requestCode, false, false);
+ requestCode, false, false, null, null, false);
checkStartActivityResult(result, intent);
} catch (RemoteException e) {
}
@@ -1475,7 +1475,7 @@ public class Instrumentation {
.startActivity(whoThread, intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
null, 0, token, target != null ? target.mWho : null,
- requestCode, false, false);
+ requestCode, false, false, null, null, false);
checkStartActivityResult(result, intent);
} catch (RemoteException e) {
}
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 1ef99a1e6845..09661a59334c 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -184,16 +184,6 @@ public class AppWidgetManager {
*/
public static final String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider";
- /**
- * Field for the manifest meta-data tag used to indicate any previous name for the
- * app widget receiver.
- *
- * @see AppWidgetProviderInfo
- *
- * @hide Pending API approval
- */
- public static final String META_DATA_APPWIDGET_OLD_NAME = "android.appwidget.oldName";
-
static WeakHashMap<Context, WeakReference<AppWidgetManager>> sManagerCache =
new WeakHashMap<Context, WeakReference<AppWidgetManager>>();
static IAppWidgetService sService;
diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java
index 9c352d58dfb2..c33681d65941 100644
--- a/core/java/android/appwidget/AppWidgetProviderInfo.java
+++ b/core/java/android/appwidget/AppWidgetProviderInfo.java
@@ -138,17 +138,6 @@ public class AppWidgetProviderInfo implements Parcelable {
public int icon;
/**
- * The previous name, if any, of the app widget receiver. If not supplied, it will be
- * ignored.
- *
- * <p>This field corresponds to the <code>&lt;meta-data /&gt;</code> with the name
- * <code>android.appwidget.oldName</code>.
- *
- * @hide Pending API approval
- */
- public String oldName;
-
- /**
* The view id of the AppWidget subview which should be auto-advanced by the widget's host.
*
* <p>This field corresponds to the <code>android:autoAdvanceViewId</code> attribute in
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 28bc424d937d..264db1917d1d 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -774,6 +774,31 @@ public final class BluetoothAdapter {
}
/**
+ * Get the current connection state of a profile.
+ * This function can be used to check whether the local Bluetooth adapter
+ * is connected to any remote device for a specific profile.
+ * Profile can be one of {@link BluetoothProfile.HEADSET},
+ * {@link BluetoothProfile.A2DP}.
+ *
+ * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
+ *
+ * <p> Return value can be one of
+ * {@link * BluetoothProfile.STATE_DISCONNECTED},
+ * {@link * BluetoothProfile.STATE_CONNECTING},
+ * {@link * BluetoothProfile.STATE_CONNECTED},
+ * {@link * BluetoothProfile.STATE_DISCONNECTING}
+ * @hide
+ */
+ public int getProfileConnectionState(int profile) {
+ if (getState() != STATE_ON) return BluetoothProfile.STATE_DISCONNECTED;
+ try {
+ return mService.getProfileConnectionState(profile);
+ } catch (RemoteException e) {Log.e(TAG, "getProfileConnectionState:", e);}
+ return BluetoothProfile.STATE_DISCONNECTED;
+ }
+
+ /**
+ /**
* Picks RFCOMM channels until none are left.
* Avoids reserved channels.
*/
diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java
index 6cd81fde7225..58b386838799 100644
--- a/core/java/android/bluetooth/BluetoothProfile.java
+++ b/core/java/android/bluetooth/BluetoothProfile.java
@@ -83,6 +83,12 @@ public interface BluetoothProfile {
public static final int PAN = 5;
/**
+ * PBAP
+ * @hide
+ */
+ public static final int PBAP = 6;
+
+ /**
* Default priority for devices that we try to auto-connect to and
* and allow incoming connections for the profile
* @hide
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index 48dfed82caad..d4e7f7d48ede 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -53,6 +53,7 @@ interface IBluetooth
byte[] readOutOfBandData();
int getAdapterConnectionState();
+ int getProfileConnectionState(int profile);
boolean changeApplicationBluetoothState(boolean on,
in IBluetoothStateChangeCallback callback, in
IBinder b);
@@ -121,5 +122,5 @@ interface IBluetooth
List<BluetoothDevice> getHealthDevicesMatchingConnectionStates(in int[] states);
int getHealthDeviceConnectionState(in BluetoothDevice device);
- void sendConnectionStateChange(in BluetoothDevice device, int state, int prevState);
+ void sendConnectionStateChange(in BluetoothDevice device, int profile, int state, int prevState);
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 2579cedac83c..8d6cee1598c5 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1530,6 +1530,18 @@ public class Intent implements Parcelable, Cloneable {
public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
/**
+ * Broadcast Action: Sent to the system package verifier when a package
+ * needs to be verified. The data contains the package URI.
+ * <p class="note">
+ * This is a protected intent that can only be sent by the system.
+ * </p>
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
+
+ /**
* Broadcast Action: Resources for a set of packages (which were
* previously unavailable) are currently
* available since the media on which they exist is available.
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 5be6ec1fff86..496da41c8bc0 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -1573,8 +1573,11 @@ public class SyncManager implements OnAccountsUpdateListener {
final Long periodInSeconds = info.periodicSyncs.get(i).second;
// find when this periodic sync was last scheduled to run
final long lastPollTimeAbsolute = status.getPeriodicSyncTime(i);
- // compute when this periodic sync should next run
- long nextPollTimeAbsolute = lastPollTimeAbsolute + periodInSeconds * 1000;
+ // compute when this periodic sync should next run - this can be in the future
+ // for example if the user changed the time, synced and changed back.
+ final long nextPollTimeAbsolute = lastPollTimeAbsolute > nowAbsolute
+ ? nowAbsolute
+ : lastPollTimeAbsolute + periodInSeconds * 1000;
// if it is ready to run then schedule it and mark it as having been scheduled
if (nextPollTimeAbsolute <= nowAbsolute) {
final Pair<Long, Long> backoff =
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 37b68222ff57..08aef16eb69c 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -30,6 +30,7 @@ import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
+import android.content.pm.ManifestDigest;
import android.content.pm.ParceledListSlice;
import android.content.pm.ProviderInfo;
import android.content.pm.PermissionGroupInfo;
@@ -319,7 +320,13 @@ interface IPackageManager {
boolean isSafeMode();
void systemReady();
boolean hasSystemUidErrors();
-
+
+ /**
+ * Ask the package manager to perform boot-time dex-opt of all
+ * existing packages.
+ */
+ void performBootDexOpt();
+
/**
* Ask the package manager to perform dex-opt (if needed) on the given
* package, if it already hasn't done mode. Only does this if running
@@ -346,4 +353,10 @@ interface IPackageManager {
UserInfo createUser(in String name, int flags);
boolean removeUser(int userId);
+
+ void installPackageWithVerification(in Uri packageURI, in IPackageInstallObserver observer,
+ int flags, in String installerPackageName, in Uri verificationURI,
+ in ManifestDigest manifestDigest);
+
+ void verifyPendingInstall(int id, boolean verified, in String message);
}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index dd684cd0cf5e..5c641f10b753 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
+import android.content.pm.ManifestDigest;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
@@ -289,11 +290,19 @@ public abstract class PackageManager {
public static final int INSTALL_EXTERNAL = 0x00000008;
/**
- * Flag parameter for {@link #installPackage} to indicate that this
- * package has to be installed on the sdcard.
- * @hide
- */
- public static final int INSTALL_INTERNAL = 0x00000010;
+ * Flag parameter for {@link #installPackage} to indicate that this package
+ * has to be installed on the sdcard.
+ * @hide
+ */
+ public static final int INSTALL_INTERNAL = 0x00000010;
+
+ /**
+ * Flag parameter for {@link #installPackage} to indicate that this install
+ * was initiated via ADB.
+ *
+ * @hide
+ */
+ public static final int INSTALL_FROM_ADB = 0x00000020;
/**
* Flag parameter for
@@ -483,6 +492,30 @@ public abstract class PackageManager {
public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
/**
+ * Installation return code: this is passed to the {@link IPackageInstallObserver} by
+ * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
+ * the new package couldn't be installed because the verification timed out.
+ * @hide
+ */
+ public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
+
+ /**
+ * Installation return code: this is passed to the {@link IPackageInstallObserver} by
+ * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
+ * the new package couldn't be installed because the verification did not succeed.
+ * @hide
+ */
+ public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
+
+ /**
+ * Installation return code: this is passed to the {@link IPackageInstallObserver} by
+ * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
+ * the package changed from what the calling program expected.
+ * @hide
+ */
+ public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
+
+ /**
* Installation parse return code: this is passed to the {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* if the parser was given a path that is not a file, or does not end with the expected
@@ -995,35 +1028,63 @@ public abstract class PackageManager {
= "android.content.pm.CLEAN_EXTERNAL_STORAGE";
/**
+ * Extra field name for the URI to a verification file. Passed to a package
+ * verifier.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI";
+
+ /**
+ * Extra field name for the ID of a package pending verification. Passed to
+ * a package verifier and is used to call back to
+ * {@link PackageManager#verifyPendingInstall(int, boolean)}
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
+
+ /**
+ * Extra field name for the package identifier which is trying to install
+ * the package.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE
+ = "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE";
+
+ /**
+ * Extra field name for the requested install flags for a package pending
+ * verification. Passed to a package verifier.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
+ = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
+
+ /**
* Retrieve overall information about an application package that is
* installed on the system.
- *
- * <p>Throws {@link NameNotFoundException} if a package with the given
- * name can not be found on the system.
+ * <p>
+ * Throws {@link NameNotFoundException} if a package with the given name can
+ * not be found on the system.
*
* @param packageName The full name (i.e. com.google.apps.contacts) of the
- * desired package.
-
+ * desired package.
* @param flags Additional option flags. Use any combination of
- * {@link #GET_ACTIVITIES},
- * {@link #GET_GIDS},
- * {@link #GET_CONFIGURATIONS},
- * {@link #GET_INSTRUMENTATION},
- * {@link #GET_PERMISSIONS},
- * {@link #GET_PROVIDERS},
- * {@link #GET_RECEIVERS},
- * {@link #GET_SERVICES},
- * {@link #GET_SIGNATURES},
- * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned.
- *
- * @return Returns a PackageInfo object containing information about the package.
- * If flag GET_UNINSTALLED_PACKAGES is set and if the package is not
- * found in the list of installed applications, the package information is
- * retrieved from the list of uninstalled applications(which includes
- * installed applications as well as applications
- * with data directory ie applications which had been
+ * {@link #GET_ACTIVITIES}, {@link #GET_GIDS},
+ * {@link #GET_CONFIGURATIONS}, {@link #GET_INSTRUMENTATION},
+ * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
+ * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
+ * {@link #GET_SIGNATURES}, {@link #GET_UNINSTALLED_PACKAGES} to
+ * modify the data returned.
+ * @return Returns a PackageInfo object containing information about the
+ * package. If flag GET_UNINSTALLED_PACKAGES is set and if the
+ * package is not found in the list of installed applications, the
+ * package information is retrieved from the list of uninstalled
+ * applications(which includes installed applications as well as
+ * applications with data directory ie applications which had been
* deleted with DONT_DELTE_DATA flag set).
- *
* @see #GET_ACTIVITIES
* @see #GET_GIDS
* @see #GET_CONFIGURATIONS
@@ -1034,7 +1095,6 @@ public abstract class PackageManager {
* @see #GET_SERVICES
* @see #GET_SIGNATURES
* @see #GET_UNINSTALLED_PACKAGES
- *
*/
public abstract PackageInfo getPackageInfo(String packageName, int flags)
throws NameNotFoundException;
@@ -2061,6 +2121,46 @@ public abstract class PackageManager {
String installerPackageName);
/**
+ * Similar to
+ * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
+ * with an extra verification file provided.
+ *
+ * @param packageURI The location of the package file to install. This can
+ * be a 'file:' or a 'content:' URI.
+ * @param observer An observer callback to get notified when the package
+ * installation is complete.
+ * {@link IPackageInstallObserver#packageInstalled(String, int)}
+ * will be called when that happens. observer may be null to
+ * indicate that no callback is desired.
+ * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
+ * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
+ * .
+ * @param installerPackageName Optional package name of the application that
+ * is performing the installation. This identifies which market
+ * the package came from.
+ * @param verificationURI The location of the supplementary verification
+ * file. This can be a 'file:' or a 'content:' URI.
+ * @hide
+ */
+ public abstract void installPackageWithVerification(Uri packageURI,
+ IPackageInstallObserver observer, int flags, String installerPackageName,
+ Uri verificationURI, ManifestDigest manifestDigest);
+
+ /**
+ * Allows a package listening to the
+ * {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
+ * broadcast} to respond to the package manager.
+ *
+ * @param id pending package identifier as passed via the
+ * {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
+ * @param verified whether the package was verified as valid
+ * @param failureMessage if verification was false, this is the error
+ * message that may be shown to the user
+ * @hide
+ */
+ public abstract void verifyPendingInstall(int id, boolean verified, String failureMessage);
+
+ /**
* Change the installer associated with a given package. There are limitations
* on how the installer package can be changed; in particular:
* <ul>
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index 74e756bbe5a2..bcd599b42422 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -113,7 +113,12 @@ public class ResolveInfo implements Parcelable {
* containing the resolved component.
*/
public String resolvePackageName;
-
+
+ /**
+ * @hide Target comes from system process?
+ */
+ public boolean system;
+
/**
* Retrieve the current textual label associated with this resolution. This
* will call back on the given PackageManager to load the label from
@@ -261,6 +266,7 @@ public class ResolveInfo implements Parcelable {
TextUtils.writeToParcel(nonLocalizedLabel, dest, parcelableFlags);
dest.writeInt(icon);
dest.writeString(resolvePackageName);
+ dest.writeInt(system ? 1 : 0);
}
public static final Creator<ResolveInfo> CREATOR
@@ -300,6 +306,7 @@ public class ResolveInfo implements Parcelable {
= TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
icon = source.readInt();
resolvePackageName = source.readString();
+ system = source.readInt() != 0;
}
public static class DisplayNameComparator
diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java
index b32664eefc3c..c6aefb87c723 100644
--- a/core/java/android/content/pm/Signature.java
+++ b/core/java/android/content/pm/Signature.java
@@ -16,7 +16,6 @@
package android.content.pm;
-import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
@@ -40,26 +39,41 @@ public class Signature implements Parcelable {
mSignature = signature.clone();
}
+ private static final int parseHexDigit(int nibble) {
+ if ('0' <= nibble && nibble <= '9') {
+ return nibble - '0';
+ } else if ('a' <= nibble && nibble <= 'f') {
+ return nibble - 'a' + 10;
+ } else if ('A' <= nibble && nibble <= 'F') {
+ return nibble - 'A' + 10;
+ } else {
+ throw new IllegalArgumentException("Invalid character " + nibble + " in hex string");
+ }
+ }
+
/**
* Create Signature from a text representation previously returned by
- * {@link #toChars} or {@link #toCharsString()}.
+ * {@link #toChars} or {@link #toCharsString()}. Signatures are expected to
+ * be a hex-encoded ASCII string.
+ *
+ * @param text hex-encoded string representing the signature
+ * @throws IllegalArgumentException when signature is odd-length
*/
public Signature(String text) {
final byte[] input = text.getBytes();
final int N = input.length;
+
+ if (N % 2 != 0) {
+ throw new IllegalArgumentException("text size " + N + " is not even");
+ }
+
final byte[] sig = new byte[N / 2];
int sigIndex = 0;
for (int i = 0; i < N;) {
- int b;
-
- final int hi = input[i++];
- b = (hi >= 'a' ? (hi - 'a' + 10) : (hi - '0')) << 4;
-
- final int lo = input[i++];
- b |= (lo >= 'a' ? (lo - 'a' + 10) : (lo - '0')) & 0x0F;
-
- sig[sigIndex++] = (byte) (b & 0xFF);
+ final int hi = parseHexDigit(input[i++]);
+ final int lo = parseHexDigit(input[i++]);
+ sig[sigIndex++] = (byte) ((hi << 4) | lo);
}
mSignature = sig;
@@ -100,8 +114,7 @@ public class Signature implements Parcelable {
}
/**
- * Return the result of {@link #toChars()} as a String. This result is
- * cached so future calls will return the same String.
+ * Return the result of {@link #toChars()} as a String.
*/
public String toCharsString() {
String str = mStringRef == null ? null : mStringRef.get();
@@ -127,7 +140,7 @@ public class Signature implements Parcelable {
try {
if (obj != null) {
Signature other = (Signature)obj;
- return Arrays.equals(mSignature, other.mSignature);
+ return this == other || Arrays.equals(mSignature, other.mSignature);
}
} catch (ClassCastException e) {
}
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index e2befca4a2c2..56cf94832cda 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -100,6 +100,14 @@ public abstract class SQLiteOpenHelper {
}
/**
+ * Return the name of the SQLite database being opened, as given tp
+ * the constructor.
+ */
+ public String getDatabaseName() {
+ return mName;
+ }
+
+ /**
* Create and/or open a database that will be used for reading and writing.
* The first time this is called, the database will be opened and
* {@link #onCreate}, {@link #onUpgrade} and/or {@link #onOpen} will be
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index cab84578df4a..08bb133b9eb2 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1162,6 +1162,43 @@ public class Camera {
* @see #startFaceDetection(int)
*/
public int score;
+
+ /**
+ * An unique id per face while the face is visible to the tracker. If
+ * the face leaves the field-of-view and comes back, it will get a new
+ * id. This is an optional field, may not be supported on all devices.
+ * If not supported, id will always be set to -1. The optional fields
+ * are supported as a set. Either they are all valid, or none of them
+ * are.
+ */
+ public int id = -1;
+
+ /**
+ * The coordinates of the center of the left eye. The coordinates are in
+ * the same space as the ones for {@link #rect}. This is an optional
+ * field, may not be supported on all devices. If not supported, the
+ * value will always be set to null. The optional fields are supported
+ * as a set. Either they are all valid, or none of them are.
+ */
+ public Point leftEye = null;
+
+ /**
+ * The coordinates of the center of the right eye. The coordinates are
+ * in the same space as the ones for {@link #rect}.This is an optional
+ * field, may not be supported on all devices. If not supported, the
+ * value will always be set to null. The optional fields are supported
+ * as a set. Either they are all valid, or none of them are.
+ */
+ public Point rightEye = null;
+
+ /**
+ * The coordinates of the center of the mouth. The coordinates are in
+ * the same space as the ones for {@link #rect}. This is an optional
+ * field, may not be supported on all devices. If not supported, the
+ * value will always be set to null. The optional fields are supported
+ * as a set. Either they are all valid, or none of them are.
+ */
+ public Point mouth = null;
}
// Error codes match the enum in include/ui/Camera.h
@@ -1613,17 +1650,34 @@ public class Camera {
/**
* Continuous auto focus mode intended for video recording. The camera
- * continuously tries to focus. This is ideal for shooting video.
- * Applications still can call {@link
- * #takePicture(Camera.ShutterCallback, Camera.PictureCallback,
- * Camera.PictureCallback)} in this mode but the subject may not be in
- * focus. Auto focus starts when the parameter is set. Applications
- * should not call {@link #autoFocus(AutoFocusCallback)} in this mode.
- * To stop continuous focus, applications should change the focus mode
- * to other modes.
+ * continuously tries to focus. This is the best choice for video
+ * recording because the focus changes smoothly . Applications still can
+ * call {@link #takePicture(Camera.ShutterCallback,
+ * Camera.PictureCallback, Camera.PictureCallback)} in this mode but the
+ * subject may not be in focus. Auto focus starts when the parameter is
+ * set. Applications should not call {@link
+ * #autoFocus(AutoFocusCallback)} in this mode. To stop continuous
+ * focus, applications should change the focus mode to other modes.
*/
public static final String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video";
+ /**
+ * Continuous auto focus mode intended for taking pictures. The camera
+ * continuously tries to focus. The speed of focus change is more
+ * aggressive than {@link #FOCUS_MODE_CONTINUOUS_VIDEO}. Auto focus
+ * starts when the parameter is set. If applications call {@link
+ * #autoFocus(AutoFocusCallback)} in this mode, the focus callback will
+ * immediately return with a boolean that indicates whether the focus is
+ * sharp or not. The apps can then decide if they want to take a picture
+ * immediately or to change the focus mode to auto, and run a full
+ * autofocus cycle. To stop continuous focus, applications should change
+ * the focus mode to other modes.
+ *
+ * @see #FOCUS_MODE_CONTINUOUS_VIDEO
+ * @hide
+ */
+ public static final String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture";
+
// Indices for focus distance array.
/**
* The array index of near focus distance for use with
@@ -2389,13 +2443,16 @@ public class Camera {
}
/**
- * Sets the white balance.
+ * Sets the white balance. Changing the setting will release the
+ * auto-white balance lock.
*
* @param value new white balance.
* @see #getWhiteBalance()
+ * @see #setAutoWhiteBalanceLock()
*/
public void setWhiteBalance(String value) {
set(KEY_WHITE_BALANCE, value);
+ set(KEY_AUTO_WHITEBALANCE_LOCK, FALSE);
}
/**
@@ -2806,6 +2863,9 @@ public class Camera {
* set the lock to false. However, the lock can be re-enabled before
* preview is re-started to keep the same white balance parameters.</p>
*
+ * <p> Changing the white balance mode with {@link #setWhiteBalance}
+ * will release the auto-white balance lock if it is set.</p>
+ *
* <p>Exposure compensation, in conjunction with re-enabling the AE and
* AWB locks after each still capture, can be used to capture an
* exposure-bracketed burst of images, for example. Auto-white balance
@@ -2828,6 +2888,7 @@ public class Camera {
* auto-white balance routine is free to run normally.
*
* @see #getAutoWhiteBalanceLock()
+ * @see #setWhiteBalance(String)
*/
public void setAutoWhiteBalanceLock(boolean toggle) {
set(KEY_AUTO_WHITEBALANCE_LOCK, toggle ? TRUE : FALSE);
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index dfc70ef416af..05444f628ffe 100644
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -28,6 +28,7 @@ import android.graphics.Paint.Align;
import android.graphics.Region.Op;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.Keyboard.Key;
+import android.media.AudioManager;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
@@ -39,6 +40,8 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup.LayoutParams;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.widget.PopupWindow;
import android.widget.TextView;
@@ -175,7 +178,6 @@ public class KeyboardView extends View implements View.OnClickListener {
private boolean mShowTouchPoints = true;
private int mPopupPreviewX;
private int mPopupPreviewY;
- private int mWindowY;
private int mLastX;
private int mLastY;
@@ -242,7 +244,11 @@ public class KeyboardView extends View implements View.OnClickListener {
private boolean mKeyboardChanged;
/** The canvas for the above mutable keyboard bitmap */
private Canvas mCanvas;
-
+ /** The accessibility manager for accessibility support */
+ private AccessibilityManager mAccessibilityManager;
+ /** The audio manager for accessibility support */
+ private AudioManager mAudioManager;
+
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -362,6 +368,10 @@ public class KeyboardView extends View implements View.OnClickListener {
mSwipeThreshold = (int) (500 * getResources().getDisplayMetrics().density);
mDisambiguateSwipe = getResources().getBoolean(
com.android.internal.R.bool.config_swipeDisambiguation);
+
+ mAccessibilityManager = AccessibilityManager.getInstance(context);
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+
resetMultiTap();
initGestureDetector();
}
@@ -835,12 +845,16 @@ public class KeyboardView extends View implements View.OnClickListener {
final Key[] keys = mKeys;
if (oldKeyIndex != mCurrentKeyIndex) {
if (oldKeyIndex != NOT_A_KEY && keys.length > oldKeyIndex) {
- keys[oldKeyIndex].onReleased(mCurrentKeyIndex == NOT_A_KEY);
+ Key oldKey = keys[oldKeyIndex];
+ oldKey.onReleased(mCurrentKeyIndex == NOT_A_KEY);
invalidateKey(oldKeyIndex);
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT, oldKey.codes[0]);
}
if (mCurrentKeyIndex != NOT_A_KEY && keys.length > mCurrentKeyIndex) {
- keys[mCurrentKeyIndex].onPressed();
+ Key newKey = keys[mCurrentKeyIndex];
+ newKey.onPressed();
invalidateKey(mCurrentKeyIndex);
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER, newKey.codes[0]);
}
}
// If key changed and preview is on ...
@@ -940,6 +954,47 @@ public class KeyboardView extends View implements View.OnClickListener {
mPreviewText.setVisibility(VISIBLE);
}
+ private void sendAccessibilityEvent(int eventType, int code) {
+ if (mAccessibilityManager.isEnabled()) {
+ AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
+ onInitializeAccessibilityEvent(event);
+ // Add text only if headset is used to avoid leaking passwords.
+ if (mAudioManager.isBluetoothA2dpOn() || mAudioManager.isWiredHeadsetOn()) {
+ String text = null;
+ switch (code) {
+ case Keyboard.KEYCODE_ALT:
+ text = mContext.getString(R.string.keyboardview_keycode_alt);
+ break;
+ case Keyboard.KEYCODE_CANCEL:
+ text = mContext.getString(R.string.keyboardview_keycode_cancel);
+ break;
+ case Keyboard.KEYCODE_DELETE:
+ text = mContext.getString(R.string.keyboardview_keycode_delete);
+ break;
+ case Keyboard.KEYCODE_DONE:
+ text = mContext.getString(R.string.keyboardview_keycode_done);
+ break;
+ case Keyboard.KEYCODE_MODE_CHANGE:
+ text = mContext.getString(R.string.keyboardview_keycode_mode_change);
+ break;
+ case Keyboard.KEYCODE_SHIFT:
+ text = mContext.getString(R.string.keyboardview_keycode_shift);
+ break;
+ case '\n':
+ text = mContext.getString(R.string.keyboardview_keycode_enter);
+ break;
+ default:
+ text = String.valueOf((char) code);
+ }
+ event.getText().add(text);
+ } else {
+ event.getText().add(mContext.getString(
+ R.string.keyboard_headset_required_to_hear_password));
+ }
+ mAccessibilityManager.sendAccessibilityEvent(event);
+ }
+ }
+
/**
* Requests a redraw of the entire keyboard. Calling {@link #invalidate} is not sufficient
* because the keyboard renders the keys to an off-screen buffer and an invalidate() only
@@ -1074,11 +1129,49 @@ public class KeyboardView extends View implements View.OnClickListener {
return false;
}
- private long mOldEventTime;
- private boolean mUsedVelocity;
+ @Override
+ protected boolean dispatchHoverEvent(MotionEvent event) {
+ // If touch exploring is enabled we ignore touch events and transform
+ // the stream of hover events as touch events. This allows one consistent
+ // event stream to drive the keyboard since during touch exploring the
+ // first touch generates only hover events and tapping on the same
+ // location generates hover and touch events.
+ if (mAccessibilityManager.isEnabled()
+ && mAccessibilityManager.isTouchExplorationEnabled()
+ && event.getPointerCount() == 1) {
+ final int action = event.getAction();
+ switch (action) {
+ case MotionEvent.ACTION_HOVER_ENTER:
+ event.setAction(MotionEvent.ACTION_DOWN);
+ break;
+ case MotionEvent.ACTION_HOVER_MOVE:
+ event.setAction(MotionEvent.ACTION_MOVE);
+ break;
+ case MotionEvent.ACTION_HOVER_EXIT:
+ event.setAction(MotionEvent.ACTION_UP);
+ break;
+ }
+ onTouchEventInternal(event);
+ return true;
+ }
+ return super.dispatchHoverEvent(event);
+ }
@Override
- public boolean onTouchEvent(MotionEvent me) {
+ public boolean onTouchEvent(MotionEvent event) {
+ // If touch exploring is enabled we ignore touch events and transform
+ // the stream of hover events as touch events. This allows one consistent
+ // event stream to drive the keyboard since during touch exploring the
+ // first touch generates only hover events and tapping on the same
+ // location generates hover and touch events.
+ if (mAccessibilityManager.isEnabled()
+ && mAccessibilityManager.isTouchExplorationEnabled()) {
+ return true;
+ }
+ return onTouchEventInternal(event);
+ }
+
+ private boolean onTouchEventInternal(MotionEvent me) {
// Convert multi-pointer up/down events to single up/down events to
// deal with the typical multi-pointer behavior of two-thumb typing
final int pointerCount = me.getPointerCount();
@@ -1126,7 +1219,6 @@ public class KeyboardView extends View implements View.OnClickListener {
touchY += mVerticalCorrection;
final int action = me.getAction();
final long eventTime = me.getEventTime();
- mOldEventTime = eventTime;
int keyIndex = getKeyIndices(touchX, touchY, null);
mPossiblePoly = possiblePoly;
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index eb9cd213dd8e..9c96883e9000 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -21,6 +21,7 @@ import static com.android.internal.util.Preconditions.checkNotNull;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.os.Binder;
+import android.os.Build.VERSION_CODES;
import android.os.RemoteException;
import java.net.InetAddress;
@@ -260,11 +261,18 @@ public class ConnectivityManager {
*/
public static final int TYPE_MOBILE_CBS = 12;
+ /**
+ * A Wi-Fi p2p connection. Only requesting processes will have access to
+ * the peers connected.
+ * {@hide}
+ */
+ public static final int TYPE_WIFI_P2P = 13;
+
/** {@hide} */
- public static final int MAX_RADIO_TYPE = TYPE_MOBILE_CBS;
+ public static final int MAX_RADIO_TYPE = TYPE_WIFI_P2P;
/** {@hide} */
- public static final int MAX_NETWORK_TYPE = TYPE_MOBILE_CBS;
+ public static final int MAX_NETWORK_TYPE = TYPE_WIFI_P2P;
public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
@@ -303,6 +311,8 @@ public class ConnectivityManager {
return "MOBILE_IMS";
case TYPE_MOBILE_CBS:
return "MOBILE_CBS";
+ case TYPE_WIFI_P2P:
+ return "WIFI_P2P";
default:
return Integer.toString(type);
}
@@ -494,16 +504,19 @@ public class ConnectivityManager {
* <p>
* All applications that have background services that use the network
* should listen to {@link #ACTION_BACKGROUND_DATA_SETTING_CHANGED}.
+ * <p>
+ * As of {@link VERSION_CODES#ICE_CREAM_SANDWICH}, availability of
+ * background data depends on several combined factors, and this method will
+ * always return {@code true}. Instead, when background data is unavailable,
+ * {@link #getActiveNetworkInfo()} will now appear disconnected.
*
* @return Whether background data usage is allowed.
*/
+ @Deprecated
public boolean getBackgroundDataSetting() {
- try {
- return mService.getBackgroundDataSetting();
- } catch (RemoteException e) {
- // Err on the side of safety
- return false;
- }
+ // assume that background data is allowed; final authority is
+ // NetworkInfo which may be blocked.
+ return true;
}
/**
@@ -516,11 +529,9 @@ public class ConnectivityManager {
* @see #getBackgroundDataSetting()
* @hide
*/
+ @Deprecated
public void setBackgroundDataSetting(boolean allowBackgroundData) {
- try {
- mService.setBackgroundDataSetting(allowBackgroundData);
- } catch (RemoteException e) {
- }
+ // ignored
}
/**
diff --git a/core/java/android/net/DhcpInfoInternal.java b/core/java/android/net/DhcpInfoInternal.java
index 860da0a335a9..9b0a2d7056fb 100644
--- a/core/java/android/net/DhcpInfoInternal.java
+++ b/core/java/android/net/DhcpInfoInternal.java
@@ -100,7 +100,8 @@ public class DhcpInfoInternal {
if (TextUtils.isEmpty(dns1) == false) {
p.addDns(NetworkUtils.numericToInetAddress(dns1));
} else {
- Log.d(TAG, "makeLinkProperties with empty dns1!");
+ p.addDns(NetworkUtils.numericToInetAddress(serverAddress));
+ Log.d(TAG, "empty dns1, use dhcp server as dns1!");
}
if (TextUtils.isEmpty(dns2) == false) {
p.addDns(NetworkUtils.numericToInetAddress(dns2));
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index f3912005a667..1b95b60a536d 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -63,10 +63,6 @@ interface IConnectivityManager
boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);
- boolean getBackgroundDataSetting();
-
- void setBackgroundDataSetting(boolean allowBackgroundData);
-
boolean getMobileDataEnabled();
void setMobileDataEnabled(boolean enabled);
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index b65506c411e8..0e883cf8ac55 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -26,7 +26,7 @@ interface INetworkStatsService {
/** Return historical network layer stats for traffic that matches template. */
NetworkStatsHistory getHistoryForNetwork(in NetworkTemplate template, int fields);
/** Return historical network layer stats for specific UID traffic that matches template. */
- NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int tag, int fields);
+ NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
/** Return network layer usage summary for traffic that matches template. */
NetworkStats getSummaryForNetwork(in NetworkTemplate template, long start, long end);
@@ -38,6 +38,8 @@ interface INetworkStatsService {
/** Increment data layer count of operations performed for UID and tag. */
void incrementOperationCount(int uid, int tag, int operationCount);
+ /** Mark given UID as being in foreground for stats purposes. */
+ void setUidForeground(int uid, boolean uidForeground);
/** Force update of statistics. */
void forceUpdate();
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index f2fcb8fad852..272545d0dc5d 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -42,7 +42,13 @@ public class NetworkStats implements Parcelable {
public static final String IFACE_ALL = null;
/** {@link #uid} value when UID details unavailable. */
public static final int UID_ALL = -1;
- /** {@link #tag} value for without tag. */
+ /** {@link #set} value when all sets combined. */
+ public static final int SET_ALL = -1;
+ /** {@link #set} value where background data is accounted. */
+ public static final int SET_DEFAULT = 0;
+ /** {@link #set} value where foreground data is accounted. */
+ public static final int SET_FOREGROUND = 1;
+ /** {@link #tag} value for total data across all tags. */
public static final int TAG_NONE = 0;
/**
@@ -53,6 +59,7 @@ public class NetworkStats implements Parcelable {
private int size;
private String[] iface;
private int[] uid;
+ private int[] set;
private int[] tag;
private long[] rxBytes;
private long[] rxPackets;
@@ -63,6 +70,7 @@ public class NetworkStats implements Parcelable {
public static class Entry {
public String iface;
public int uid;
+ public int set;
public int tag;
public long rxBytes;
public long rxPackets;
@@ -71,17 +79,19 @@ public class NetworkStats implements Parcelable {
public long operations;
public Entry() {
- this(IFACE_ALL, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
+ this(IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
}
public Entry(long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) {
- this(IFACE_ALL, UID_ALL, TAG_NONE, rxBytes, rxPackets, txBytes, txPackets, operations);
+ this(IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, rxBytes, rxPackets, txBytes, txPackets,
+ operations);
}
- public Entry(String iface, int uid, int tag, long rxBytes, long rxPackets, long txBytes,
- long txPackets, long operations) {
+ public Entry(String iface, int uid, int set, int tag, long rxBytes, long rxPackets,
+ long txBytes, long txPackets, long operations) {
this.iface = iface;
this.uid = uid;
+ this.set = set;
this.tag = tag;
this.rxBytes = rxBytes;
this.rxPackets = rxPackets;
@@ -96,6 +106,7 @@ public class NetworkStats implements Parcelable {
this.size = 0;
this.iface = new String[initialSize];
this.uid = new int[initialSize];
+ this.set = new int[initialSize];
this.tag = new int[initialSize];
this.rxBytes = new long[initialSize];
this.rxPackets = new long[initialSize];
@@ -109,6 +120,7 @@ public class NetworkStats implements Parcelable {
size = parcel.readInt();
iface = parcel.createStringArray();
uid = parcel.createIntArray();
+ set = parcel.createIntArray();
tag = parcel.createIntArray();
rxBytes = parcel.createLongArray();
rxPackets = parcel.createLongArray();
@@ -123,6 +135,7 @@ public class NetworkStats implements Parcelable {
dest.writeInt(size);
dest.writeStringArray(iface);
dest.writeIntArray(uid);
+ dest.writeIntArray(set);
dest.writeIntArray(tag);
dest.writeLongArray(rxBytes);
dest.writeLongArray(rxPackets);
@@ -131,15 +144,18 @@ public class NetworkStats implements Parcelable {
dest.writeLongArray(operations);
}
- public NetworkStats addValues(String iface, int uid, int tag, long rxBytes, long rxPackets,
- long txBytes, long txPackets) {
- return addValues(iface, uid, tag, rxBytes, rxPackets, txBytes, txPackets, 0L);
+ // @VisibleForTesting
+ public NetworkStats addIfaceValues(
+ String iface, long rxBytes, long rxPackets, long txBytes, long txPackets) {
+ return addValues(
+ iface, UID_ALL, SET_DEFAULT, TAG_NONE, rxBytes, rxPackets, txBytes, txPackets, 0L);
}
- public NetworkStats addValues(String iface, int uid, int tag, long rxBytes, long rxPackets,
- long txBytes, long txPackets, long operations) {
- return addValues(
- new Entry(iface, uid, tag, rxBytes, rxPackets, txBytes, txPackets, operations));
+ // @VisibleForTesting
+ public NetworkStats addValues(String iface, int uid, int set, int tag, long rxBytes,
+ long rxPackets, long txBytes, long txPackets, long operations) {
+ return addValues(new Entry(
+ iface, uid, set, tag, rxBytes, rxPackets, txBytes, txPackets, operations));
}
/**
@@ -151,6 +167,7 @@ public class NetworkStats implements Parcelable {
final int newLength = Math.max(iface.length, 10) * 3 / 2;
iface = Arrays.copyOf(iface, newLength);
uid = Arrays.copyOf(uid, newLength);
+ set = Arrays.copyOf(set, newLength);
tag = Arrays.copyOf(tag, newLength);
rxBytes = Arrays.copyOf(rxBytes, newLength);
rxPackets = Arrays.copyOf(rxPackets, newLength);
@@ -161,6 +178,7 @@ public class NetworkStats implements Parcelable {
iface[size] = entry.iface;
uid[size] = entry.uid;
+ set[size] = entry.set;
tag[size] = entry.tag;
rxBytes[size] = entry.rxBytes;
rxPackets[size] = entry.rxPackets;
@@ -179,6 +197,7 @@ public class NetworkStats implements Parcelable {
final Entry entry = recycle != null ? recycle : new Entry();
entry.iface = iface[i];
entry.uid = uid[i];
+ entry.set = set[i];
entry.tag = tag[i];
entry.rxBytes = rxBytes[i];
entry.rxPackets = rxPackets[i];
@@ -201,19 +220,26 @@ public class NetworkStats implements Parcelable {
return iface.length;
}
+ @Deprecated
public NetworkStats combineValues(String iface, int uid, int tag, long rxBytes, long rxPackets,
long txBytes, long txPackets, long operations) {
return combineValues(
- new Entry(iface, uid, tag, rxBytes, rxPackets, txBytes, txPackets, operations));
+ iface, uid, SET_DEFAULT, tag, rxBytes, rxPackets, txBytes, txPackets, operations);
+ }
+
+ public NetworkStats combineValues(String iface, int uid, int set, int tag, long rxBytes,
+ long rxPackets, long txBytes, long txPackets, long operations) {
+ return combineValues(new Entry(
+ iface, uid, set, tag, rxBytes, rxPackets, txBytes, txPackets, operations));
}
/**
* Combine given values with an existing row, or create a new row if
- * {@link #findIndex(String, int, int)} is unable to find match. Can also be
- * used to subtract values from existing rows.
+ * {@link #findIndex(String, int, int, int)} is unable to find match. Can
+ * also be used to subtract values from existing rows.
*/
public NetworkStats combineValues(Entry entry) {
- final int i = findIndex(entry.iface, entry.uid, entry.tag);
+ final int i = findIndex(entry.iface, entry.uid, entry.set, entry.tag);
if (i == -1) {
// only create new entry when positive contribution
addValues(entry);
@@ -230,9 +256,10 @@ public class NetworkStats implements Parcelable {
/**
* Find first stats index that matches the requested parameters.
*/
- public int findIndex(String iface, int uid, int tag) {
+ public int findIndex(String iface, int uid, int set, int tag) {
for (int i = 0; i < size; i++) {
- if (Objects.equal(iface, this.iface[i]) && uid == this.uid[i] && tag == this.tag[i]) {
+ if (Objects.equal(iface, this.iface[i]) && uid == this.uid[i] && set == this.set[i]
+ && tag == this.tag[i]) {
return i;
}
}
@@ -246,7 +273,7 @@ public class NetworkStats implements Parcelable {
*/
public void spliceOperationsFrom(NetworkStats stats) {
for (int i = 0; i < size; i++) {
- final int j = stats.findIndex(IFACE_ALL, uid[i], tag[i]);
+ final int j = stats.findIndex(IFACE_ALL, uid[i], set[i], tag[i]);
if (j == -1) {
operations[i] = 0;
} else {
@@ -332,10 +359,11 @@ public class NetworkStats implements Parcelable {
for (int i = 0; i < size; i++) {
entry.iface = iface[i];
entry.uid = uid[i];
+ entry.set = set[i];
entry.tag = tag[i];
// find remote row that matches, and subtract
- final int j = value.findIndex(entry.iface, entry.uid, entry.tag);
+ final int j = value.findIndex(entry.iface, entry.uid, entry.set, entry.tag);
if (j == -1) {
// newly appearing row, return entire value
entry.rxBytes = rxBytes[i];
@@ -377,7 +405,8 @@ public class NetworkStats implements Parcelable {
pw.print(prefix);
pw.print(" iface="); pw.print(iface[i]);
pw.print(" uid="); pw.print(uid[i]);
- pw.print(" tag=0x"); pw.print(Integer.toHexString(tag[i]));
+ pw.print(" set="); pw.print(setToString(set[i]));
+ pw.print(" tag="); pw.print(tagToString(tag[i]));
pw.print(" rxBytes="); pw.print(rxBytes[i]);
pw.print(" rxPackets="); pw.print(rxPackets[i]);
pw.print(" txBytes="); pw.print(txBytes[i]);
@@ -386,6 +415,29 @@ public class NetworkStats implements Parcelable {
}
}
+ /**
+ * Return text description of {@link #set} value.
+ */
+ public static String setToString(int set) {
+ switch (set) {
+ case SET_ALL:
+ return "ALL";
+ case SET_DEFAULT:
+ return "DEFAULT";
+ case SET_FOREGROUND:
+ return "FOREGROUND";
+ default:
+ return "UNKNOWN";
+ }
+ }
+
+ /**
+ * Return text description of {@link #tag} value.
+ */
+ public static String tagToString(int tag) {
+ return "0x" + Integer.toHexString(tag);
+ }
+
@Override
public String toString() {
final CharArrayWriter writer = new CharArrayWriter();
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index 4ba44cac296f..b4f15acff1c9 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -17,6 +17,7 @@
package android.net;
import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
import static android.net.NetworkStatsHistory.DataStreamUtils.readFullLongArray;
@@ -215,8 +216,8 @@ public class NetworkStatsHistory implements Parcelable {
*/
@Deprecated
public void recordData(long start, long end, long rxBytes, long txBytes) {
- recordData(start, end,
- new NetworkStats.Entry(IFACE_ALL, UID_ALL, TAG_NONE, rxBytes, 0L, txBytes, 0L, 0L));
+ recordData(start, end, new NetworkStats.Entry(
+ IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, rxBytes, 0L, txBytes, 0L, 0L));
}
/**
@@ -269,7 +270,7 @@ public class NetworkStatsHistory implements Parcelable {
*/
public void recordEntireHistory(NetworkStatsHistory input) {
final NetworkStats.Entry entry = new NetworkStats.Entry(
- IFACE_ALL, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
+ IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
for (int i = 0; i < input.bucketCount; i++) {
final long start = input.bucketStart[i];
final long end = start + input.bucketDuration;
@@ -422,7 +423,7 @@ public class NetworkStatsHistory implements Parcelable {
ensureBuckets(start, end);
final NetworkStats.Entry entry = new NetworkStats.Entry(
- IFACE_ALL, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
+ IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
final Random r = new Random();
while (rxBytes > 1024 || rxPackets > 128 || txBytes > 1024 || txPackets > 128
|| operations > 32) {
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index f138e49140fa..c2c5c183d337 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -205,10 +205,6 @@ public class TrafficStats {
* @param operationCount Number of operations to increment count by.
*/
public static void incrementOperationCount(int tag, int operationCount) {
- if (operationCount < 0) {
- throw new IllegalArgumentException("operation count can only be incremented");
- }
-
final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface(
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
final int uid = android.os.Process.myUid();
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 3ea3f5608ed9..ac15d9c6255b 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -129,6 +129,16 @@ public class ParcelFileDescriptor implements Parcelable {
}
/**
+ * Create a new ParcelFileDescriptor that is a dup of the existing
+ * FileDescriptor. This obeys standard POSIX semantics, where the
+ * new file descriptor shared state such as file position with the
+ * original file descriptor.
+ */
+ public ParcelFileDescriptor dup() throws IOException {
+ return dup(getFileDescriptor());
+ }
+
+ /**
* Create a new ParcelFileDescriptor from a raw native fd. The new
* ParcelFileDescriptor holds a dup of the original fd passed in here,
* so you must still close that fd as well as the new ParcelFileDescriptor.
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 78c9010af8fd..1029161b0445 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -589,8 +589,6 @@ public abstract class PreferenceActivity extends ListActivity implements
mPreferenceManager.setOnPreferenceTreeClickListener(this);
}
- getListView().setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
-
// see if we should show Back/Next buttons
Intent intent = getIntent();
if (intent.getBooleanExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)) {
diff --git a/core/java/android/preference/PreferenceFragment.java b/core/java/android/preference/PreferenceFragment.java
index f6ba7f72f267..bdd858ba6ef2 100644
--- a/core/java/android/preference/PreferenceFragment.java
+++ b/core/java/android/preference/PreferenceFragment.java
@@ -159,7 +159,6 @@ public abstract class PreferenceFragment extends Fragment implements
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- getListView().setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
if (mHavePrefs) {
bindPreferences();
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index d867e35c2422..a66fa81904a5 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -6455,6 +6455,37 @@ public final class ContactsContract {
}
}
}
+
+ /**
+ * A data kind representing an Identity related to the contact.
+ * <p>
+ * This can be used as a signal by the aggregator to combine raw contacts into
+ * contacts, e.g. if two contacts have Identity rows with
+ * the same NAMESPACE and IDENTITY values the aggregator can know that they refer
+ * to the same person.
+ * </p>
+ */
+ public static final class Identity implements DataColumnsWithJoins {
+ /**
+ * This utility class cannot be instantiated
+ */
+ private Identity() {}
+
+ /** MIME type used when storing this in data table. */
+ public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/identity";
+
+ /**
+ * The identity string.
+ * <P>Type: TEXT</P>
+ */
+ public static final String IDENTITY = DataColumns.DATA1;
+
+ /**
+ * The namespace of the identity string, e.g. "com.google"
+ * <P>Type: TEXT</P>
+ */
+ public static final String NAMESPACE = DataColumns.DATA2;
+ }
}
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index f8702b9d9117..554afd2247f1 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3081,6 +3081,7 @@ public final class Settings {
* Whether background data usage is allowed by the user. See
* ConnectivityManager for more info.
*/
+ @Deprecated
public static final String BACKGROUND_DATA = "background_data";
/**
@@ -3960,6 +3961,12 @@ public final class Settings {
public static final String WEB_AUTOFILL_QUERY_URL =
"web_autofill_query_url";
+ /** Whether package verification is enabled. {@hide} */
+ public static final String PACKAGE_VERIFIER_ENABLE = "verifier_enable";
+
+ /** Timeout for package verification. {@hide} */
+ public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
+
/**
* @hide
*/
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index 8c04853535d6..c4cb3a5f4155 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -523,7 +523,8 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
if (DBG) log("A2DP state : device: " + device + " State:" + prevState + "->" + state);
- mBluetoothService.sendConnectionStateChange(device, state, prevState);
+ mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.A2DP, state,
+ prevState);
}
}
diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java
index e15e61f05b26..69fbca36ec88 100644
--- a/core/java/android/server/BluetoothAdapterStateMachine.java
+++ b/core/java/android/server/BluetoothAdapterStateMachine.java
@@ -127,7 +127,7 @@ final class BluetoothAdapterStateMachine extends StateMachine {
// timeout value waiting for all the devices to be disconnected
private static final int DEVICES_DISCONNECT_TIMEOUT_TIME = 3000;
- private static final int PREPARE_BLUETOOTH_TIMEOUT_TIME = 7000;
+ private static final int PREPARE_BLUETOOTH_TIMEOUT_TIME = 10000;
BluetoothAdapterStateMachine(Context context, BluetoothService bluetoothService,
BluetoothAdapter bluetoothAdapter) {
diff --git a/core/java/android/server/BluetoothBondState.java b/core/java/android/server/BluetoothBondState.java
index 6710aab13586..fbc1c2732e66 100644
--- a/core/java/android/server/BluetoothBondState.java
+++ b/core/java/android/server/BluetoothBondState.java
@@ -134,7 +134,6 @@ class BluetoothBondState {
/** reason is ignored unless state == BOND_NOT_BONDED */
public synchronized void setBondState(String address, int state, int reason) {
if (DBG) Log.d(TAG, "setBondState " + "address" + " " + state + "reason: " + reason);
- if (!mService.isEnabled()) return;
int oldState = getBondState(address);
if (oldState == state) {
@@ -459,16 +458,26 @@ class BluetoothBondState {
// intent reach them. But that left a small time gap that could reject
// incoming connection due to undefined priorities.
if (state == BluetoothDevice.BOND_BONDED) {
- if (mA2dpProxy.getPriority(remoteDevice) == BluetoothProfile.PRIORITY_UNDEFINED) {
+ if (mA2dpProxy != null &&
+ mA2dpProxy.getPriority(remoteDevice) == BluetoothProfile.PRIORITY_UNDEFINED) {
mA2dpProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_ON);
}
- if (mHeadsetProxy.getPriority(remoteDevice) == BluetoothProfile.PRIORITY_UNDEFINED) {
+ if (mHeadsetProxy != null &&
+ mHeadsetProxy.getPriority(remoteDevice) == BluetoothProfile.PRIORITY_UNDEFINED) {
mHeadsetProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_ON);
}
} else if (state == BluetoothDevice.BOND_NONE) {
- mA2dpProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_UNDEFINED);
- mHeadsetProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_UNDEFINED);
+ if (mA2dpProxy != null) {
+ mA2dpProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_UNDEFINED);
+ }
+ if (mHeadsetProxy != null) {
+ mHeadsetProxy.setPriority(remoteDevice, BluetoothProfile.PRIORITY_UNDEFINED);
+ }
+ }
+
+ if (mA2dpProxy == null || mHeadsetProxy == null) {
+ Log.e(TAG, "Proxy is null:" + mA2dpProxy + ":" + mHeadsetProxy);
}
}
diff --git a/core/java/android/server/BluetoothHealthProfileHandler.java b/core/java/android/server/BluetoothHealthProfileHandler.java
index 105ff332ed04..eafd7bd35a5d 100644
--- a/core/java/android/server/BluetoothHealthProfileHandler.java
+++ b/core/java/android/server/BluetoothHealthProfileHandler.java
@@ -20,6 +20,7 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHealth;
import android.bluetooth.BluetoothHealthAppConfiguration;
+import android.bluetooth.BluetoothProfile;
import android.bluetooth.IBluetoothHealthCallback;
import android.content.Context;
import android.os.Handler;
@@ -567,7 +568,8 @@ final class BluetoothHealthProfileHandler {
private void updateAndSendIntent(BluetoothDevice device, int prevDeviceState,
int newDeviceState) {
mHealthDevices.put(device, newDeviceState);
- mBluetoothService.sendConnectionStateChange(device, prevDeviceState, newDeviceState);
+ mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.HEALTH,
+ prevDeviceState, newDeviceState);
}
/**
diff --git a/core/java/android/server/BluetoothInputProfileHandler.java b/core/java/android/server/BluetoothInputProfileHandler.java
index 247e297f5031..31764b063ecf 100644
--- a/core/java/android/server/BluetoothInputProfileHandler.java
+++ b/core/java/android/server/BluetoothInputProfileHandler.java
@@ -20,6 +20,7 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothDeviceProfileState;
import android.bluetooth.BluetoothInputDevice;
+import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothProfileState;
import android.content.Context;
import android.content.Intent;
@@ -191,7 +192,8 @@ final class BluetoothInputProfileHandler {
mContext.sendBroadcast(intent, BluetoothService.BLUETOOTH_PERM);
debugLog("InputDevice state : device: " + device + " State:" + prevState + "->" + state);
- mBluetoothService.sendConnectionStateChange(device, state, prevState);
+ mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.INPUT_DEVICE, state,
+ prevState);
}
void handleInputDevicePropertyChange(String address, boolean connected) {
diff --git a/core/java/android/server/BluetoothPanProfileHandler.java b/core/java/android/server/BluetoothPanProfileHandler.java
index 37cfdc4db8c9..bfad74727d1a 100644
--- a/core/java/android/server/BluetoothPanProfileHandler.java
+++ b/core/java/android/server/BluetoothPanProfileHandler.java
@@ -19,6 +19,7 @@ package android.server;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothPan;
+import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothTetheringDataTracker;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -303,7 +304,8 @@ final class BluetoothPanProfileHandler {
mContext.sendBroadcast(intent, BluetoothService.BLUETOOTH_PERM);
debugLog("Pan Device state : device: " + device + " State:" + prevState + "->" + state);
- mBluetoothService.sendConnectionStateChange(device, state, prevState);
+ mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.PAN, state,
+ prevState);
}
private class BluetoothPanDevice {
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index ee1467350f25..9f435fdbb60c 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -166,6 +166,7 @@ public class BluetoothService extends IBluetooth.Stub {
private static final String INCOMING_CONNECTION_FILE =
"/data/misc/bluetooth/incoming_connection.conf";
private HashMap<String, Pair<Integer, String>> mIncomingConnections;
+ private HashMap<Integer, Pair<Integer, Integer>> mProfileConnectionState;
private static class RemoteService {
public String address;
@@ -237,6 +238,7 @@ public class BluetoothService extends IBluetooth.Stub {
mBluetoothPanProfileHandler = BluetoothPanProfileHandler.getInstance(mContext, this);
mBluetoothHealthProfileHandler = BluetoothHealthProfileHandler.getInstance(mContext, this);
mIncomingConnections = new HashMap<String, Pair<Integer, String>>();
+ mProfileConnectionState = new HashMap<Integer, Pair<Integer, Integer>>();
}
public static synchronized String readDockBluetoothAddress() {
@@ -1742,6 +1744,19 @@ public class BluetoothService extends IBluetooth.Stub {
dumpInputDeviceProfile(pw);
dumpPanProfile(pw);
dumpApplicationServiceRecords(pw);
+ dumpProfileState(pw);
+ }
+
+ private void dumpProfileState(PrintWriter pw) {
+ pw.println("\n--Profile State dump--");
+ pw.println("\n Headset profile state:" +
+ mAdapter.getProfileConnectionState(BluetoothProfile.HEADSET));
+ pw.println("\n A2dp profile state:" +
+ mAdapter.getProfileConnectionState(BluetoothProfile.A2DP));
+ pw.println("\n HID profile state:" +
+ mAdapter.getProfileConnectionState(BluetoothProfile.INPUT_DEVICE));
+ pw.println("\n PAN profile state:" +
+ mAdapter.getProfileConnectionState(BluetoothProfile.PAN));
}
private void dumpHeadsetService(PrintWriter pw) {
@@ -2443,23 +2458,85 @@ public class BluetoothService extends IBluetooth.Stub {
return mAdapterConnectionState;
}
- public synchronized void sendConnectionStateChange(BluetoothDevice device, int state,
- int prevState) {
+ public int getProfileConnectionState(int profile) {
+ mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
+
+ Pair<Integer, Integer> state = mProfileConnectionState.get(profile);
+ if (state == null) return BluetoothProfile.STATE_DISCONNECTED;
+
+ return state.first;
+ }
+
+ private void updateProfileConnectionState(int profile, int newState, int oldState) {
+ // mProfileConnectionState is a hashmap -
+ // <Integer, Pair<Integer, Integer>>
+ // The key is the profile, the value is a pair. first element
+ // is the state and the second element is the number of devices
+ // in that state.
+ int numDev = 1;
+ int newHashState = newState;
+ boolean update = true;
+
+ // The following conditions are considered in this function:
+ // 1. If there is no record of profile and state - update
+ // 2. If a new device's state is current hash state - increment
+ // number of devices in the state.
+ // 3. If a state change has happened to Connected or Connecting
+ // (if current state is not connected), update.
+ // 4. If numDevices is 1 and that device state is being updated, update
+ // 5. If numDevices is > 1 and one of the devices is changing state,
+ // decrement numDevices but maintain oldState if it is Connected or
+ // Connecting
+ Pair<Integer, Integer> stateNumDev = mProfileConnectionState.get(profile);
+ if (stateNumDev != null) {
+ int currHashState = stateNumDev.first;
+ numDev = stateNumDev.second;
+
+ if (newState == currHashState) {
+ numDev ++;
+ } else if (newState == BluetoothProfile.STATE_CONNECTED ||
+ (newState == BluetoothProfile.STATE_CONNECTING &&
+ currHashState != BluetoothProfile.STATE_CONNECTED)) {
+ numDev = 1;
+ } else if (numDev == 1 && oldState == currHashState) {
+ update = true;
+ } else if (numDev > 1 && oldState == currHashState) {
+ numDev --;
+
+ if (currHashState == BluetoothProfile.STATE_CONNECTED ||
+ currHashState == BluetoothProfile.STATE_CONNECTING) {
+ newHashState = currHashState;
+ }
+ } else {
+ update = false;
+ }
+ }
+
+ if (update) {
+ mProfileConnectionState.put(profile, new Pair<Integer, Integer>(newHashState,
+ numDev));
+ }
+ }
+
+ public synchronized void sendConnectionStateChange(BluetoothDevice
+ device, int profile, int state, int prevState) {
// Since this is a binder call check if Bluetooth is on still
if (getBluetoothStateInternal() == BluetoothAdapter.STATE_OFF) return;
- if (updateCountersAndCheckForConnectionStateChange(state, prevState)) {
- if (!validateProfileConnectionState(state) ||
- !validateProfileConnectionState(prevState)) {
- // Previously, an invalid state was broadcast anyway,
- // with the invalid state converted to -1 in the intent.
- // Better to log an error and not send an intent with
- // invalid contents or set mAdapterConnectionState to -1.
- Log.e(TAG, "Error in sendConnectionStateChange: "
- + "prevState " + prevState + " state " + state);
- return;
- }
+ if (!validateProfileConnectionState(state) ||
+ !validateProfileConnectionState(prevState)) {
+ // Previously, an invalid state was broadcast anyway,
+ // with the invalid state converted to -1 in the intent.
+ // Better to log an error and not send an intent with
+ // invalid contents or set mAdapterConnectionState to -1.
+ Log.e(TAG, "Error in sendConnectionStateChange: "
+ + "prevState " + prevState + " state " + state);
+ return;
+ }
+ updateProfileConnectionState(profile, state, prevState);
+
+ if (updateCountersAndCheckForConnectionStateChange(state, prevState)) {
mAdapterConnectionState = state;
if (state == BluetoothProfile.STATE_DISCONNECTED) {
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index c51ba2a0a643..4c563ce99e9b 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -46,7 +46,6 @@ import android.view.InputChannel;
import android.view.InputDevice;
import android.view.InputHandler;
import android.view.InputQueue;
-import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.View;
@@ -54,8 +53,9 @@ import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.WindowManager;
import android.view.WindowManagerImpl;
-import android.view.WindowManagerPolicy;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
import java.util.ArrayList;
/**
@@ -459,6 +459,44 @@ public abstract class WallpaperService extends Service {
public void onSurfaceDestroyed(SurfaceHolder holder) {
}
+ protected void dump(String prefix, FileDescriptor fd, PrintWriter out, String[] args) {
+ out.print(prefix); out.print("mInitializing="); out.print(mInitializing);
+ out.print(" mDestroyed="); out.println(mDestroyed);
+ out.print(prefix); out.print("mVisible="); out.print(mVisible);
+ out.print(" mScreenOn="); out.print(mScreenOn);
+ out.print(" mReportedVisible="); out.println(mReportedVisible);
+ out.print(prefix); out.print("mCreated="); out.print(mCreated);
+ out.print(" mSurfaceCreated="); out.print(mSurfaceCreated);
+ out.print(" mIsCreating="); out.print(mIsCreating);
+ out.print(" mDrawingAllowed="); out.println(mDrawingAllowed);
+ out.print(prefix); out.print("mWidth="); out.print(mWidth);
+ out.print(" mCurWidth="); out.print(mCurWidth);
+ out.print(" mHeight="); out.print(mHeight);
+ out.print(" mCurHeight="); out.println(mCurHeight);
+ out.print(prefix); out.print("mType="); out.print(mType);
+ out.print(" mWindowFlags="); out.print(mWindowFlags);
+ out.print(" mCurWindowFlags="); out.println(mCurWindowFlags);
+ out.print(prefix); out.print("mVisibleInsets=");
+ out.print(mVisibleInsets.toShortString());
+ out.print(" mWinFrame="); out.print(mWinFrame.toShortString());
+ out.print(" mContentInsets="); out.println(mContentInsets.toShortString());
+ out.print(prefix); out.print("mConfiguration="); out.println(mConfiguration);
+ out.print(prefix); out.print("mLayout="); out.println(mLayout);
+ synchronized (mLock) {
+ out.print(prefix); out.print("mPendingXOffset="); out.print(mPendingXOffset);
+ out.print(" mPendingXOffset="); out.println(mPendingXOffset);
+ out.print(prefix); out.print("mPendingXOffsetStep=");
+ out.print(mPendingXOffsetStep);
+ out.print(" mPendingXOffsetStep="); out.println(mPendingXOffsetStep);
+ out.print(prefix); out.print("mOffsetMessageEnqueued=");
+ out.print(mOffsetMessageEnqueued);
+ out.print(" mPendingSync="); out.println(mPendingSync);
+ if (mPendingMove != null) {
+ out.print(prefix); out.print("mPendingMove="); out.println(mPendingMove);
+ }
+ }
+ }
+
private void dispatchPointer(MotionEvent event) {
if (event.isTouchEvent()) {
synchronized (mLock) {
@@ -1012,4 +1050,14 @@ public abstract class WallpaperService extends Service {
* is in the wallpaper picker viewing a preview of it as well.
*/
public abstract Engine onCreateEngine();
+
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter out, String[] args) {
+ out.print("State of wallpaper "); out.print(this); out.println(":");
+ for (int i=0; i<mActiveEngines.size(); i++) {
+ Engine engine = mActiveEngines.get(i);
+ out.print(" Engine "); out.print(engine); out.println(":");
+ engine.dump(" ", fd, out, args);
+ }
+ }
}
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 2c78679237f6..2f9852d6a816 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -275,7 +275,7 @@ extends Layout
}
if (reflowed == null) {
- reflowed = new StaticLayout(true);
+ reflowed = new StaticLayout(getText());
} else {
reflowed.prepare();
}
@@ -488,7 +488,8 @@ extends Layout
private int mTopPadding, mBottomPadding;
- private static StaticLayout sStaticLayout = new StaticLayout(true);
+ private static StaticLayout sStaticLayout = null;
+
private static final Object[] sLock = new Object[0];
private static final int START = 0;
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index eabeef0611e0..421e9959bd55 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -880,6 +880,10 @@ public abstract class Layout {
}
}
Directions directions = getLineDirections(line);
+ // Returned directions can actually be null
+ if (directions == null) {
+ return 0f;
+ }
int dir = getParagraphDirection(line);
TextLine tl = TextLine.obtain();
@@ -1781,17 +1785,6 @@ public abstract class Layout {
}
}
- /**
- * Inform this layout that not all of its lines will be displayed, because a maximum number of
- * lines has been set on the associated TextView.
- *
- * A non strictly positive value means that all lines are displayed.
- *
- * @param lineCount number of visible lines
- * @hide
- */
- public void setMaximumVisibleLineCount(int lineCount) {}
-
private CharSequence mText;
private TextPaint mPaint;
/* package */ TextPaint mWorkPaint;
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 14c71b2fb64f..788711d9ea88 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -23,6 +23,7 @@ import android.text.style.LeadingMarginSpan.LeadingMarginSpan2;
import android.text.style.LineHeightSpan;
import android.text.style.MetricAffectingSpan;
import android.text.style.TabStopSpan;
+import android.util.Log;
import com.android.internal.util.ArrayUtils;
@@ -38,6 +39,8 @@ import com.android.internal.util.ArrayUtils;
*/
public class StaticLayout extends Layout {
+ static final String TAG = "StaticLayout";
+
public StaticLayout(CharSequence source, TextPaint paint,
int width,
Alignment align, float spacingmult, float spacingadd,
@@ -75,7 +78,7 @@ public class StaticLayout extends Layout {
float spacingmult, float spacingadd,
boolean includepad) {
this(source, bufstart, bufend, paint, outerwidth, align, textDir,
- spacingmult, spacingadd, includepad, null, 0);
+ spacingmult, spacingadd, includepad, null, 0, Integer.MAX_VALUE);
}
public StaticLayout(CharSequence source, int bufstart, int bufend,
@@ -86,7 +89,7 @@ public class StaticLayout extends Layout {
TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
this(source, bufstart, bufend, paint, outerwidth, align,
TextDirectionHeuristics.FIRSTSTRONG_LTR,
- spacingmult, spacingadd, includepad, ellipsize, ellipsizedWidth);
+ spacingmult, spacingadd, includepad, ellipsize, ellipsizedWidth, Integer.MAX_VALUE);
}
/**
@@ -97,7 +100,7 @@ public class StaticLayout extends Layout {
Alignment align, TextDirectionHeuristic textDir,
float spacingmult, float spacingadd,
boolean includepad,
- TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {
+ TextUtils.TruncateAt ellipsize, int ellipsizedWidth, int maxLines) {
super((ellipsize == null)
? source
: (source instanceof Spanned)
@@ -130,6 +133,7 @@ public class StaticLayout extends Layout {
mLines = new int[ArrayUtils.idealIntArraySize(2 * mColumns)];
mLineDirections = new Directions[
ArrayUtils.idealIntArraySize(2 * mColumns)];
+ mMaximumVisibleLineCount = maxLines;
mMeasured = MeasuredText.obtain();
@@ -141,8 +145,8 @@ public class StaticLayout extends Layout {
mFontMetricsInt = null;
}
- /* package */ StaticLayout(boolean ellipsize) {
- super(null, null, 0, null, 0, 0);
+ /* package */ StaticLayout(CharSequence text) {
+ super(text, null, 0, null, 0, 0);
mColumns = COLUMNS_ELLIPSIZE;
mLines = new int[ArrayUtils.idealIntArraySize(2 * mColumns)];
@@ -394,6 +398,7 @@ public class StaticLayout extends Layout {
okBottom = fitBottom;
}
} else {
+ final boolean moreChars = (j + 1 < spanEnd);
if (ok != here) {
// Log.e("text", "output ok " + here + " to " +ok);
@@ -411,7 +416,7 @@ public class StaticLayout extends Layout {
ok == bufEnd, includepad, trackpad,
chs, widths, paraStart,
ellipsize, ellipsizedWidth, okWidth,
- paint);
+ paint, moreChars);
here = ok;
} else if (fit != here) {
@@ -427,7 +432,7 @@ public class StaticLayout extends Layout {
fit == bufEnd, includepad, trackpad,
chs, widths, paraStart,
ellipsize, ellipsizedWidth, fitWidth,
- paint);
+ paint, moreChars);
here = fit;
} else {
@@ -449,7 +454,7 @@ public class StaticLayout extends Layout {
trackpad,
chs, widths, paraStart,
ellipsize, ellipsizedWidth,
- widths[here - paraStart], paint);
+ widths[here - paraStart], paint, moreChars);
here = here + 1;
}
@@ -472,10 +477,13 @@ public class StaticLayout extends Layout {
width = restWidth;
}
}
+ if (mLineCount >= mMaximumVisibleLineCount) {
+ break;
+ }
}
}
- if (paraEnd != here) {
+ if (paraEnd != here && mLineCount < mMaximumVisibleLineCount) {
if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) {
paint.getFontMetricsInt(fm);
@@ -496,7 +504,7 @@ public class StaticLayout extends Layout {
needMultiply, paraStart, chdirs, dir, easy,
paraEnd == bufEnd, includepad, trackpad,
chs, widths, paraStart,
- ellipsize, ellipsizedWidth, w, paint);
+ ellipsize, ellipsizedWidth, w, paint, paraEnd != bufEnd);
}
paraStart = paraEnd;
@@ -505,7 +513,8 @@ public class StaticLayout extends Layout {
break;
}
- if (bufEnd == bufStart || source.charAt(bufEnd - 1) == CHAR_NEW_LINE) {
+ if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == CHAR_NEW_LINE) &&
+ mLineCount < mMaximumVisibleLineCount) {
// Log.e("text", "output last " + bufEnd);
paint.getFontMetricsInt(fm);
@@ -519,7 +528,7 @@ public class StaticLayout extends Layout {
needMultiply, bufEnd, null, DEFAULT_DIR, true,
true, includepad, trackpad,
null, null, bufStart,
- ellipsize, ellipsizedWidth, 0, paint);
+ ellipsize, ellipsizedWidth, 0, paint, false);
}
}
@@ -624,7 +633,7 @@ public class StaticLayout extends Layout {
boolean includePad, boolean trackPad,
char[] chs, float[] widths, int widthStart,
TextUtils.TruncateAt ellipsize, float ellipsisWidth,
- float textWidth, TextPaint paint) {
+ float textWidth, TextPaint paint, boolean moreChars) {
int j = mLineCount;
int off = j * mColumns;
int want = off + mColumns + TOP;
@@ -722,9 +731,10 @@ public class StaticLayout extends Layout {
// If ellipsize is in marquee mode, do not apply ellipsis on the first line
if (ellipsize != null && (ellipsize != TextUtils.TruncateAt.MARQUEE || j != 0)) {
+ boolean forceEllipsis = moreChars && (mLineCount + 1 == mMaximumVisibleLineCount);
calculateEllipsis(start, end, widths, widthStart,
ellipsisWidth, ellipsize, j,
- textWidth, paint);
+ textWidth, paint, forceEllipsis);
}
mLineCount++;
@@ -734,9 +744,9 @@ public class StaticLayout extends Layout {
private void calculateEllipsis(int lineStart, int lineEnd,
float[] widths, int widthStart,
float avail, TextUtils.TruncateAt where,
- int line, float textWidth, TextPaint paint) {
-
- if (textWidth <= avail) {
+ int line, float textWidth, TextPaint paint,
+ boolean forceEllipsis) {
+ if (textWidth <= avail && !forceEllipsis) {
// Everything fits!
mLines[mColumns * line + ELLIPSIS_START] = 0;
mLines[mColumns * line + ELLIPSIS_COUNT] = 0;
@@ -744,25 +754,33 @@ public class StaticLayout extends Layout {
}
float ellipsisWidth = paint.measureText(HORIZONTAL_ELLIPSIS);
- int ellipsisStart, ellipsisCount;
+ int ellipsisStart = 0;
+ int ellipsisCount = 0;
int len = lineEnd - lineStart;
+ // We only support start ellipsis on a single line
if (where == TextUtils.TruncateAt.START) {
- float sum = 0;
- int i;
+ if (mMaximumVisibleLineCount == 1) {
+ float sum = 0;
+ int i;
- for (i = len; i >= 0; i--) {
- float w = widths[i - 1 + lineStart - widthStart];
+ for (i = len; i >= 0; i--) {
+ float w = widths[i - 1 + lineStart - widthStart];
- if (w + sum + ellipsisWidth > avail) {
- break;
+ if (w + sum + ellipsisWidth > avail) {
+ break;
+ }
+
+ sum += w;
}
- sum += w;
+ ellipsisStart = 0;
+ ellipsisCount = i;
+ } else {
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "Start Ellipsis only supported with one line");
+ }
}
-
- ellipsisStart = 0;
- ellipsisCount = i;
} else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE) {
float sum = 0;
int i;
@@ -779,34 +797,45 @@ public class StaticLayout extends Layout {
ellipsisStart = i;
ellipsisCount = len - i;
- } else /* where = TextUtils.TruncateAt.MIDDLE */ {
- float lsum = 0, rsum = 0;
- int left = 0, right = len;
+ if (forceEllipsis && ellipsisCount == 0 && i > 0) {
+ ellipsisStart = i - 1;
+ ellipsisCount = 1;
+ }
+ } else {
+ // where = TextUtils.TruncateAt.MIDDLE We only support middle ellipsis on a single line
+ if (mMaximumVisibleLineCount == 1) {
+ float lsum = 0, rsum = 0;
+ int left = 0, right = len;
- float ravail = (avail - ellipsisWidth) / 2;
- for (right = len; right >= 0; right--) {
- float w = widths[right - 1 + lineStart - widthStart];
+ float ravail = (avail - ellipsisWidth) / 2;
+ for (right = len; right >= 0; right--) {
+ float w = widths[right - 1 + lineStart - widthStart];
- if (w + rsum > ravail) {
- break;
+ if (w + rsum > ravail) {
+ break;
+ }
+
+ rsum += w;
}
- rsum += w;
- }
+ float lavail = avail - ellipsisWidth - rsum;
+ for (left = 0; left < right; left++) {
+ float w = widths[left + lineStart - widthStart];
- float lavail = avail - ellipsisWidth - rsum;
- for (left = 0; left < right; left++) {
- float w = widths[left + lineStart - widthStart];
+ if (w + lsum > lavail) {
+ break;
+ }
- if (w + lsum > lavail) {
- break;
+ lsum += w;
}
- lsum += w;
+ ellipsisStart = left;
+ ellipsisCount = right - left;
+ } else {
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "Middle Ellipsis only supported with one line");
+ }
}
-
- ellipsisStart = left;
- ellipsisCount = right - left;
}
mLines[mColumns * line + ELLIPSIS_START] = ellipsisStart;
@@ -916,14 +945,6 @@ public class StaticLayout extends Layout {
return mEllipsizedWidth;
}
- /**
- * @hide
- */
- @Override
- public void setMaximumVisibleLineCount(int lineCount) {
- mMaximumVisibleLineCount = lineCount;
- }
-
void prepare() {
mMeasured = MeasuredText.obtain();
}
@@ -949,7 +970,7 @@ public class StaticLayout extends Layout {
private int[] mLines;
private Directions[] mLineDirections;
- private int mMaximumVisibleLineCount = 0;
+ private int mMaximumVisibleLineCount = Integer.MAX_VALUE;
private static final int START_MASK = 0x1FFFFFFF;
private static final int DIR_SHIFT = 30;
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 376e4f56edde..fcc372e36dfd 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -125,6 +125,9 @@ class TextLine {
mLen = limit - start;
mDir = dir;
mDirections = directions;
+ if (mDirections == null) {
+ throw new IllegalArgumentException("Directions cannot be null");
+ }
mHasTabs = hasTabs;
mSpanned = null;
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 29c9853b6b11..83ef6ce0a9a5 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -259,6 +259,17 @@ public class TextUtils {
}
/**
+ * Returns list of multiple {@link CharSequence} joined into a single
+ * {@link CharSequence} separated by localized delimiter such as ", ".
+ *
+ * @hide
+ */
+ public static CharSequence join(Iterable<CharSequence> list) {
+ final CharSequence delimiter = Resources.getSystem().getText(R.string.list_delimeter);
+ return join(delimiter, list);
+ }
+
+ /**
* Returns a string containing the tokens joined by delimiters.
* @param tokens an array objects to be joined. Strings will be formed from
* the objects by calling object.toString().
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index 555aac5de6bf..fb94bc7e5690 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -17,10 +17,13 @@
package android.text.style;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.text.ParcelableSpan;
+import android.text.TextPaint;
import android.text.TextUtils;
import android.widget.TextView;
@@ -34,23 +37,36 @@ import java.util.Locale;
* display a popup dialog listing suggestion replacement for that text. The user can then replace
* the original text by one of the suggestions.
*
- * These spans should typically be created by the input method to privide correction and alternates
+ * These spans should typically be created by the input method to provide correction and alternates
* for the text.
*
* @see TextView#setSuggestionsEnabled(boolean)
*/
-public class SuggestionSpan implements ParcelableSpan {
+public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
+
+ /**
+ * Sets this flag if the suggestions should be easily accessible with few interactions.
+ * This flag should be set for every suggestions that the user is likely to use.
+ */
+ public static final int FLAG_EASY_CORRECT = 0x0001;
+
/**
- * Flag for indicating that the input is verbatim. TextView refers to this flag to determine
- * how it displays a word with SuggestionSpan.
+ * Sets this flag if the suggestions apply to a misspelled word/text. This type of suggestion is
+ * rendered differently to highlight the error.
*/
- public static final int FLAG_VERBATIM = 0x0001;
+ public static final int FLAG_MISSPELLED = 0x0002;
public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
public static final String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+ /**
+ * The default underline thickness as a percentage of the system's default underline thickness
+ * (i.e., 100 means the default thickness, and 200 is a double thickness).
+ */
+ private static final int DEFAULT_UNDERLINE_PERCENTAGE = 100;
+
public static final int SUGGESTIONS_MAX_SIZE = 5;
/*
@@ -66,6 +82,11 @@ public class SuggestionSpan implements ParcelableSpan {
private final String mNotificationTargetClassName;
private final int mHashCode;
+ private float mMisspelledUnderlineThickness;
+ private int mMisspelledUnderlineColor;
+ private float mEasyCorrectUnderlineThickness;
+ private int mEasyCorrectUnderlineColor;
+
/*
* TODO: If switching IME is required, needs to add parameters for ids of InputMethodInfo
* and InputMethodSubtype.
@@ -107,6 +128,7 @@ public class SuggestionSpan implements ParcelableSpan {
} else {
mLocaleString = locale.toString();
}
+
if (notificationTargetClass != null) {
mNotificationTargetClassName = notificationTargetClass.getCanonicalName();
} else {
@@ -114,6 +136,36 @@ public class SuggestionSpan implements ParcelableSpan {
}
mHashCode = hashCodeInternal(
mFlags, mSuggestions, mLocaleString, mNotificationTargetClassName);
+
+ initStyle(context);
+ }
+
+ private void initStyle(Context context) {
+ // Read the colors. We need to store the color and the underline thickness, as the span
+ // does not have access to the context when it is read from a parcel.
+ TypedArray typedArray;
+
+ typedArray = context.obtainStyledAttributes(null,
+ com.android.internal.R.styleable.SuggestionSpan,
+ com.android.internal.R.attr.textAppearanceEasyCorrectSuggestion, 0);
+
+ mEasyCorrectUnderlineThickness = getThicknessPercentage(typedArray,
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineThicknessPercentage);
+ mEasyCorrectUnderlineColor = typedArray.getColor(
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
+
+ typedArray = context.obtainStyledAttributes(null,
+ com.android.internal.R.styleable.SuggestionSpan,
+ com.android.internal.R.attr.textAppearanceMisspelledSuggestion, 0);
+ mMisspelledUnderlineThickness = getThicknessPercentage(typedArray,
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineThicknessPercentage);
+ mMisspelledUnderlineColor = typedArray.getColor(
+ com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
+ }
+
+ private static float getThicknessPercentage(TypedArray typedArray, int index) {
+ int value = typedArray.getInteger(index, DEFAULT_UNDERLINE_PERCENTAGE);
+ return value / 100.0f;
}
public SuggestionSpan(Parcel src) {
@@ -122,6 +174,10 @@ public class SuggestionSpan implements ParcelableSpan {
mLocaleString = src.readString();
mNotificationTargetClassName = src.readString();
mHashCode = src.readInt();
+ mEasyCorrectUnderlineColor = src.readInt();
+ mEasyCorrectUnderlineThickness = src.readFloat();
+ mMisspelledUnderlineColor = src.readInt();
+ mMisspelledUnderlineThickness = src.readFloat();
}
/**
@@ -167,6 +223,10 @@ public class SuggestionSpan implements ParcelableSpan {
dest.writeString(mLocaleString);
dest.writeString(mNotificationTargetClassName);
dest.writeInt(mHashCode);
+ dest.writeInt(mEasyCorrectUnderlineColor);
+ dest.writeFloat(mEasyCorrectUnderlineThickness);
+ dest.writeInt(mMisspelledUnderlineColor);
+ dest.writeFloat(mMisspelledUnderlineThickness);
}
@Override
@@ -205,4 +265,13 @@ public class SuggestionSpan implements ParcelableSpan {
return new SuggestionSpan[size];
}
};
+
+ @Override
+ public void updateDrawState(TextPaint tp) {
+ if ((getFlags() & FLAG_MISSPELLED) != 0) {
+ tp.setUnderlineText(true, mMisspelledUnderlineColor, mMisspelledUnderlineThickness);
+ } else if ((getFlags() & FLAG_EASY_CORRECT) != 0) {
+ tp.setUnderlineText(true, mEasyCorrectUnderlineColor, mEasyCorrectUnderlineThickness);
+ }
+ }
}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index e586370b4830..cfbb47c30d55 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -151,6 +151,7 @@ class GLES20Canvas extends HardwareCanvas {
static native void nResizeLayer(int layerId, int width, int height, int[] layerInfo);
static native void nUpdateTextureLayer(int layerId, int width, int height, boolean opaque,
SurfaceTexture surface);
+ static native void nSetTextureLayerTransform(int layerId, int matrix);
static native void nDestroyLayer(int layerId);
static native void nDestroyLayerDeferred(int layerId);
static native boolean nCopyLayer(int layerId, int bitmap);
diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java
index 41f16e27da8a..23a716621589 100644
--- a/core/java/android/view/GLES20RenderLayer.java
+++ b/core/java/android/view/GLES20RenderLayer.java
@@ -17,6 +17,7 @@
package android.view;
import android.graphics.Canvas;
+import android.graphics.Matrix;
/**
* An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This
@@ -87,4 +88,11 @@ class GLES20RenderLayer extends GLES20Layer {
}
return getCanvas();
}
+
+ /**
+ * Ignored
+ */
+ @Override
+ void setTransform(Matrix matrix) {
+ }
}
diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java
index 391d9f465994..6c41023c98bb 100644
--- a/core/java/android/view/GLES20TextureLayer.java
+++ b/core/java/android/view/GLES20TextureLayer.java
@@ -17,6 +17,7 @@
package android.view;
import android.graphics.Canvas;
+import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
/**
@@ -75,4 +76,9 @@ class GLES20TextureLayer extends GLES20Layer {
super.update(width, height, isOpaque);
GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface);
}
+
+ @Override
+ void setTransform(Matrix matrix) {
+ GLES20Canvas.nSetTextureLayerTransform(mLayer, matrix.native_instance);
+ }
}
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index dfb39ae04543..28389abc3421 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -18,6 +18,7 @@ package android.view;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Matrix;
/**
* A hardware layer can be used to render graphics operations into a hardware
@@ -150,4 +151,11 @@ abstract class HardwareLayer {
mHeight = height;
mOpaque = isOpaque;
}
+
+ /**
+ * Sets an optional transform on this layer.
+ *
+ * @param matrix The transform to apply to the layer.
+ */
+ abstract void setTransform(Matrix matrix);
}
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index f2c3131ffd84..a05637d82e52 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -718,7 +718,9 @@ public abstract class HardwareRenderer {
if (!createSurface(holder)) {
return;
}
- setEnabled(true);
+ if (mCanvas != null) {
+ setEnabled(true);
+ }
}
}
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index da5c7b269122..8e0ab1a12502 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -619,6 +619,11 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* indicates that the major axis of contact is oriented to the left.
* The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
* (finger pointing fully right).
+ * <li>For a stylus, the orientation indicates the direction in which the stylus
+ * is pointing in relation to the vertical axis of the current orientation of the screen.
+ * The range is from -PI radians to PI radians, where 0 is pointing up,
+ * -PI/2 radians is pointing left, -PI or PI radians is pointing down, and PI/2 radians
+ * is pointing right. See also {@link #AXIS_TILT}.
* </ul>
* </p>
*
@@ -883,8 +888,8 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* <p>
* <ul>
* <li>For a stylus, reports the distance of the stylus from the screen.
- * The value is nominally measured in millimeters where 0.0 indicates direct contact
- * and larger values indicate increasing distance from the surface.
+ * A value of 0.0 indicates direct contact and larger values indicate increasing
+ * distance from the surface.
* </ul>
* </p>
*
@@ -896,6 +901,24 @@ public final class MotionEvent extends InputEvent implements Parcelable {
public static final int AXIS_DISTANCE = 24;
/**
+ * Axis constant: Tilt axis of a motion event.
+ * <p>
+ * <ul>
+ * <li>For a stylus, reports the tilt angle of the stylus in radians where
+ * 0 radians indicates that the stylus is being held perpendicular to the
+ * surface, and PI/2 radians indicates that the stylus is being held flat
+ * against the surface.
+ * </ul>
+ * </p>
+ *
+ * @see #getAxisValue(int, int)
+ * @see #getHistoricalAxisValue(int, int, int)
+ * @see MotionEvent.PointerCoords#getAxisValue(int, int)
+ * @see InputDevice#getMotionRange
+ */
+ public static final int AXIS_TILT = 25;
+
+ /**
* Axis constant: Generic 1 axis of a motion event.
* The interpretation of a generic axis is device-specific.
*
@@ -1104,6 +1127,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
names.append(AXIS_GAS, "AXIS_GAS");
names.append(AXIS_BRAKE, "AXIS_BRAKE");
names.append(AXIS_DISTANCE, "AXIS_DISTANCE");
+ names.append(AXIS_TILT, "AXIS_TILT");
names.append(AXIS_GENERIC_1, "AXIS_GENERIC_1");
names.append(AXIS_GENERIC_2, "AXIS_GENERIC_2");
names.append(AXIS_GENERIC_3, "AXIS_GENERIC_3");
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 53a6bcba98c8..9d959fbf5981 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -19,6 +19,7 @@ package android.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
@@ -104,6 +105,9 @@ public class TextureView extends View {
private boolean mOpaque = true;
+ private final Matrix mMatrix = new Matrix();
+ private boolean mMatrixChanged;
+
private final Object[] mLock = new Object[0];
private boolean mUpdateLayer;
@@ -257,6 +261,7 @@ public class TextureView extends View {
@Override
public final void draw(Canvas canvas) {
applyUpdate();
+ applyTransformMatrix();
}
/**
@@ -311,6 +316,7 @@ public class TextureView extends View {
}
applyUpdate();
+ applyTransformMatrix();
return mLayer;
}
@@ -358,6 +364,57 @@ public class TextureView extends View {
}
/**
+ * <p>Sets the transform to associate with this texture view.
+ * The specified transform applies to the underlying surface
+ * texture and does not affect the size or position of the view
+ * itself, only of its content.</p>
+ *
+ * <p>Some transforms might prevent the content from drawing
+ * all the pixels contained within this view's bounds. In such
+ * situations, make sure this texture view is not marked opaque.</p>
+ *
+ * @param transform The transform to apply to the content of
+ * this view.
+ *
+ * @see #getTransform(android.graphics.Matrix)
+ * @see #isOpaque()
+ * @see #setOpaque(boolean)
+ */
+ public void setTransform(Matrix transform) {
+ mMatrix.set(transform);
+ mMatrixChanged = true;
+ invalidateParentIfNeeded();
+ }
+
+ /**
+ * Returns the transform associated with this texture view.
+ *
+ * @param transform The {@link Matrix} in which to copy the current
+ * transform. Can be null.
+ *
+ * @return The specified matrix if not null or a new {@link Matrix}
+ * instance otherwise.
+ *
+ * @see #setTransform(android.graphics.Matrix)
+ */
+ public Matrix getTransform(Matrix transform) {
+ if (transform == null) {
+ transform = new Matrix();
+ }
+
+ transform.set(mMatrix);
+
+ return transform;
+ }
+
+ private void applyTransformMatrix() {
+ if (mMatrixChanged) {
+ mLayer.setTransform(mMatrix);
+ mMatrixChanged = false;
+ }
+ }
+
+ /**
* <p>Returns a {@link android.graphics.Bitmap} representation of the content
* of the associated surface texture. If the surface texture is not available,
* this method returns null.</p>
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index e3819176458a..17e637c57cc5 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4898,22 +4898,22 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
switch (direction) {
case FOCUS_LEFT:
if (mNextFocusLeftId == View.NO_ID) return null;
- return findViewShouldExist(root, mNextFocusLeftId);
+ return findViewInsideOutShouldExist(root, mNextFocusLeftId);
case FOCUS_RIGHT:
if (mNextFocusRightId == View.NO_ID) return null;
- return findViewShouldExist(root, mNextFocusRightId);
+ return findViewInsideOutShouldExist(root, mNextFocusRightId);
case FOCUS_UP:
if (mNextFocusUpId == View.NO_ID) return null;
- return findViewShouldExist(root, mNextFocusUpId);
+ return findViewInsideOutShouldExist(root, mNextFocusUpId);
case FOCUS_DOWN:
if (mNextFocusDownId == View.NO_ID) return null;
- return findViewShouldExist(root, mNextFocusDownId);
+ return findViewInsideOutShouldExist(root, mNextFocusDownId);
case FOCUS_FORWARD:
if (mNextFocusForwardId == View.NO_ID) return null;
- return findViewShouldExist(root, mNextFocusForwardId);
+ return findViewInsideOutShouldExist(root, mNextFocusForwardId);
case FOCUS_BACKWARD: {
final int id = mID;
- return root.findViewByPredicate(new Predicate<View>() {
+ return root.findViewByPredicateInsideOut(this, new Predicate<View>() {
@Override
public boolean apply(View t) {
return t.mNextFocusForwardId == id;
@@ -4924,8 +4924,14 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
return null;
}
- private static View findViewShouldExist(View root, int childViewId) {
- View result = root.findViewById(childViewId);
+ private View findViewInsideOutShouldExist(View root, final int childViewId) {
+ View result = root.findViewByPredicateInsideOut(this, new Predicate<View>() {
+ @Override
+ public boolean apply(View t) {
+ return t.mID == childViewId;
+ }
+ });
+
if (result == null) {
Log.w(VIEW_LOG_TAG, "couldn't find next focus view specified "
+ "by user for id " + childViewId);
@@ -8081,6 +8087,11 @@ 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
+ return;
+ }
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
(mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID ||
(mPrivateFlags & INVALIDATED) != INVALIDATED) {
@@ -8124,6 +8135,11 @@ 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
+ return;
+ }
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
(mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID ||
(mPrivateFlags & INVALIDATED) != INVALIDATED) {
@@ -8176,6 +8192,11 @@ 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
+ return;
+ }
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
(invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) ||
(mPrivateFlags & INVALIDATED) != INVALIDATED || isOpaque() != mLastIsOpaque) {
@@ -8211,6 +8232,11 @@ 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
+ return;
+ }
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
(mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID ||
(mPrivateFlags & INVALIDATED) != INVALIDATED) {
@@ -11752,9 +11778,10 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
/**
* {@hide}
* @param predicate The predicate to evaluate.
+ * @param childToSkip If not null, ignores this child during the recursive traversal.
* @return The first view that matches the predicate or null.
*/
- protected View findViewByPredicateTraversal(Predicate<View> predicate) {
+ protected View findViewByPredicateTraversal(Predicate<View> predicate, View childToSkip) {
if (predicate.apply(this)) {
return this;
}
@@ -11798,7 +11825,41 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
* @return The first view that matches the predicate or null.
*/
public final View findViewByPredicate(Predicate<View> predicate) {
- return findViewByPredicateTraversal(predicate);
+ return findViewByPredicateTraversal(predicate, null);
+ }
+
+ /**
+ * {@hide}
+ * Look for a child view that matches the specified predicate,
+ * starting with the specified view and its descendents and then
+ * recusively searching the ancestors and siblings of that view
+ * until this view is reached.
+ *
+ * This method is useful in cases where the predicate does not match
+ * a single unique view (perhaps multiple views use the same id)
+ * and we are trying to find the view that is "closest" in scope to the
+ * starting view.
+ *
+ * @param start The view to start from.
+ * @param predicate The predicate to evaluate.
+ * @return The first view that matches the predicate or null.
+ */
+ public final View findViewByPredicateInsideOut(View start, Predicate<View> predicate) {
+ View childToSkip = null;
+ for (;;) {
+ View view = start.findViewByPredicateTraversal(predicate, childToSkip);
+ if (view != null || start == this) {
+ return view;
+ }
+
+ ViewParent parent = start.getParent();
+ if (parent == null || !(parent instanceof View)) {
+ return null;
+ }
+
+ childToSkip = start;
+ start = (View) parent;
+ }
}
/**
@@ -12628,13 +12689,15 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
* Request that the visibility of the status bar be changed.
* @param visibility Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE} or
* {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.
+ *
+ * This value will be re-applied immediately, even if the flags have not changed, so a view may
+ * easily reassert a particular SystemUiVisibility condition even if the system UI itself has
+ * since countermanded the original request.
*/
public void setSystemUiVisibility(int visibility) {
- if (visibility != mSystemUiVisibility) {
- mSystemUiVisibility = visibility;
- if (mParent != null && mAttachInfo != null && !mAttachInfo.mRecomputeGlobalAttributes) {
- mParent.recomputeViewAttributes(this);
- }
+ mSystemUiVisibility = visibility;
+ if (mParent != null && mAttachInfo != null && !mAttachInfo.mRecomputeGlobalAttributes) {
+ mParent.recomputeViewAttributes(this);
}
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 7a1acfda4bc1..8fa1922bee8f 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3038,7 +3038,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* {@hide}
*/
@Override
- protected View findViewByPredicateTraversal(Predicate<View> predicate) {
+ protected View findViewByPredicateTraversal(Predicate<View> predicate, View childToSkip) {
if (predicate.apply(this)) {
return this;
}
@@ -3049,7 +3049,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
for (int i = 0; i < len; i++) {
View v = where[i];
- if ((v.mPrivateFlags & IS_ROOT_NAMESPACE) == 0) {
+ if (v != childToSkip && (v.mPrivateFlags & IS_ROOT_NAMESPACE) == 0) {
v = v.findViewByPredicate(predicate);
if (v != null) {
@@ -5012,7 +5012,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*/
public void requestTransitionStart(LayoutTransition transition) {
ViewRootImpl viewAncestor = getViewRootImpl();
- viewAncestor.requestTransitionStart(transition);
+ if (viewAncestor != null) {
+ viewAncestor.requestTransitionStart(transition);
+ }
}
@Override
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index cb85e5fa9817..e1aa9a491839 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -101,6 +101,8 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
/** Dialog's content view */
private final View mView;
+ /** The visible portion of the volume overlay */
+ private final ViewGroup mPanel;
/** Contains the sliders and their touchable icons */
private final ViewGroup mSliderGroup;
/** The button that expands the dialog to show all sliders */
@@ -173,10 +175,23 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
View view = mView = inflater.inflate(R.layout.volume_adjust, null);
mView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
+ // Dismiss the dialog if the user touches outside the visible area. This is not
+ // handled by the usual dialog dismissing code because there is a region above
+ // the panel (marginTop) that is still within the dialog.
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ int x = (int) event.getX();
+ int y = (int) event.getY();
+ if (x < mPanel.getLeft() || x > mPanel.getRight() || y < mPanel.getTop()
+ || y > mPanel.getBottom()) {
+ forceTimeout();
+ return true;
+ }
+ }
resetTimeout();
return true;
}
});
+ mPanel = (ViewGroup) mView.findViewById(R.id.visible_panel);
mSliderGroup = (ViewGroup) mView.findViewById(R.id.slider_group);
mMoreButton = (ImageView) mView.findViewById(R.id.expand_button);
mDivider = (ImageView) mView.findViewById(R.id.expand_button_divider);
@@ -639,6 +654,11 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
sendMessageDelayed(obtainMessage(MSG_TIMEOUT), TIMEOUT_DELAY);
}
+ private void forceTimeout() {
+ removeMessages(MSG_TIMEOUT);
+ sendMessage(obtainMessage(MSG_TIMEOUT));
+ }
+
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
final Object tag = seekBar.getTag();
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 6ac679ca88d5..75c75927a769 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -127,6 +127,7 @@ public abstract class Window {
private int mLocalFeatures = DEFAULT_FEATURES;
private boolean mHaveWindowFormat = false;
+ private boolean mHaveDimAmount = false;
private int mDefaultWindowFormat = PixelFormat.OPAQUE;
private boolean mHasSoftInputMode = false;
@@ -745,6 +746,23 @@ public abstract class Window {
}
/**
+ * Set the amount of dim behind the window when using
+ * {@link WindowManager.LayoutParams#FLAG_DIM_BEHIND}. This overrides
+ * the default dim amount of that is selected by the Window based on
+ * its theme.
+ *
+ * @param amount The new dim amount, from 0 for no dim to 1 for full dim.
+ */
+ public void setDimAmount(float amount) {
+ final WindowManager.LayoutParams attrs = getAttributes();
+ attrs.dimAmount = amount;
+ mHaveDimAmount = true;
+ if (mCallback != null) {
+ mCallback.onWindowAttributesChanged(attrs);
+ }
+ }
+
+ /**
* Specify custom window attributes. <strong>PLEASE NOTE:</strong> the
* layout params you give here should generally be from values previously
* retrieved with {@link #getAttributes()}; you probably do not want to
@@ -1193,6 +1211,11 @@ public abstract class Window {
}
}
+ /** @hide */
+ protected boolean haveDimAmount() {
+ return mHaveDimAmount;
+ }
+
public abstract void setChildDrawable(int featureId, Drawable drawable);
public abstract void setChildInt(int featureId, int value);
@@ -1219,4 +1242,12 @@ public abstract class Window {
* @param uiOptions Flags specifying extra options for this window.
*/
public void setUiOptions(int uiOptions) { }
+
+ /**
+ * Set extra options that will influence the UI for this window.
+ * Only the bits filtered by mask will be modified.
+ * @param uiOptions Flags specifying extra options for this window.
+ * @param mask Flags specifying which options should be modified. Others will remain unchanged.
+ */
+ public void setUiOptions(int uiOptions, int mask) { }
}
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 8a30c7b7a02f..1b4edf12ac09 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -871,6 +871,16 @@ public interface WindowManagerPolicy {
public void systemReady();
/**
+ * Show boot time message to the user.
+ */
+ public void showBootMessage(final CharSequence msg, final boolean always);
+
+ /**
+ * Hide the UI for showing boot messages, never to be displayed again.
+ */
+ public void hideBootMessages();
+
+ /**
* Called when userActivity is signalled in the power manager.
* This is safe to call from any thread, with any window manager locks held or not.
*/
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 6fc0d119f9c9..1e958549809d 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -27,6 +27,8 @@ import android.os.Message;
import android.util.Log;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
@@ -46,6 +48,8 @@ class HTML5Audio extends Handler
// The C++ MediaPlayerPrivateAndroid object.
private int mNativePointer;
+ // The private status of the view that created this player
+ private boolean mIsPrivate;
private static int IDLE = 0;
private static int INITIALIZED = 1;
@@ -64,6 +68,9 @@ class HTML5Audio extends Handler
// Timer thread -> UI thread
private static final int TIMEUPDATE = 100;
+ private static final String COOKIE = "Cookie";
+ private static final String HIDE_URL_LOGS = "x-hide-urls-from-log";
+
// The spec says the timer should fire every 250 ms or less.
private static final int TIMEUPDATE_PERIOD = 250; // ms
// The timer for timeupate events.
@@ -138,10 +145,11 @@ class HTML5Audio extends Handler
/**
* @param nativePtr is the C++ pointer to the MediaPlayerPrivate object.
*/
- public HTML5Audio(int nativePtr) {
+ public HTML5Audio(WebViewCore webViewCore, int nativePtr) {
// Save the native ptr
mNativePointer = nativePtr;
resetMediaPlayer();
+ mIsPrivate = webViewCore.getWebView().isPrivateBrowsingEnabled();
}
private void resetMediaPlayer() {
@@ -169,7 +177,17 @@ class HTML5Audio extends Handler
if (mState != IDLE) {
resetMediaPlayer();
}
- mMediaPlayer.setDataSource(url);
+ String cookieValue = CookieManager.getInstance().getCookie(url, mIsPrivate);
+ Map<String, String> headers = new HashMap<String, String>();
+
+ if (cookieValue != null) {
+ headers.put(COOKIE, cookieValue);
+ }
+ if (mIsPrivate) {
+ headers.put(HIDE_URL_LOGS, "true");
+ }
+
+ mMediaPlayer.setDataSource(url, headers);
mState = INITIALIZED;
mMediaPlayer.prepareAsync();
} catch (IOException e) {
diff --git a/core/java/android/webkit/JniUtil.java b/core/java/android/webkit/JniUtil.java
index 620973e421d5..4264e9da354f 100644
--- a/core/java/android/webkit/JniUtil.java
+++ b/core/java/android/webkit/JniUtil.java
@@ -16,6 +16,7 @@
package android.webkit;
+import android.app.ActivityManager;
import android.content.Context;
import android.net.Uri;
import android.provider.Settings;
@@ -175,5 +176,16 @@ class JniUtil {
Settings.Secure.WEB_AUTOFILL_QUERY_URL);
}
+ private static boolean canSatisfyMemoryAllocation(long bytesRequested) {
+ checkInitialized();
+ ActivityManager manager = (ActivityManager) sContext.getSystemService(
+ Context.ACTIVITY_SERVICE);
+ ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
+ manager.getMemoryInfo(memInfo);
+ long leftToAllocate = memInfo.availMem - memInfo.threshold;
+ return !memInfo.lowMemory && bytesRequested < leftToAllocate;
+ }
+
+
private static native boolean nativeUseChromiumHttpStack();
}
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 642aa22d7b70..77f67765c44f 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1807,7 +1807,9 @@ public class WebSettings {
* @hide
*/
public void setProperty(String key, String value) {
- mWebView.nativeSetProperty(key, value);
+ if (mWebView.nativeSetProperty(key, value)) {
+ mWebView.contentInvalidateAll();
+ }
}
/**
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 2bb9da157788..5d776fd7dfd6 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -27,7 +27,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
@@ -8104,8 +8103,7 @@ public class WebView extends AbsoluteLayout
// nativeCreate sets mNativeClass to a non-zero value
String drawableDir = BrowserFrame.getRawResFilename(
BrowserFrame.DRAWABLEDIR, mContext);
- AssetManager am = mContext.getAssets();
- nativeCreate(msg.arg1, drawableDir, am);
+ nativeCreate(msg.arg1, drawableDir);
if (mDelaySetPicture != null) {
setNewPicture(mDelaySetPicture, true);
mDelaySetPicture = null;
@@ -9038,15 +9036,6 @@ public class WebView extends AbsoluteLayout
}
/**
- * Enable expanded tiles bound for smoother scrolling.
- *
- * @hide only used by the Browser
- */
- public void setExpandedTileBounds(boolean enabled) {
- nativeSetExpandedTileBounds(enabled);
- }
-
- /**
* Set the time to wait between passing touches to WebCore. See also the
* TOUCH_SENT_INTERVAL member for further discussion.
*
@@ -9140,7 +9129,7 @@ public class WebView extends AbsoluteLayout
private native Rect nativeCacheHitNodeBounds();
private native int nativeCacheHitNodePointer();
/* package */ native void nativeClearCursor();
- private native void nativeCreate(int ptr, String drawableDir, AssetManager am);
+ private native void nativeCreate(int ptr, String drawableDir);
private native int nativeCursorFramePointer();
private native Rect nativeCursorNodeBounds();
private native int nativeCursorNodePointer();
@@ -9275,7 +9264,6 @@ public class WebView extends AbsoluteLayout
static final int NO_LEFTEDGE = -1;
native int nativeGetBlockLeftEdge(int x, int y, float scale);
- private native void nativeSetExpandedTileBounds(boolean enabled);
private native void nativeUseHardwareAccelSkia(boolean enabled);
// Returns a pointer to the scrollable LayerAndroid at the given point.
@@ -9290,6 +9278,6 @@ public class WebView extends AbsoluteLayout
*/
private native boolean nativeScrollLayer(int layer, int newX, int newY);
private native int nativeGetBackgroundColor();
- native void nativeSetProperty(String key, String value);
+ native boolean nativeSetProperty(String key, String value);
native String nativeGetProperty(String key);
}
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 70e48ad74e8d..2bcb0202955f 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -709,10 +709,14 @@ class ZoomManager {
final WebSettings settings = mWebView.getSettings();
final PackageManager pm = context.getPackageManager();
- mSupportMultiTouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)
+ mSupportMultiTouch =
+ (pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)
+ || pm.hasSystemFeature(PackageManager.FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT))
&& settings.supportZoom() && settings.getBuiltInZoomControls();
- mAllowPanAndScale = pm.hasSystemFeature(
- PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);
+ mAllowPanAndScale =
+ pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT)
+ || pm.hasSystemFeature(PackageManager.FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT);
+
if (mSupportMultiTouch && (mScaleDetector == null)) {
mScaleDetector = new ScaleGestureDetector(context, new ScaleDetectorListener());
} else if (!mSupportMultiTouch && (mScaleDetector != null)) {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index db4df40a43b5..86f061aedfe6 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -54,6 +54,7 @@ import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.ViewParent;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -637,6 +638,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private boolean mIsAttached;
/**
+ * Track the item count from the last time we handled a data change.
+ */
+ private int mLastHandledItemCount;
+
+ /**
* Interface definition for a callback to be invoked when the list or grid
* has been scrolled.
*/
@@ -1829,10 +1835,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// Check if our previous measured size was at a point where we should scroll later.
if (mTranscriptMode == TRANSCRIPT_MODE_NORMAL) {
final int childCount = getChildCount();
- final int listBottom = getBottom() - getPaddingBottom();
+ final int listBottom = getHeight() - getPaddingBottom();
final View lastChild = getChildAt(childCount - 1);
final int lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;
- mForceTranscriptScroll = mFirstPosition + childCount >= mOldItemCount &&
+ mForceTranscriptScroll = mFirstPosition + childCount >= mLastHandledItemCount &&
lastBottom <= listBottom;
}
}
@@ -2783,7 +2789,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
// Time to start stealing events! Once we've stolen them, don't let anyone
// steal from us
- requestDisallowInterceptTouchEvent(true);
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
return true;
}
@@ -2843,9 +2852,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
View v;
int deltaY;
- if (mVelocityTracker == null) {
- mVelocityTracker = VelocityTracker.obtain();
- }
+ initVelocityTrackerIfNotExists();
mVelocityTracker.addMovement(ev);
switch (action & MotionEvent.ACTION_MASK) {
@@ -2950,7 +2957,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// Make sure that we do so in case we're in a parent that can intercept.
if ((mGroupFlags & FLAG_DISALLOW_INTERCEPT) == 0 &&
Math.abs(deltaY) > mTouchSlop) {
- requestDisallowInterceptTouchEvent(true);
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
}
final int rawDeltaY = deltaY;
@@ -2993,7 +3003,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
0, mOverscrollDistance, true);
if (Math.abs(mOverscrollDistance) == Math.abs(mScrollY)) {
// Don't allow overfling if we're at the edge.
- mVelocityTracker.clear();
+ if (mVelocityTracker != null) {
+ mVelocityTracker.clear();
+ }
}
final int overscrollMode = getOverScrollMode();
@@ -3254,10 +3266,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
handler.removeCallbacks(mPendingCheckForLongPress);
}
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
+ recycleVelocityTracker();
mActivePointerId = INVALID_POINTER;
@@ -3302,10 +3311,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
handler.removeCallbacks(mPendingCheckForLongPress);
}
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
+ recycleVelocityTracker();
}
if (mEdgeGlowTop != null) {
@@ -3445,6 +3451,35 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mGlowPaddingRight = rightPadding;
}
+ private void initOrResetVelocityTracker() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ } else {
+ mVelocityTracker.clear();
+ }
+ }
+
+ private void initVelocityTrackerIfNotExists() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ }
+
+ private void recycleVelocityTracker() {
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ }
+
+ @Override
+ public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+ if (disallowIntercept) {
+ recycleVelocityTracker();
+ }
+ super.requestDisallowInterceptTouchEvent(disallowIntercept);
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
@@ -3482,6 +3517,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
clearScrollingCache();
}
mLastY = Integer.MIN_VALUE;
+ initOrResetVelocityTracker();
+ mVelocityTracker.addMovement(ev);
if (touchMode == TOUCH_MODE_FLING) {
return true;
}
@@ -3497,6 +3534,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mActivePointerId = ev.getPointerId(pointerIndex);
}
final int y = (int) ev.getY(pointerIndex);
+ initVelocityTrackerIfNotExists();
+ mVelocityTracker.addMovement(ev);
if (startScrollIfNeeded(y - mMotionY)) {
return true;
}
@@ -3505,9 +3544,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
break;
}
+ case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
mTouchMode = TOUCH_MODE_REST;
mActivePointerId = INVALID_POINTER;
+ recycleVelocityTracker();
reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
break;
}
@@ -4744,6 +4785,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
@Override
protected void handleDataChanged() {
int count = mItemCount;
+ int lastHandledItemCount = mLastHandledItemCount;
+ mLastHandledItemCount = mItemCount;
if (count > 0) {
int newPos;
@@ -4765,10 +4808,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
return;
}
final int childCount = getChildCount();
- final int listBottom = getBottom() - getPaddingBottom();
+ final int listBottom = getHeight() - getPaddingBottom();
final View lastChild = getChildAt(childCount - 1);
final int lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;
- if (mFirstPosition + childCount >= mOldItemCount && lastBottom <= listBottom) {
+ if (mFirstPosition + childCount >= lastHandledItemCount &&
+ lastBottom <= listBottom) {
mLayoutMode = LAYOUT_FORCE_BOTTOM;
return;
}
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java
index 4b0a6da774e9..9fea506429cf 100644
--- a/core/java/android/widget/ActivityChooserModel.java
+++ b/core/java/android/widget/ActivityChooserModel.java
@@ -131,6 +131,30 @@ public class ActivityChooserModel extends DataSetObservable {
}
/**
+ * Listener for choosing an activity.
+ */
+ public interface OnChooseActivityListener {
+
+ /**
+ * Called when an activity has been chosen. The client can decide whether
+ * an activity can be chosen and if so the caller of
+ * {@link ActivityChooserModel#chooseActivity(int)} will receive and {@link Intent}
+ * for launching it.
+ * <p>
+ * <strong>Note:</strong> Modifying the intent is not permitted and
+ * any changes to the latter will be ignored.
+ * </p>
+ *
+ * @param host The listener's host model.
+ * @param intent The intent for launching the chosen activity.
+ * @return Whether the intent is handled and should not be delivered to clients.
+ *
+ * @see ActivityChooserModel#chooseActivity(int)
+ */
+ public boolean onChooseActivity(ActivityChooserModel host, Intent intent);
+ }
+
+ /**
* Flag for selecting debug mode.
*/
private static final boolean DEBUG = false;
@@ -287,6 +311,11 @@ public class ActivityChooserModel extends DataSetObservable {
private final Handler mHandler = new Handler();
/**
+ * Policy for controlling how the model handles chosen activities.
+ */
+ private OnChooseActivityListener mActivityChoserModelPolicy;
+
+ /**
* Gets the data model backed by the contents of the provided file with historical data.
* Note that only one data model is backed by a given file, thus multiple calls with
* the same file name will return the same model instance. If no such instance is present
@@ -426,9 +455,11 @@ public class ActivityChooserModel extends DataSetObservable {
* the client solely to let additional customization before the start.
* </p>
*
- * @return Whether adding succeeded.
+ * @return An {@link Intent} for launching the activity or null if the
+ * policy has consumed the intent.
*
* @see HistoricalRecord
+ * @see OnChooseActivityListener
*/
public Intent chooseActivity(int index) {
ActivityResolveInfo chosenActivity = mActivites.get(index);
@@ -436,17 +467,37 @@ public class ActivityChooserModel extends DataSetObservable {
ComponentName chosenName = new ComponentName(
chosenActivity.resolveInfo.activityInfo.packageName,
chosenActivity.resolveInfo.activityInfo.name);
- HistoricalRecord historicalRecord = new HistoricalRecord(chosenName,
- System.currentTimeMillis(), DEFAULT_HISTORICAL_RECORD_WEIGHT);
- addHisoricalRecord(historicalRecord);
Intent choiceIntent = new Intent(mIntent);
choiceIntent.setComponent(chosenName);
+ if (mActivityChoserModelPolicy != null) {
+ // Do not allow the policy to change the intent.
+ Intent choiceIntentCopy = new Intent(choiceIntent);
+ final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this,
+ choiceIntentCopy);
+ if (handled) {
+ return null;
+ }
+ }
+
+ HistoricalRecord historicalRecord = new HistoricalRecord(chosenName,
+ System.currentTimeMillis(), DEFAULT_HISTORICAL_RECORD_WEIGHT);
+ addHisoricalRecord(historicalRecord);
+
return choiceIntent;
}
/**
+ * Sets the listener for choosing an activity.
+ *
+ * @param listener The listener.
+ */
+ public void setOnChooseActivityListener(OnChooseActivityListener listener) {
+ mActivityChoserModelPolicy = listener;
+ }
+
+ /**
* Gets the default activity, The default activity is defined as the one
* with highest rank i.e. the first one in the list of activities that can
* handle the intent.
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index 45d73af58869..fcc79389718b 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -29,6 +29,8 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ActivityChooserModel.ActivityChooserModelClient;
import com.android.internal.R;
@@ -115,6 +117,19 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
};
+ private final OnGlobalLayoutListener mOnGlobalLayoutListener = new OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ if (isShowingPopup()) {
+ if (!isShown()) {
+ getListPopupWindow().dismiss();
+ } else {
+ getListPopupWindow().show();
+ }
+ }
+ }
+ };
+
/**
* Popup window for showing the activity overflow list.
*/
@@ -156,7 +171,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
* @param attrs A collection of attributes.
*/
public ActivityChooserView(Context context, AttributeSet attrs) {
- this(context, attrs, R.attr.actionButtonStyle);
+ this(context, attrs, 0);
}
/**
@@ -261,6 +276,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
throw new IllegalStateException("No data model. Did you call #setDataModel?");
}
+ getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
+
mAdapter.setMaxActivityCount(maxActivityCount);
final int activityCount = mAdapter.getActivityCount();
@@ -292,6 +309,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
public boolean dismissPopup() {
if (isShowingPopup()) {
getListPopupWindow().dismiss();
+ ViewTreeObserver viewTreeObserver = getViewTreeObserver();
+ if (viewTreeObserver.isAlive()) {
+ viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
+ }
}
return true;
}
@@ -322,6 +343,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
if (dataModel != null) {
dataModel.unregisterObserver(mModelDataSetOberver);
}
+ ViewTreeObserver viewTreeObserver = getViewTreeObserver();
+ if (viewTreeObserver.isAlive()) {
+ viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
+ }
mIsAttachedToWindow = false;
}
@@ -433,8 +458,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
} else {
// The first item in the model is default action => adjust index
- Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1);
- mContext.startActivity(launchIntent);
+ Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1);
+ if (launchIntent != null) {
+ mContext.startActivity(launchIntent);
+ }
}
} break;
default:
@@ -449,7 +476,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
ResolveInfo defaultActivity = mAdapter.getDefaultActivity();
final int index = mAdapter.getDataModel().getActivityIndex(defaultActivity);
Intent launchIntent = mAdapter.getDataModel().chooseActivity(index);
- mContext.startActivity(launchIntent);
+ if (launchIntent != null) {
+ mContext.startActivity(launchIntent);
+ }
} else if (view == mExpandActivityOverflowButton) {
mIsSelectingDefaultActivity = false;
showPopupUnchecked(mInitialActivityCount);
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 9f5737e21f90..f267458c3524 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -23,11 +23,11 @@ import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.SoundEffectConstants;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.accessibility.AccessibilityEvent;
@@ -278,6 +278,7 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
*/
public boolean performItemClick(View view, int position, long id) {
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+
if (mOnItemClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
mOnItemClickListener.onItemClick(this, view, position, id);
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index 593cb59c9fbb..44f04db058d5 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -206,13 +206,9 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
public void addAll(T ... items) {
synchronized (mLock) {
if (mOriginalValues != null) {
- for (T item : items) {
- mOriginalValues.add(item);
- }
+ Collections.addAll(mOriginalValues, items);
} else {
- for (T item : items) {
- mObjects.add(item);
- }
+ Collections.addAll(mObjects, items);
}
}
if (mNotifyOnChange) notifyDataSetChanged();
@@ -462,18 +458,22 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
}
if (prefix == null || prefix.length() == 0) {
+ ArrayList<T> list;
synchronized (mLock) {
- ArrayList<T> list = new ArrayList<T>(mOriginalValues);
- results.values = list;
- results.count = list.size();
+ list = new ArrayList<T>(mOriginalValues);
}
+ results.values = list;
+ results.count = list.size();
} else {
String prefixString = prefix.toString().toLowerCase();
- final ArrayList<T> values = mOriginalValues;
- final int count = values.size();
+ ArrayList<T> values;
+ synchronized (mLock) {
+ values = new ArrayList<T>(mOriginalValues);
+ }
- final ArrayList<T> newValues = new ArrayList<T>(count);
+ final int count = values.size();
+ final ArrayList<T> newValues = new ArrayList<T>();
for (int i = 0; i < count; i++) {
final T value = values.get(i);
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index b428301bfaef..d638732ad0d2 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -399,6 +399,35 @@ public class HorizontalScrollView extends FrameLayout {
return false;
}
+ private void initOrResetVelocityTracker() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ } else {
+ mVelocityTracker.clear();
+ }
+ }
+
+ private void initVelocityTrackerIfNotExists() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ }
+
+ private void recycleVelocityTracker() {
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ }
+
+ @Override
+ public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+ if (disallowIntercept) {
+ recycleVelocityTracker();
+ }
+ super.requestDisallowInterceptTouchEvent(disallowIntercept);
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
/*
@@ -440,6 +469,8 @@ public class HorizontalScrollView extends FrameLayout {
if (xDiff > mTouchSlop) {
mIsBeingDragged = true;
mLastMotionX = x;
+ initVelocityTrackerIfNotExists();
+ mVelocityTracker.addMovement(ev);
if (mParent != null) mParent.requestDisallowInterceptTouchEvent(true);
}
break;
@@ -449,6 +480,7 @@ public class HorizontalScrollView extends FrameLayout {
final float x = ev.getX();
if (!inChild((int) x, (int) ev.getY())) {
mIsBeingDragged = false;
+ recycleVelocityTracker();
break;
}
@@ -459,6 +491,9 @@ public class HorizontalScrollView extends FrameLayout {
mLastMotionX = x;
mActivePointerId = ev.getPointerId(0);
+ initOrResetVelocityTracker();
+ mVelocityTracker.addMovement(ev);
+
/*
* If being flinged and user touches the screen, initiate drag;
* otherwise don't. mScroller.isFinished should be false when
@@ -498,9 +533,7 @@ public class HorizontalScrollView extends FrameLayout {
@Override
public boolean onTouchEvent(MotionEvent ev) {
- if (mVelocityTracker == null) {
- mVelocityTracker = VelocityTracker.obtain();
- }
+ initVelocityTrackerIfNotExists();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
@@ -584,11 +617,8 @@ public class HorizontalScrollView extends FrameLayout {
mActivePointerId = INVALID_POINTER;
mIsBeingDragged = false;
+ recycleVelocityTracker();
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
if (mEdgeGlowLeft != null) {
mEdgeGlowLeft.onRelease();
mEdgeGlowRight.onRelease();
@@ -602,10 +632,8 @@ public class HorizontalScrollView extends FrameLayout {
}
mActivePointerId = INVALID_POINTER;
mIsBeingDragged = false;
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
+ recycleVelocityTracker();
+
if (mEdgeGlowLeft != null) {
mEdgeGlowLeft.onRelease();
mEdgeGlowRight.onRelease();
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index fc609492b4b4..b92130d13b4e 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -83,7 +83,6 @@ public class ImageView extends View {
// Avoid allocations...
private RectF mTempSrc = new RectF();
private RectF mTempDst = new RectF();
- private float[] mTempPoints;
private boolean mCropToPadding;
@@ -347,29 +346,13 @@ public class ImageView extends View {
if (mDrawable != drawable) {
mResource = 0;
mUri = null;
+
int oldWidth = mDrawableWidth;
int oldHeight = mDrawableHeight;
- updateDrawable(drawable);
- boolean needsLayout;
- if (mScaleType == ScaleType.CENTER) {
- needsLayout = mDrawableWidth != oldWidth || mDrawableHeight != oldHeight;
- } else {
- if (mTempPoints == null) {
- mTempPoints = new float[4];
- }
- float[] points = mTempPoints;
- points[0] = oldWidth;
- points[1] = oldHeight;
- points[2] = mDrawableWidth;
- points[3] = mDrawableHeight;
- if (!mMatrix.isIdentity()) {
- mMatrix.mapPoints(points);
- }
- needsLayout = points[0] != points[2] || points[1] != points[3];
- }
+ updateDrawable(drawable);
- if (needsLayout) {
+ if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
requestLayout();
}
invalidate();
@@ -621,6 +604,8 @@ public class ImageView extends View {
mDrawableHeight = d.getIntrinsicHeight();
applyColorMod();
configureBounds();
+ } else {
+ mDrawableWidth = mDrawableHeight = -1;
}
}
@@ -679,14 +664,14 @@ public class ImageView extends View {
h = mDrawableHeight;
if (w <= 0) w = 1;
if (h <= 0) h = 1;
-
+
// We are supposed to adjust view bounds to match the aspect
// ratio of our drawable. See if that is possible.
if (mAdjustViewBounds) {
resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;
resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;
- desiredAspect = (float)w/(float)h;
+ desiredAspect = (float) w / (float) h;
}
}
@@ -705,13 +690,11 @@ public class ImageView extends View {
*/
// Get the max possible width given our constraints
- widthSize = resolveAdjustedSize(w + pleft + pright,
- mMaxWidth, widthMeasureSpec);
-
+ widthSize = resolveAdjustedSize(w + pleft + pright, mMaxWidth, widthMeasureSpec);
+
// Get the max possible height given our constraints
- heightSize = resolveAdjustedSize(h + ptop + pbottom,
- mMaxHeight, heightMeasureSpec);
-
+ heightSize = resolveAdjustedSize(h + ptop + pbottom, mMaxHeight, heightMeasureSpec);
+
if (desiredAspect != 0.0f) {
// See what our actual aspect ratio is
float actualAspect = (float)(widthSize - pleft - pright) /
@@ -723,9 +706,8 @@ public class ImageView extends View {
// Try adjusting width to be proportional to height
if (resizeWidth) {
- int newWidth = (int)(desiredAspect *
- (heightSize - ptop - pbottom))
- + pleft + pright;
+ int newWidth = (int)(desiredAspect * (heightSize - ptop - pbottom)) +
+ pleft + pright;
if (newWidth <= widthSize) {
widthSize = newWidth;
done = true;
@@ -734,8 +716,8 @@ public class ImageView extends View {
// Try adjusting height to be proportional to width
if (!done && resizeHeight) {
- int newHeight = (int)((widthSize - pleft - pright)
- / desiredAspect) + ptop + pbottom;
+ int newHeight = (int)((widthSize - pleft - pright) / desiredAspect) +
+ ptop + pbottom;
if (newHeight <= heightSize) {
heightSize = newHeight;
}
@@ -859,7 +841,7 @@ public class ImageView extends View {
if (dwidth <= vwidth && dheight <= vheight) {
scale = 1.0f;
} else {
- scale = Math.min((float) vwidth / (float) dwidth,
+ scale = Math.min((float) vwidth / (float) dwidth,
(float) vheight / (float) dheight);
}
@@ -874,8 +856,7 @@ public class ImageView extends View {
mTempDst.set(0, 0, vwidth, vheight);
mDrawMatrix = mMatrix;
- mDrawMatrix.setRectToRect(mTempSrc, mTempDst,
- scaleTypeToScaleToFit(mScaleType));
+ mDrawMatrix.setRectToRect(mTempSrc, mTempDst, scaleTypeToScaleToFit(mScaleType));
}
}
}
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java
index 307959b0cac5..a2910afc86eb 100644
--- a/core/java/android/widget/ListPopupWindow.java
+++ b/core/java/android/widget/ListPopupWindow.java
@@ -449,6 +449,8 @@ public class ListPopupWindow {
if (popupBackground != null) {
popupBackground.getPadding(mTempRect);
mDropDownWidth = mTempRect.left + mTempRect.right + width;
+ } else {
+ setWidth(width);
}
}
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 946f009ce5ad..133f4353e550 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -3545,16 +3545,16 @@ public class ListView extends AbsListView {
* First look in our children, then in any header and footer views that may be scrolled off.
*/
@Override
- protected View findViewByPredicateTraversal(Predicate<View> predicate) {
+ protected View findViewByPredicateTraversal(Predicate<View> predicate, View childToSkip) {
View v;
- v = super.findViewByPredicateTraversal(predicate);
+ v = super.findViewByPredicateTraversal(predicate, childToSkip);
if (v == null) {
- v = findViewByPredicateInHeadersOrFooters(mHeaderViewInfos, predicate);
+ v = findViewByPredicateInHeadersOrFooters(mHeaderViewInfos, predicate, childToSkip);
if (v != null) {
return v;
}
- v = findViewByPredicateInHeadersOrFooters(mFooterViewInfos, predicate);
+ v = findViewByPredicateInHeadersOrFooters(mFooterViewInfos, predicate, childToSkip);
if (v != null) {
return v;
}
@@ -3568,7 +3568,7 @@ public class ListView extends AbsListView {
* the predicate.
*/
View findViewByPredicateInHeadersOrFooters(ArrayList<FixedViewInfo> where,
- Predicate<View> predicate) {
+ Predicate<View> predicate, View childToSkip) {
if (where != null) {
int len = where.size();
View v;
@@ -3576,7 +3576,7 @@ public class ListView extends AbsListView {
for (int i = 0; i < len; i++) {
v = where.get(i).view;
- if (!v.isRootNamespace()) {
+ if (v != childToSkip && !v.isRootNamespace()) {
v = v.findViewByPredicate(predicate);
if (v != null) {
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index aa23ad0f6fa4..2a299bdcf00e 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -1208,7 +1208,10 @@ public class NumberPicker extends LinearLayout {
float textGapCount = selectorIndices.length - 1;
int selectorTextGapHeight = (int) (totalTextGapHeight / textGapCount + 0.5f);
mSelectorElementHeight = mTextSize + selectorTextGapHeight;
- mInitialScrollOffset = mTextSize - 3 * (mSelectorElementHeight % 2);
+ // Ensure that the middle item is positioned the same as the text in mInputText
+ int editTextTextPosition = mInputText.getBaseline() + mInputText.getTop();
+ mInitialScrollOffset = editTextTextPosition -
+ (mSelectorElementHeight * SELECTOR_MIDDLE_ITEM_INDEX);
mCurrentScrollOffset = mInitialScrollOffset;
updateInputTextView();
}
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 36927ca434ef..4d45c2fee094 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -1065,9 +1065,10 @@ public class PopupWindow {
private boolean findDropDownPosition(View anchor, WindowManager.LayoutParams p,
int xoff, int yoff) {
+ final int anchorHeight = anchor.getHeight();
anchor.getLocationInWindow(mDrawingLocation);
p.x = mDrawingLocation[0] + xoff;
- p.y = mDrawingLocation[1] + anchor.getHeight() + yoff;
+ p.y = mDrawingLocation[1] + anchorHeight + yoff;
boolean onTop = false;
@@ -1076,9 +1077,12 @@ public class PopupWindow {
anchor.getLocationOnScreen(mScreenLocation);
final Rect displayFrame = new Rect();
anchor.getWindowVisibleDisplayFrame(displayFrame);
+
+ int screenY = mScreenLocation[1] + anchorHeight + yoff;
final View root = anchor.getRootView();
- if (p.y + mPopupHeight > displayFrame.bottom || p.x + mPopupWidth - root.getWidth() > 0) {
+ if (screenY + mPopupHeight > displayFrame.bottom ||
+ p.x + mPopupWidth - root.getWidth() > 0) {
// if the drop down disappears at the bottom of the screen. we try to
// scroll a parent scrollview or move the drop down back up on top of
// the edit box
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index e59f731b6148..09c875bd337e 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -408,6 +408,36 @@ public class ScrollView extends FrameLayout {
return false;
}
+ private void initOrResetVelocityTracker() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ } else {
+ mVelocityTracker.clear();
+ }
+ }
+
+ private void initVelocityTrackerIfNotExists() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ }
+
+ private void recycleVelocityTracker() {
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ }
+
+ @Override
+ public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+ if (disallowIntercept) {
+ recycleVelocityTracker();
+ }
+ super.requestDisallowInterceptTouchEvent(disallowIntercept);
+ }
+
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
/*
@@ -449,6 +479,8 @@ public class ScrollView extends FrameLayout {
if (yDiff > mTouchSlop) {
mIsBeingDragged = true;
mLastMotionY = y;
+ initVelocityTrackerIfNotExists();
+ mVelocityTracker.addMovement(ev);
if (mScrollStrictSpan == null) {
mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll");
}
@@ -460,6 +492,7 @@ public class ScrollView extends FrameLayout {
final float y = ev.getY();
if (!inChild((int) ev.getX(), (int) y)) {
mIsBeingDragged = false;
+ recycleVelocityTracker();
break;
}
@@ -470,6 +503,8 @@ public class ScrollView extends FrameLayout {
mLastMotionY = y;
mActivePointerId = ev.getPointerId(0);
+ initOrResetVelocityTracker();
+ mVelocityTracker.addMovement(ev);
/*
* If being flinged and user touches the screen, initiate drag;
* otherwise don't. mScroller.isFinished should be false when
@@ -487,6 +522,7 @@ public class ScrollView extends FrameLayout {
/* Release the drag */
mIsBeingDragged = false;
mActivePointerId = INVALID_POINTER;
+ recycleVelocityTracker();
if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0, getScrollRange())) {
invalidate();
}
@@ -505,9 +541,7 @@ public class ScrollView extends FrameLayout {
@Override
public boolean onTouchEvent(MotionEvent ev) {
- if (mVelocityTracker == null) {
- mVelocityTracker = VelocityTracker.obtain();
- }
+ initVelocityTrackerIfNotExists();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
@@ -1441,10 +1475,7 @@ public class ScrollView extends FrameLayout {
private void endDrag() {
mIsBeingDragged = false;
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- }
+ recycleVelocityTracker();
if (mEdgeGlowTop != null) {
mEdgeGlowTop.onRelease();
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 4eecd6458145..f230031908cf 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -35,6 +35,7 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.speech.RecognizerIntent;
import android.text.Editable;
import android.text.InputType;
@@ -138,6 +139,12 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
}
};
+ private Runnable mUpdateDrawableStateRunnable = new Runnable() {
+ public void run() {
+ updateFocusedState();
+ }
+ };
+
// For voice searching
private final Intent mVoiceWebSearchIntent;
private final Intent mVoiceAppSearchIntent;
@@ -624,15 +631,42 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ // Let the standard measurements take effect in iconified state.
+ if (isIconified()) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ return;
+ }
+
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
- if ((widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.EXACTLY) && mMaxWidth > 0
- && width > mMaxWidth) {
- super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxWidth, widthMode), heightMeasureSpec);
- } else {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ switch (widthMode) {
+ case MeasureSpec.AT_MOST:
+ // If there is an upper limit, don't exceed maximum width (explicit or implicit)
+ if (mMaxWidth > 0) {
+ width = Math.min(mMaxWidth, width);
+ } else {
+ width = Math.min(getPreferredWidth(), width);
+ }
+ break;
+ case MeasureSpec.EXACTLY:
+ // If an exact width is specified, still don't exceed any specified maximum width
+ if (mMaxWidth > 0) {
+ width = Math.min(mMaxWidth, width);
+ }
+ break;
+ case MeasureSpec.UNSPECIFIED:
+ // Use maximum width, if specified, else preferred width
+ width = mMaxWidth > 0 ? mMaxWidth : getPreferredWidth();
+ break;
}
+ widthMode = MeasureSpec.EXACTLY;
+ super.onMeasure(MeasureSpec.makeMeasureSpec(width, widthMode), heightMeasureSpec);
+ }
+
+ private int getPreferredWidth() {
+ return getContext().getResources()
+ .getDimensionPixelSize(R.dimen.search_view_preferred_width);
}
private void updateViewsVisibility(final boolean collapsed) {
@@ -695,13 +729,25 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
// Should we show the close button? It is not shown if there's no focus,
// field is not iconified by default and there is no text in it.
final boolean showClose = hasText || (mIconifiedByDefault && !mExpandedInActionView);
- mCloseButton.setVisibility(showClose ? VISIBLE : INVISIBLE);
+ mCloseButton.setVisibility(showClose ? VISIBLE : GONE);
mCloseButton.getDrawable().setState(hasText ? ENABLED_STATE_SET : EMPTY_STATE_SET);
}
- private void updateFocusedState(boolean focused) {
+ private void postUpdateFocusedState() {
+ post(mUpdateDrawableStateRunnable);
+ }
+
+ private void updateFocusedState() {
+ boolean focused = mQueryTextView.hasFocus();
mSearchPlate.getBackground().setState(focused ? FOCUSED_STATE_SET : EMPTY_STATE_SET);
mSubmitArea.getBackground().setState(focused ? FOCUSED_STATE_SET : EMPTY_STATE_SET);
+ invalidate();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ removeCallbacks(mUpdateDrawableStateRunnable);
+ super.onDetachedFromWindow();
}
private void setImeVisibility(final boolean visible) {
@@ -991,7 +1037,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
*/
private void updateVoiceButton(boolean empty) {
int visibility = GONE;
- if (mVoiceButtonEnabled && !isIconified() && (empty || !mSubmitButtonEnabled)) {
+ if (mVoiceButtonEnabled && !isIconified() && empty) {
visibility = VISIBLE;
mSubmitButton.setVisibility(GONE);
}
@@ -1097,15 +1143,19 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
void onTextFocusChanged() {
updateViewsVisibility(isIconified());
- updateFocusedState(mQueryTextView.hasFocus());
+ // Delayed update to make sure that the focus has settled down and window focus changes
+ // don't affect it. A synchronous update was not working.
+ postUpdateFocusedState();
if (mQueryTextView.hasFocus()) {
forceSuggestionQuery();
}
}
@Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
+ public void onWindowFocusChanged(boolean hasWindowFocus) {
+ super.onWindowFocusChanged(hasWindowFocus);
+
+ postUpdateFocusedState();
}
/**
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index 665109a0b2e0..6e29024bcef4 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -28,6 +28,7 @@ import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View;
+import android.widget.ActivityChooserModel.OnChooseActivityListener;
import com.android.internal.R;
@@ -73,6 +74,27 @@ import com.android.internal.R;
public class ShareActionProvider extends ActionProvider {
/**
+ * Listener for the event of selecting a share target.
+ */
+ public interface OnShareTargetSelectedListener {
+
+ /**
+ * Called when a share target has been selected. The client can
+ * decide whether to handle the intent or rely on the default
+ * behavior which is launching it.
+ * <p>
+ * <strong>Note:</strong> Modifying the intent is not permitted and
+ * any changes to the latter will be ignored.
+ * </p>
+ *
+ * @param source The source of the notification.
+ * @param intent The intent for launching the chosen share target.
+ * @return Whether the client has handled the intent.
+ */
+ public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);
+ }
+
+ /**
* The default for the maximal number of activities shown in the sub-menu.
*/
private static final int DEFAULT_INITIAL_ACTIVITY_COUNT = 4;
@@ -103,6 +125,10 @@ public class ShareActionProvider extends ActionProvider {
*/
private String mShareHistoryFileName = DEFAULT_SHARE_HISTORY_FILE_NAME;
+ private OnShareTargetSelectedListener mOnShareTargetSelectedListener;
+
+ private OnChooseActivityListener mOnChooseActivityListener;
+
/**
* Creates a new instance.
*
@@ -114,6 +140,21 @@ public class ShareActionProvider extends ActionProvider {
}
/**
+ * Sets a listener to be notified when a share target has been selected.
+ * The listener can optionally decide to handle the selection and
+ * not rely on the default behavior which is to launch the activity.
+ * <p>
+ * <strong>Note:</strong> If you choose the backing share history file
+ * you will still be notified in this callback.
+ * </p>
+ * @param listener The listener.
+ */
+ public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener) {
+ mOnShareTargetSelectedListener = listener;
+ setActivityChooserPolicyIfNeeded();
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -192,6 +233,7 @@ public class ShareActionProvider extends ActionProvider {
*/
public void setShareHistoryFileName(String shareHistoryFile) {
mShareHistoryFileName = shareHistoryFile;
+ setActivityChooserPolicyIfNeeded();
}
/**
@@ -229,8 +271,39 @@ public class ShareActionProvider extends ActionProvider {
mShareHistoryFileName);
final int itemId = item.getItemId();
Intent launchIntent = dataModel.chooseActivity(itemId);
- mContext.startActivity(launchIntent);
+ if (launchIntent != null) {
+ mContext.startActivity(launchIntent);
+ }
return true;
}
}
+
+ /**
+ * Set the activity chooser policy of the model backed by the current
+ * share history file if needed which is if there is a registered callback.
+ */
+ private void setActivityChooserPolicyIfNeeded() {
+ if (mOnShareTargetSelectedListener == null) {
+ return;
+ }
+ if (mOnChooseActivityListener == null) {
+ mOnChooseActivityListener = new ShareAcitivityChooserModelPolicy();
+ }
+ ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
+ dataModel.setOnChooseActivityListener(mOnChooseActivityListener);
+ }
+
+ /**
+ * Policy that delegates to the {@link OnShareTargetSelectedListener}, if such.
+ */
+ private class ShareAcitivityChooserModelPolicy implements OnChooseActivityListener {
+ @Override
+ public boolean onChooseActivity(ActivityChooserModel host, Intent intent) {
+ if (mOnShareTargetSelectedListener != null) {
+ return mOnShareTargetSelectedListener.onShareTargetSelected(
+ ShareActionProvider.this, intent);
+ }
+ return false;
+ }
+ }
}
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index 2fba18b12ec8..27d44bf9efe8 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -714,14 +714,27 @@ public class Spinner extends AbsSpinner implements OnClickListener {
@Override
public void show() {
+ final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
if (mDropDownWidth == WRAP_CONTENT) {
- setWidth(Math.max(measureContentWidth((SpinnerAdapter) mAdapter, getBackground()),
- Spinner.this.getWidth()));
+ final int spinnerWidth = Spinner.this.getWidth();
+ final int spinnerPaddingRight = Spinner.this.getPaddingRight();
+ setContentWidth(Math.max(
+ measureContentWidth((SpinnerAdapter) mAdapter, getBackground()),
+ spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
} else if (mDropDownWidth == MATCH_PARENT) {
- setWidth(Spinner.this.getWidth());
+ final int spinnerWidth = Spinner.this.getWidth();
+ final int spinnerPaddingRight = Spinner.this.getPaddingRight();
+ setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);
} else {
- setWidth(mDropDownWidth);
+ setContentWidth(mDropDownWidth);
}
+ final Drawable background = getBackground();
+ int bgOffset = 0;
+ if (background != null) {
+ background.getPadding(mTempRect);
+ bgOffset = -mTempRect.left;
+ }
+ setHorizontalOffset(bgOffset + spinnerPaddingLeft);
setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
super.show();
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 57a85311b600..88d7230e6476 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -24,6 +24,7 @@ import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -566,10 +567,15 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
false); // no inflate params
final TextView tv = (TextView) tabIndicator.findViewById(R.id.title);
+ final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon);
+
+ // when icon is gone by default, we're in exclusive mode
+ final boolean exclusive = iconView.getVisibility() == View.GONE;
+ final boolean bindIcon = !exclusive || TextUtils.isEmpty(mLabel);
+
tv.setText(mLabel);
- final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon);
- if (mIcon != null) {
+ if (bindIcon && mIcon != null) {
iconView.setImageDrawable(mIcon);
iconView.setVisibility(VISIBLE);
}
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 3d1dedc630cb..9afb6257ab6f 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -62,8 +62,6 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
private boolean mDrawBottomStrips = true;
private boolean mStripMoved;
- private Drawable mDividerDrawable;
-
private final Rect mBounds = new Rect();
// When positive, the widths and heights of tabs will be imposed so that they fit in parent
@@ -79,16 +77,14 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
}
public TabWidget(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs);
+ super(context, attrs, defStyle);
- TypedArray a =
- context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TabWidget,
- defStyle, 0);
+ final TypedArray a = context.obtainStyledAttributes(
+ attrs, com.android.internal.R.styleable.TabWidget, defStyle, 0);
- mDrawBottomStrips = a.getBoolean(R.styleable.TabWidget_tabStripEnabled, true);
- mDividerDrawable = a.getDrawable(R.styleable.TabWidget_divider);
- mLeftStrip = a.getDrawable(R.styleable.TabWidget_tabStripLeft);
- mRightStrip = a.getDrawable(R.styleable.TabWidget_tabStripRight);
+ setStripEnabled(a.getBoolean(R.styleable.TabWidget_tabStripEnabled, true));
+ setLeftStripDrawable(a.getDrawable(R.styleable.TabWidget_tabStripLeft));
+ setRightStripDrawable(a.getDrawable(R.styleable.TabWidget_tabStripRight));
a.recycle();
@@ -119,7 +115,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
}
private void initTabWidget() {
- mGroupFlags |= FLAG_USE_CHILD_DRAWING_ORDER;
+ setChildrenDrawingOrderEnabled(true);
final Context context = mContext;
final Resources resources = context.getResources();
@@ -146,7 +142,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
mRightStrip = resources.getDrawable(
com.android.internal.R.drawable.tab_bottom_right);
}
- }
+ }
// Deal with focus, as we don't want the focus to go by default
// to a tab other than the current tab
@@ -158,8 +154,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
void measureChildBeforeLayout(View child, int childIndex,
int widthMeasureSpec, int totalWidth,
int heightMeasureSpec, int totalHeight) {
-
- if (mImposedTabsHeight >= 0) {
+ if (!isMeasureWithLargestChildEnabled() && mImposedTabsHeight >= 0) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(
totalWidth + mImposedTabWidths[childIndex], MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(mImposedTabsHeight,
@@ -223,11 +218,6 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* @return the tab indicator view at the given index
*/
public View getChildTabViewAt(int index) {
- // If we are using dividers, then instead of tab views at 0, 1, 2, ...
- // we have tab views at 0, 2, 4, ...
- if (mDividerDrawable != null) {
- index *= 2;
- }
return getChildAt(index);
}
@@ -236,15 +226,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* @return the number of tab indicator views.
*/
public int getTabCount() {
- int children = getChildCount();
-
- // If we have dividers, then we will always have an odd number of
- // children: 1, 3, 5, ... and we want to convert that sequence to
- // this: 1, 2, 3, ...
- if (mDividerDrawable != null) {
- children = (children + 1) / 2;
- }
- return children;
+ return getChildCount();
}
/**
@@ -253,9 +235,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
*/
@Override
public void setDividerDrawable(Drawable drawable) {
- mDividerDrawable = drawable;
- requestLayout();
- invalidate();
+ super.setDividerDrawable(drawable);
}
/**
@@ -264,9 +244,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* divider.
*/
public void setDividerDrawable(int resId) {
- mDividerDrawable = mContext.getResources().getDrawable(resId);
- requestLayout();
- invalidate();
+ setDividerDrawable(getResources().getDrawable(resId));
}
/**
@@ -287,9 +265,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* left strip drawable
*/
public void setLeftStripDrawable(int resId) {
- mLeftStrip = mContext.getResources().getDrawable(resId);
- requestLayout();
- invalidate();
+ setLeftStripDrawable(getResources().getDrawable(resId));
}
/**
@@ -300,7 +276,8 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
public void setRightStripDrawable(Drawable drawable) {
mRightStrip = drawable;
requestLayout();
- invalidate(); }
+ invalidate();
+ }
/**
* Sets the drawable to use as the right part of the strip below the
@@ -309,11 +286,9 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* right strip drawable
*/
public void setRightStripDrawable(int resId) {
- mRightStrip = mContext.getResources().getDrawable(resId);
- requestLayout();
- invalidate();
+ setRightStripDrawable(getResources().getDrawable(resId));
}
-
+
/**
* Controls whether the bottom strips on the tab indicators are drawn or
* not. The default is to draw them. If the user specifies a custom
@@ -471,8 +446,8 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
- int count = getTabCount();
+ final int count = getTabCount();
for (int i = 0; i < count; i++) {
View child = getChildTabViewAt(i);
child.setEnabled(enabled);
@@ -493,18 +468,6 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
child.setFocusable(true);
child.setClickable(true);
- // If we have dividers between the tabs and we already have at least one
- // tab, then add a divider before adding the next tab.
- if (mDividerDrawable != null && getTabCount() > 0) {
- ImageView divider = new ImageView(mContext);
- final LinearLayout.LayoutParams lp = new LayoutParams(
- mDividerDrawable.getIntrinsicWidth(),
- LayoutParams.MATCH_PARENT);
- lp.setMargins(0, 0, 0, 0);
- divider.setLayoutParams(lp);
- divider.setBackgroundDrawable(mDividerDrawable);
- super.addView(divider);
- }
super.addView(child);
// TODO: detect this via geometry with a tabwidget listener rather
@@ -535,6 +498,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
mSelectionChangedListener = listener;
}
+ /** {@inheritDoc} */
public void onFocusChange(View v, boolean hasFocus) {
if (v == this && hasFocus && getTabCount() > 0) {
getChildTabViewAt(mSelectedTab).requestFocus();
@@ -588,6 +552,4 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
*/
void onTabSelectionChanged(int tabIndex, boolean clicked);
}
-
}
-
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a3e67cc24b3d..662b964fc3c7 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -139,11 +139,6 @@ import com.android.internal.widget.EditableInputConnection;
import org.xmlpull.v1.XmlPullParserException;
-import com.android.internal.util.FastMath;
-import com.android.internal.widget.EditableInputConnection;
-
-import org.xmlpull.v1.XmlPullParserException;
-
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.text.BreakIterator;
@@ -6068,6 +6063,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
int ellipsisWidth, boolean bringIntoView) {
stopMarquee();
+ // Update "old" cached values
+ mOldMaximum = mMaximum;
+ mOldMaxMode = mMaxMode;
+
mHighlightPathBogus = true;
if (w < 0) {
@@ -6129,7 +6128,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
0, mTransformed.length(),
mTextPaint, w, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, mEllipsize,
- ellipsisWidth);
+ ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
mLayout = new StaticLayout(mTransformed, mTextPaint,
w, alignment, mTextDir, mSpacingMult, mSpacingAdd,
@@ -6140,7 +6139,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
0, mTransformed.length(),
mTextPaint, w, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, mEllipsize,
- ellipsisWidth);
+ ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
mLayout = new StaticLayout(mTransformed, mTextPaint,
w, alignment, mTextDir, mSpacingMult, mSpacingAdd,
@@ -6195,7 +6194,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
0, mHint.length(),
mTextPaint, hintWidth, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, mEllipsize,
- ellipsisWidth);
+ ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
mHintLayout = new StaticLayout(mHint, mTextPaint,
hintWidth, alignment, mTextDir, mSpacingMult, mSpacingAdd,
@@ -6206,7 +6205,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
0, mHint.length(),
mTextPaint, hintWidth, alignment, mTextDir, mSpacingMult,
mSpacingAdd, mIncludePad, mEllipsize,
- ellipsisWidth);
+ ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE);
} else {
mHintLayout = new StaticLayout(mHint, mTextPaint,
hintWidth, alignment, mTextDir, mSpacingMult, mSpacingAdd,
@@ -6411,25 +6410,34 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (mHorizontallyScrolling) want = VERY_WIDE;
int hintWant = want;
- int hintWidth = mHintLayout == null ? hintWant : mHintLayout.getWidth();
+ int hintWidth = (mHintLayout == null) ? hintWant : mHintLayout.getWidth();
if (mLayout == null) {
makeNewLayout(want, hintWant, boring, hintBoring,
width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
- } else if ((mLayout.getWidth() != want) || (hintWidth != hintWant) ||
- (mLayout.getEllipsizedWidth() !=
- width - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
- if (mHint == null && mEllipsize == null &&
- want > mLayout.getWidth() &&
- (mLayout instanceof BoringLayout ||
- (fromexisting && des >= 0 && des <= want))) {
- mLayout.increaseWidthTo(want);
+ } else {
+ final boolean layoutChanged = (mLayout.getWidth() != want) ||
+ (hintWidth != hintWant) ||
+ (mLayout.getEllipsizedWidth() !=
+ width - getCompoundPaddingLeft() - getCompoundPaddingRight());
+
+ final boolean widthChanged = (mHint == null) &&
+ (mEllipsize == null) &&
+ (want > mLayout.getWidth()) &&
+ (mLayout instanceof BoringLayout || (fromexisting && des >= 0 && des <= want));
+
+ final boolean maximumChanged = (mMaxMode != mOldMaxMode) || (mMaximum != mOldMaximum);
+
+ if (layoutChanged || maximumChanged) {
+ if (!maximumChanged && widthChanged) {
+ mLayout.increaseWidthTo(want);
+ } else {
+ makeNewLayout(want, hintWant, boring, hintBoring,
+ width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
+ }
} else {
- makeNewLayout(want, hintWant, boring, hintBoring,
- width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
+ // Nothing has changed
}
- } else {
- // Width has not changed.
}
if (heightMode == MeasureSpec.EXACTLY) {
@@ -6489,7 +6497,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
desired += pad;
- layout.setMaximumVisibleLineCount(0);
if (mMaxMode == LINES) {
/*
@@ -6498,7 +6505,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
*/
if (cap) {
if (linecount > mMaximum) {
- layout.setMaximumVisibleLineCount(mMaximum);
desired = layout.getLineTop(mMaximum);
if (dr != null) {
@@ -7106,6 +7112,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* to constrain the text to a single line. Use <code>null</code>
* 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).
+ *
* @attr ref android.R.styleable#TextView_ellipsize
*/
public void setEllipsize(TextUtils.TruncateAt where) {
@@ -7951,8 +7961,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
startSelectionActionMode();
} else {
hideControllers();
- if (hasInsertionController() && !selectAllGotFocus && mText.length() > 0) {
- getInsertionController().show();
+ if (!selectAllGotFocus && mText.length() > 0) {
+ if (isCursorInsideEasyCorrectionSpan()) {
+ showSuggestions();
+ } else if (hasInsertionController()) {
+ getInsertionController().show();
+ }
}
}
}
@@ -7965,6 +7979,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
return superResult;
}
+ /**
+ * @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;
+ SuggestionSpan[] suggestionSpans = spannable.getSpans(getSelectionStart(),
+ getSelectionEnd(), SuggestionSpan.class);
+ for (int i = 0; i < suggestionSpans.length; i++) {
+ if ((suggestionSpans[i].getFlags() & SuggestionSpan.FLAG_EASY_CORRECT) != 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
if (mMovement != null && mText instanceof Spannable && mLayout != null) {
@@ -9469,8 +9499,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
public boolean isSuggestionsEnabled() {
if (!mSuggestionsEnabled) return false;
if ((mInputType & InputType.TYPE_MASK_CLASS) != InputType.TYPE_CLASS_TEXT) return false;
- final int variation =
- mInputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION);
+ final int variation = mInputType & EditorInfo.TYPE_MASK_VARIATION;
if (variation == EditorInfo.TYPE_TEXT_VARIATION_NORMAL ||
variation == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_SUBJECT ||
variation == EditorInfo.TYPE_TEXT_VARIATION_LONG_MESSAGE ||
@@ -10863,6 +10892,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private int mMinimum = 0;
private int mMinMode = LINES;
+ private int mOldMaximum = mMaximum;
+ private int mOldMaxMode = mMaxMode;
+
private int mMaxWidth = Integer.MAX_VALUE;
private int mMaxWidthMode = PIXELS;
private int mMinWidth = 0;
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 31360e104390..cfecca5188e3 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -111,6 +111,9 @@ public class ActionBarImpl extends ActionBar {
mContentView.setTranslationY(0);
mContainerView.setTranslationY(0);
}
+ if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
+ mSplitView.setVisibility(View.GONE);
+ }
mContainerView.setVisibility(View.GONE);
mContainerView.setTransitioning(false);
mCurrentShowAnim = null;
@@ -540,6 +543,7 @@ public class ActionBarImpl extends ActionBar {
}
if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
mSplitView.setAlpha(0);
+ mSplitView.setVisibility(View.VISIBLE);
b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 1));
}
anim.addListener(mShowListener);
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 7b65964a2fc0..df5071f39c84 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -67,12 +67,13 @@ public final class BatteryStatsImpl extends BatteryStats {
private static final String TAG = "BatteryStatsImpl";
private static final boolean DEBUG = false;
private static final boolean DEBUG_HISTORY = false;
+ private static final boolean USE_OLD_HISTORY = false; // for debugging.
// In-memory Parcel magic number, used to detect attempts to unmarshall bad data
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 60;
+ private static final int VERSION = 61 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -1285,6 +1286,10 @@ public final class BatteryStatsImpl extends BatteryStats {
void addHistoryRecordLocked(long curTime) {
addHistoryBufferLocked(curTime);
+ if (!USE_OLD_HISTORY) {
+ return;
+ }
+
if (!mHaveBatteryLevel || !mRecordingHistory) {
return;
}
@@ -1363,12 +1368,15 @@ public final class BatteryStatsImpl extends BatteryStats {
void clearHistoryLocked() {
if (DEBUG_HISTORY) Slog.i(TAG, "********** CLEARING HISTORY!");
- if (mHistory != null) {
- mHistoryEnd.next = mHistoryCache;
- mHistoryCache = mHistory;
- mHistory = mHistoryLastEnd = mHistoryEnd = null;
+ if (USE_OLD_HISTORY) {
+ if (mHistory != null) {
+ mHistoryEnd.next = mHistoryCache;
+ mHistoryCache = mHistory;
+ mHistory = mHistoryLastEnd = mHistoryEnd = null;
+ }
+ mNumHistoryItems = 0;
}
- mNumHistoryItems = 0;
+
mHistoryBaseTime = 0;
mLastHistoryTime = 0;
@@ -4863,7 +4871,9 @@ public final class BatteryStatsImpl extends BatteryStats {
}
long now = SystemClock.elapsedRealtime();
- addHistoryRecordLocked(now, HistoryItem.CMD_START);
+ if (USE_OLD_HISTORY) {
+ addHistoryRecordLocked(now, HistoryItem.CMD_START);
+ }
addHistoryBufferLocked(now, HistoryItem.CMD_START);
}
@@ -4923,6 +4933,9 @@ public final class BatteryStatsImpl extends BatteryStats {
}
void readOldHistory(Parcel in) {
+ if (!USE_OLD_HISTORY) {
+ return;
+ }
mHistory = mHistoryEnd = mHistoryCache = null;
long time;
while (in.dataAvail() > 0 && (time=in.readLong()) >= 0) {
@@ -4952,6 +4965,9 @@ public final class BatteryStatsImpl extends BatteryStats {
}
void writeOldHistory(Parcel out) {
+ if (!USE_OLD_HISTORY) {
+ return;
+ }
HistoryItem rec = mHistory;
while (rec != null) {
if (rec.time >= 0) rec.writeToParcel(out, 0);
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 16336e0e81b3..9c45dc64f469 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -474,7 +474,7 @@ public class ZygoteInit {
String args[] = {
"--setuid=1000",
"--setgid=1000",
- "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,3001,3002,3003,3006",
+ "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,3001,3002,3003,3006,3007",
"--capabilities=130104352,130104352",
"--runtime-init",
"--nice-name=system_server",
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index 09bebae4ca1d..cde9a49d77cc 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -18,19 +18,23 @@ package com.android.internal.view.menu;
import android.content.Context;
import android.content.res.Resources;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
+import android.widget.Toast;
/**
* @hide
*/
public class ActionMenuItemView extends LinearLayout
- implements MenuView.ItemView, View.OnClickListener, ActionMenuView.ActionMenuChildView {
+ implements MenuView.ItemView, View.OnClickListener, View.OnLongClickListener,
+ ActionMenuView.ActionMenuChildView {
private static final String TAG = "ActionMenuItemView";
private MenuItemImpl mItemData;
@@ -65,7 +69,9 @@ public class ActionMenuItemView extends LinearLayout
mTextButton = (Button) findViewById(com.android.internal.R.id.textButton);
mImageButton.setOnClickListener(this);
mTextButton.setOnClickListener(this);
+ mImageButton.setOnLongClickListener(this);
setOnClickListener(this);
+ setOnLongClickListener(this);
}
public MenuItemImpl getItemData() {
@@ -170,4 +176,35 @@ public class ActionMenuItemView extends LinearLayout
public boolean needsDividerAfter() {
return hasText();
}
+
+ @Override
+ public boolean onLongClick(View v) {
+ if (hasText()) {
+ // Don't show the cheat sheet for items that already show text.
+ return false;
+ }
+
+ final int[] screenPos = new int[2];
+ final Rect displayFrame = new Rect();
+ getLocationOnScreen(screenPos);
+ getWindowVisibleDisplayFrame(displayFrame);
+
+ final Context context = getContext();
+ final int width = getWidth();
+ final int height = getHeight();
+ final int midy = screenPos[1] + height / 2;
+ final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
+
+ Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT);
+ if (midy < displayFrame.height()) {
+ // Show along the top; follow action buttons
+ cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT,
+ screenWidth - screenPos[0] - width / 2, height);
+ } else {
+ // Show along the bottom center
+ cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height);
+ }
+ cheatSheet.show();
+ 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 aaae691667b9..df4243a4826f 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -19,6 +19,7 @@ package com.android.internal.view.menu;
import com.android.internal.view.menu.ActionMenuView.ActionMenuChildView;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
@@ -109,6 +110,16 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
mScrapActionButtonView = null;
}
+ public void onConfigurationChanged(Configuration newConfig) {
+ if (!mMaxItemsSet) {
+ mMaxItems = mContext.getResources().getInteger(
+ com.android.internal.R.integer.max_action_buttons);
+ if (mMenu != null) {
+ mMenu.onItemsChanged(true);
+ }
+ }
+ }
+
public void setWidthLimit(int width, boolean strict) {
mWidthLimit = width;
mStrictWidthLimit = strict;
@@ -173,7 +184,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
public void updateMenuView(boolean cleared) {
super.updateMenuView(cleared);
- final boolean hasOverflow = mReserveOverflow && mMenu.getNonActionItems().size() > 0;
+ final boolean hasOverflow = mReserveOverflow && mMenu != null &&
+ mMenu.getNonActionItems().size() > 0;
if (hasOverflow) {
if (mOverflowButton == null) {
mOverflowButton = new OverflowMenuButton(mContext);
@@ -390,7 +402,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
final boolean inGroup = seenGroups.get(groupId);
boolean isAction = (maxActions > 0 || inGroup) && widthLimit > 0 &&
(!mStrictWidthLimit || cellsRemaining > 0);
- maxActions--;
if (isAction) {
View v = getItemView(item, mScrapActionButtonView, parent);
@@ -429,11 +440,15 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
for (int j = 0; j < i; j++) {
MenuItemImpl areYouMyGroupie = visibleItems.get(j);
if (areYouMyGroupie.getGroupId() == groupId) {
+ // Give back the action slot
+ if (areYouMyGroupie.isActionButton()) maxActions++;
areYouMyGroupie.setIsActionButton(false);
}
}
}
+ if (isAction) maxActions--;
+
item.setIsActionButton(isAction);
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 267221bec8a4..d6139218e3d0 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -109,6 +109,13 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
// Divide the view into cells.
final int cellCount = widthSize / mMinCellSize;
final int cellSizeRemaining = widthSize % mMinCellSize;
+
+ if (cellCount == 0) {
+ // Give up, nothing fits.
+ setMeasuredDimension(widthSize, 0);
+ return;
+ }
+
final int cellSize = mMinCellSize + cellSizeRemaining / cellCount;
int cellsRemaining = cellCount;
@@ -213,7 +220,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
}
}
- final int extraPixels = (int) (cellsRemaining * cellSize / expandCount);
+ final int extraPixels = expandCount > 0 ?
+ (int) (cellsRemaining * cellSize / expandCount) : 0;
for (int i = 0; i < childCount; i++) {
if ((smallestItemsAt & (1 << i)) == 0) continue;
diff --git a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
index ed9d34a25a90..bec437a744d6 100644
--- a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
@@ -74,20 +74,24 @@ public abstract class BaseMenuPresenter implements MenuPresenter {
* Reuses item views when it can
*/
public void updateMenuView(boolean cleared) {
- mMenu.flagActionItems();
- ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
- final int itemCount = visibleItems.size();
final ViewGroup parent = (ViewGroup) mMenuView;
+ if (parent == null) return;
+
int childIndex = 0;
- for (int i = 0; i < itemCount; i++) {
- MenuItemImpl item = visibleItems.get(i);
- if (shouldIncludeItem(childIndex, item)) {
- final View convertView = parent.getChildAt(childIndex);
- final View itemView = getItemView(item, convertView, parent);
- if (itemView != convertView) {
- addItemView(itemView, childIndex);
+ if (mMenu != null) {
+ mMenu.flagActionItems();
+ ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
+ final int itemCount = visibleItems.size();
+ for (int i = 0; i < itemCount; i++) {
+ MenuItemImpl item = visibleItems.get(i);
+ if (shouldIncludeItem(childIndex, item)) {
+ final View convertView = parent.getChildAt(childIndex);
+ final View itemView = getItemView(item, convertView, parent);
+ if (itemView != convertView) {
+ addItemView(itemView, childIndex);
+ }
+ childIndex++;
}
- childIndex++;
}
}
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 5e70e4c3f7c5..5622b4459b4c 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -567,7 +567,7 @@ public class MenuBuilder implements Menu {
}
}
- if (changedAtLeastOneItem) onItemsChanged(false);
+ if (changedAtLeastOneItem) onItemsChanged(true);
}
public void setGroupEnabled(int group, boolean enabled) {
@@ -929,6 +929,7 @@ public class MenuBuilder implements Menu {
*
* @param structureChanged true if the menu structure changed,
* false if only item properties changed.
+ * (Visibility is a structural property since it affects layout.)
*/
void onItemsChanged(boolean structureChanged) {
if (!mPreventDispatchingItemsChanged) {
@@ -971,7 +972,7 @@ public class MenuBuilder implements Menu {
void onItemVisibleChanged(MenuItemImpl item) {
// Notify of items being changed
mIsVisibleItemsStale = true;
- onItemsChanged(false);
+ onItemsChanged(true);
}
/**
@@ -981,7 +982,7 @@ public class MenuBuilder implements Menu {
void onItemActionRequestChanged(MenuItemImpl item) {
// Notify of items being changed
mIsActionItemsStale = true;
- onItemsChanged(false);
+ onItemsChanged(true);
}
ArrayList<MenuItemImpl> getVisibleItems() {
diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java
index 8b53bb8dc363..04147ab99e4a 100644
--- a/core/java/com/android/internal/view/menu/MenuItemImpl.java
+++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java
@@ -585,7 +585,7 @@ public final class MenuItemImpl implements MenuItem {
public MenuItem setActionProvider(ActionProvider actionProvider) {
mActionView = null;
mActionProvider = actionProvider;
- mMenu.onItemsChanged(false);
+ mMenu.onItemsChanged(true); // Measurement can be changed
return this;
}
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 5645a6f5fbf8..45d38ae7333e 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -25,6 +25,7 @@ import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
@@ -92,6 +93,14 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
a.recycle();
}
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ if (mActionMenuPresenter != null) {
+ mActionMenuPresenter.onConfigurationChanged(newConfig);
+ }
+ }
+
public void setHeight(int height) {
mContentHeight = height;
}
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 83f329450f97..28181ba02823 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -34,14 +34,12 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
-import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.util.DisplayMetrics;
import android.util.Log;
import android.view.CollapsibleActionView;
import android.view.Gravity;
@@ -87,7 +85,7 @@ public class ActionBarView extends AbsActionBarView {
private int mContentHeight;
private int mNavigationMode;
- private int mDisplayOptions = ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP;
+ private int mDisplayOptions = -1;
private CharSequence mTitle;
private CharSequence mSubtitle;
private Drawable mIcon;
@@ -261,6 +259,9 @@ public class ActionBarView extends AbsActionBarView {
com.android.internal.R.attr.actionBarStyle, 0);
setContentHeight(a.getLayoutDimension(R.styleable.ActionBar_height, 0));
a.recycle();
+ if (mActionMenuPresenter != null) {
+ mActionMenuPresenter.onConfigurationChanged(newConfig);
+ }
}
@Override
@@ -373,8 +374,7 @@ public class ActionBarView extends AbsActionBarView {
mActionMenuPresenter.setExpandedActionViewsExclusive(
getResources().getBoolean(
com.android.internal.R.bool.action_bar_expanded_action_views_exclusive));
- builder.addMenuPresenter(mActionMenuPresenter);
- builder.addMenuPresenter(mExpandedMenuPresenter);
+ configPresenters(builder);
menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
final ViewGroup oldParent = (ViewGroup) menuView.getParent();
if (oldParent != null && oldParent != this) {
@@ -390,8 +390,7 @@ public class ActionBarView extends AbsActionBarView {
mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
// Span the whole width
layoutParams.width = LayoutParams.MATCH_PARENT;
- builder.addMenuPresenter(mActionMenuPresenter);
- builder.addMenuPresenter(mExpandedMenuPresenter);
+ configPresenters(builder);
menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
if (mSplitView != null) {
final ViewGroup oldParent = (ViewGroup) menuView.getParent();
@@ -407,6 +406,18 @@ public class ActionBarView extends AbsActionBarView {
mMenuView = menuView;
}
+ private void configPresenters(MenuBuilder builder) {
+ if (builder != null) {
+ builder.addMenuPresenter(mActionMenuPresenter);
+ builder.addMenuPresenter(mExpandedMenuPresenter);
+ } else {
+ mActionMenuPresenter.initForMenu(mContext, null);
+ mExpandedMenuPresenter.initForMenu(mContext, null);
+ mActionMenuPresenter.updateMenuView(true);
+ mExpandedMenuPresenter.updateMenuView(true);
+ }
+ }
+
public boolean hasExpandedActionView() {
return mExpandedMenuPresenter != null &&
mExpandedMenuPresenter.mCurrentExpandedItem != null;
@@ -503,7 +514,7 @@ public class ActionBarView extends AbsActionBarView {
}
public void setDisplayOptions(int options) {
- final int flagsChanged = options ^ mDisplayOptions;
+ final int flagsChanged = mDisplayOptions == -1 ? -1 : options ^ mDisplayOptions;
mDisplayOptions = options;
if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) {
@@ -695,7 +706,8 @@ public class ActionBarView extends AbsActionBarView {
private void initTitle() {
if (mTitleLayout == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
- mTitleLayout = (LinearLayout) inflater.inflate(R.layout.action_bar_title_item, null);
+ mTitleLayout = (LinearLayout) inflater.inflate(R.layout.action_bar_title_item,
+ this, false);
mTitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_title);
mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
mTitleUpView = (View) mTitleLayout.findViewById(R.id.up);
@@ -724,10 +736,10 @@ public class ActionBarView extends AbsActionBarView {
mTitleLayout.setEnabled(titleUp);
}
- addView(mTitleLayout, new LayoutParams(LayoutParams.WRAP_CONTENT,
- LayoutParams.MATCH_PARENT));
- if (mExpandedActionView != null) {
- // Don't show while in expanded mode
+ addView(mTitleLayout);
+ if (mExpandedActionView != null ||
+ (TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle))) {
+ // Don't show while in expanded mode or with empty text
mTitleLayout.setVisibility(GONE);
}
}
@@ -820,7 +832,8 @@ public class ActionBarView extends AbsActionBarView {
boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE &&
(mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0;
if (showTitle) {
- availableWidth = measureChildView(mTitleLayout, availableWidth, childSpecHeight, 0);
+ availableWidth = measureChildView(mTitleLayout, availableWidth,
+ MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0);
leftOfCenter = Math.max(0, leftOfCenter - mTitleLayout.getMeasuredWidth());
}
@@ -1024,6 +1037,8 @@ public class ActionBarView extends AbsActionBarView {
} else if (centeredLeft + navWidth > menuLeft) {
hgravity = Gravity.RIGHT;
}
+ } else if (gravity == -1) {
+ hgravity = Gravity.LEFT;
}
int xpos = 0;
@@ -1039,8 +1054,14 @@ public class ActionBarView extends AbsActionBarView {
break;
}
+ int vgravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
+
+ if (gravity == -1) {
+ vgravity = Gravity.CENTER_VERTICAL;
+ }
+
int ypos = 0;
- switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {
+ switch (vgravity) {
case Gravity.CENTER_VERTICAL:
final int paddedTop = getPaddingTop();
final int paddedBottom = mBottom - mTop - getPaddingBottom();
@@ -1069,6 +1090,11 @@ public class ActionBarView extends AbsActionBarView {
}
@Override
+ public LayoutParams generateLayoutParams(AttributeSet attrs) {
+ return new ActionBar.LayoutParams(getContext(), attrs);
+ }
+
+ @Override
public LayoutParams generateLayoutParams(LayoutParams lp) {
if (lp == null) {
lp = generateDefaultLayoutParams();
@@ -1262,12 +1288,15 @@ public class ActionBarView extends AbsActionBarView {
// Make sure the expanded item we have is still there.
if (mCurrentExpandedItem != null) {
boolean found = false;
- final int count = mMenu.size();
- for (int i = 0; i < count; i++) {
- final MenuItem item = mMenu.getItem(i);
- if (item == mCurrentExpandedItem) {
- found = true;
- break;
+
+ if (mMenu != null) {
+ final int count = mMenu.size();
+ for (int i = 0; i < count; i++) {
+ final MenuItem item = mMenu.getItem(i);
+ if (item == mCurrentExpandedItem) {
+ found = true;
+ break;
+ }
}
}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index e4322c632739..804f28a38607 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -83,6 +83,13 @@ public class LockPatternUtils {
*/
public static final long FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS = 1000L;
+
+ /**
+ * This dictates when we start telling the user that continued failed attempts will wipe
+ * their device.
+ */
+ public static final int FAILED_ATTEMPTS_BEFORE_WIPE_GRACE = 5;
+
/**
* The minimum number of dots in a valid pattern.
*/
@@ -93,7 +100,7 @@ public class LockPatternUtils {
* attempt for it to be counted against the counts that affect
* {@link #FAILED_ATTEMPTS_BEFORE_TIMEOUT} and {@link #FAILED_ATTEMPTS_BEFORE_RESET}
*/
- public static final int MIN_PATTERN_REGISTER_FAIL = 3;
+ public static final int MIN_PATTERN_REGISTER_FAIL = MIN_LOCK_PATTERN_SIZE;
private final static String LOCKOUT_PERMANENT_KEY = "lockscreen.lockedoutpermanently";
private final static String LOCKOUT_ATTEMPT_DEADLINE = "lockscreen.lockoutattemptdeadline";
@@ -112,6 +119,7 @@ public class LockPatternUtils {
private static final AtomicBoolean sHaveNonZeroPatternFile = new AtomicBoolean(false);
private static final AtomicBoolean sHaveNonZeroPasswordFile = new AtomicBoolean(false);
+
private static FileObserver sPasswordObserver;
private static class PasswordFileObserver extends FileObserver {
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index bf1c6378e662..158291bb3906 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -46,6 +46,7 @@ public class PointerLocationView extends View {
// Most recent coordinates.
private PointerCoords mCoords = new PointerCoords();
+ private int mToolType;
// Most recent velocity.
private float mXVelocity;
@@ -88,7 +89,7 @@ public class PointerLocationView extends View {
private int mMaxNumPointers;
private int mActivePointerId;
private final ArrayList<PointerState> mPointers = new ArrayList<PointerState>();
- private final PointerCoords mHoverCoords = new PointerCoords();
+ private final PointerCoords mTempCoords = new PointerCoords();
private final VelocityTracker mVelocity;
@@ -306,22 +307,66 @@ public class PointerLocationView extends View {
ps.mCoords.toolMinor, ps.mCoords.orientation, mPaint);
// Draw the orientation arrow.
+ float arrowSize = ps.mCoords.toolMajor * 0.7f;
+ if (arrowSize < 20) {
+ arrowSize = 20;
+ }
mPaint.setARGB(255, pressureLevel, 255, 0);
- float orientationVectorX = (float) (Math.sin(-ps.mCoords.orientation)
- * ps.mCoords.toolMajor * 0.7);
- float orientationVectorY = (float) (Math.cos(-ps.mCoords.orientation)
- * ps.mCoords.toolMajor * 0.7);
- canvas.drawLine(
- ps.mCoords.x - orientationVectorX, ps.mCoords.y - orientationVectorY,
- ps.mCoords.x + orientationVectorX, ps.mCoords.y + orientationVectorY,
- mPaint);
+ float orientationVectorX = (float) (Math.sin(ps.mCoords.orientation)
+ * arrowSize);
+ float orientationVectorY = (float) (-Math.cos(ps.mCoords.orientation)
+ * arrowSize);
+ if (ps.mToolType == MotionEvent.TOOL_TYPE_STYLUS
+ || ps.mToolType == MotionEvent.TOOL_TYPE_ERASER) {
+ // Show full circle orientation.
+ canvas.drawLine(ps.mCoords.x, ps.mCoords.y,
+ ps.mCoords.x + orientationVectorX,
+ ps.mCoords.y + orientationVectorY,
+ mPaint);
+ } else {
+ // Show half circle orientation.
+ canvas.drawLine(
+ ps.mCoords.x - orientationVectorX,
+ ps.mCoords.y - orientationVectorY,
+ ps.mCoords.x + orientationVectorX,
+ ps.mCoords.y + orientationVectorY,
+ mPaint);
+ }
+
+ // Draw the tilt point along the orientation arrow.
+ float tiltScale = (float) Math.sin(
+ ps.mCoords.getAxisValue(MotionEvent.AXIS_TILT));
+ canvas.drawCircle(
+ ps.mCoords.x + orientationVectorX * tiltScale,
+ ps.mCoords.y + orientationVectorY * tiltScale,
+ 3.0f, mPaint);
}
}
}
}
-
- private void logPointerCoords(int action, int index, MotionEvent.PointerCoords coords, int id,
- int toolType, int buttonState) {
+
+ private void logMotionEvent(String type, MotionEvent event) {
+ final int action = event.getAction();
+ final int N = event.getHistorySize();
+ final int NI = event.getPointerCount();
+ for (int historyPos = 0; historyPos < N; historyPos++) {
+ for (int i = 0; i < NI; i++) {
+ final int id = event.getPointerId(i);
+ event.getHistoricalPointerCoords(i, historyPos, mTempCoords);
+ logCoords(type, action, i, mTempCoords, id,
+ event.getToolType(i), event.getButtonState());
+ }
+ }
+ for (int i = 0; i < NI; i++) {
+ final int id = event.getPointerId(i);
+ event.getPointerCoords(i, mTempCoords);
+ logCoords(type, action, i, mTempCoords, id,
+ event.getToolType(i), event.getButtonState());
+ }
+ }
+
+ private void logCoords(String type, int action, int index,
+ MotionEvent.PointerCoords coords, int id, int toolType, int buttonState) {
final String prefix;
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
@@ -373,7 +418,7 @@ public class PointerLocationView extends View {
}
Log.i(TAG, mText.clear()
- .append("Pointer ").append(id + 1)
+ .append(type).append(" id ").append(id + 1)
.append(": ")
.append(prefix)
.append(" (").append(coords.x, 3).append(", ").append(coords.y, 3)
@@ -385,6 +430,9 @@ public class PointerLocationView extends View {
.append(" ToolMinor=").append(coords.toolMinor, 3)
.append(" Orientation=").append((float)(coords.orientation * 180 / Math.PI), 1)
.append("deg")
+ .append(" Tilt=").append((float)(
+ coords.getAxisValue(MotionEvent.AXIS_TILT) * 180 / Math.PI), 1)
+ .append("deg")
.append(" Distance=").append(coords.getAxisValue(MotionEvent.AXIS_DISTANCE), 1)
.append(" VScroll=").append(coords.getAxisValue(MotionEvent.AXIS_VSCROLL), 1)
.append(" HScroll=").append(coords.getAxisValue(MotionEvent.AXIS_HSCROLL), 1)
@@ -445,10 +493,10 @@ public class PointerLocationView extends View {
for (int i = 0; i < NI; i++) {
final int id = event.getPointerId(i);
final PointerState ps = mCurDown ? mPointers.get(id) : null;
- final PointerCoords coords = ps != null ? ps.mCoords : mHoverCoords;
+ final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
event.getHistoricalPointerCoords(i, historyPos, coords);
if (mPrintCoords) {
- logPointerCoords(action, i, coords, id,
+ logCoords("Pointer", action, i, coords, id,
event.getToolType(i), event.getButtonState());
}
if (ps != null) {
@@ -459,16 +507,17 @@ public class PointerLocationView extends View {
for (int i = 0; i < NI; i++) {
final int id = event.getPointerId(i);
final PointerState ps = mCurDown ? mPointers.get(id) : null;
- final PointerCoords coords = ps != null ? ps.mCoords : mHoverCoords;
+ final PointerCoords coords = ps != null ? ps.mCoords : mTempCoords;
event.getPointerCoords(i, coords);
if (mPrintCoords) {
- logPointerCoords(action, i, coords, id,
+ logCoords("Pointer", action, i, coords, id,
event.getToolType(i), event.getButtonState());
}
if (ps != null) {
ps.addTrace(coords.x, coords.y);
ps.mXVelocity = mVelocity.getXVelocity(id);
ps.mYVelocity = mVelocity.getYVelocity(id);
+ ps.mToolType = event.getToolType(i);
}
}
@@ -515,11 +564,11 @@ public class PointerLocationView extends View {
if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) {
addPointerEvent(event);
} else if ((source & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
- Log.i(TAG, "Joystick: " + event);
+ logMotionEvent("Joystick", event);
} else if ((source & InputDevice.SOURCE_CLASS_POSITION) != 0) {
- Log.i(TAG, "Position: " + event);
+ logMotionEvent("Position", event);
} else {
- Log.i(TAG, "Generic: " + event);
+ logMotionEvent("Generic", event);
}
return true;
}
@@ -563,7 +612,7 @@ public class PointerLocationView extends View {
@Override
public boolean onTrackballEvent(MotionEvent event) {
- Log.i(TAG, "Trackball: " + event);
+ logMotionEvent("Trackball", event);
return true;
}
diff --git a/core/java/com/android/server/NetworkManagementSocketTagger.java b/core/java/com/android/server/NetworkManagementSocketTagger.java
index 4667e5fc978d..9f6ab315c304 100644
--- a/core/java/com/android/server/NetworkManagementSocketTagger.java
+++ b/core/java/com/android/server/NetworkManagementSocketTagger.java
@@ -16,8 +16,11 @@
package com.android.server;
+import android.net.NetworkStats;
import android.os.SystemProperties;
import android.util.Log;
+import android.util.Slog;
+
import dalvik.system.SocketTagger;
import libcore.io.IoUtils;
@@ -112,7 +115,8 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
private void unTagSocketFd(FileDescriptor fd) throws IOException {
int fdNum = fd.getInt$();
- if (fdNum == -1) return;
+ final SocketTags options = threadSocketTags.get();
+ if (fdNum == -1 || (options.statsTag == -1 && options.statsUid == -1)) return;
String cmd = "u " + fdNum;
internalModuleCtrl(cmd);
}
@@ -122,6 +126,26 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
public int statsUid = -1;
}
+ public static void setKernelCounterSet(int uid, int counterSet) {
+ final StringBuilder command = new StringBuilder();
+ command.append("s ").append(counterSet).append(" ").append(uid);
+ try {
+ internalModuleCtrl(command.toString());
+ } catch (IOException e) {
+ Slog.w(TAG, "problem changing counter set for uid " + uid + " : " + e);
+ }
+ }
+
+ public static void resetKernelUidStats(int uid) {
+ final StringBuilder command = new StringBuilder();
+ command.append("d 0 ").append(uid);
+ try {
+ internalModuleCtrl(command.toString());
+ } catch (IOException e) {
+ Slog.w(TAG, "problem clearing counters for uid " + uid + " : " + e);
+ }
+ }
+
/**
* Sends commands to the kernel netfilter module.
*
@@ -141,7 +165,7 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
* <li><i>*_tag</i> are 64bit values</li></ul>
*
*/
- private void internalModuleCtrl(String cmd) throws IOException {
+ private static void internalModuleCtrl(String cmd) throws IOException {
if (!SystemProperties.getBoolean(PROP_QTAGUID_ENABLED, false)) return;
// TODO: migrate to native library for tagging commands
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 45b7f27d709c..eee256a1dc78 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -507,6 +507,7 @@ static void tearDownEventLoop(native_data_t *nat) {
#define EVENT_LOOP_EXIT 1
#define EVENT_LOOP_ADD 2
#define EVENT_LOOP_REMOVE 3
+#define EVENT_LOOP_WAKEUP 4
dbus_bool_t dbusAddWatch(DBusWatch *watch, void *data) {
native_data_t *nat = (native_data_t *)data;
@@ -551,6 +552,13 @@ void dbusToggleWatch(DBusWatch *watch, void *data) {
}
}
+void dbusWakeup(void *data) {
+ native_data_t *nat = (native_data_t *)data;
+
+ char control = EVENT_LOOP_WAKEUP;
+ write(nat->controlFdW, &control, sizeof(char));
+}
+
static void handleWatchAdd(native_data_t *nat) {
DBusWatch *watch;
int newFD;
@@ -634,6 +642,7 @@ static void *eventLoopMain(void *ptr) {
dbus_connection_set_watch_functions(nat->conn, dbusAddWatch,
dbusRemoveWatch, dbusToggleWatch, ptr, NULL);
+ dbus_connection_set_wakeup_main_function(nat->conn, dbusWakeup, ptr, NULL);
nat->running = true;
@@ -669,6 +678,11 @@ static void *eventLoopMain(void *ptr) {
handleWatchRemove(nat);
break;
}
+ case EVENT_LOOP_WAKEUP:
+ {
+ // noop
+ break;
+ }
}
}
} else {
@@ -1026,7 +1040,7 @@ static DBusHandlerResult event_filter(DBusConnection *conn, DBusMessage *msg,
}
goto success;
} else if (dbus_message_is_signal(msg,
- "org.bluez.NetworkServer",
+ "org.bluez.HealthDevice",
"ChannelDeleted")) {
const char *c_path = dbus_message_get_path(msg);
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index b432d658adc4..b8f2d6f2e068 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -385,7 +385,8 @@ class JavaDeathRecipient : public IBinder::DeathRecipient
{
public:
JavaDeathRecipient(JNIEnv* env, jobject object, const sp<DeathRecipientList>& list)
- : mVM(jnienv_to_javavm(env)), mObject(env->NewGlobalRef(object)), mList(list)
+ : mVM(jnienv_to_javavm(env)), mObject(env->NewGlobalRef(object)),
+ mObjectWeak(NULL), mList(list)
{
// These objects manage their own lifetimes so are responsible for final bookkeeping.
// The list holds a strong reference to this object.
@@ -398,16 +399,23 @@ public:
void binderDied(const wp<IBinder>& who)
{
- JNIEnv* env = javavm_to_jnienv(mVM);
-
LOGDEATH("Receiving binderDied() on JavaDeathRecipient %p\n", this);
+ if (mObject != NULL) {
+ JNIEnv* env = javavm_to_jnienv(mVM);
+
+ env->CallStaticVoidMethod(gBinderProxyOffsets.mClass,
+ gBinderProxyOffsets.mSendDeathNotice, mObject);
+ jthrowable excep = env->ExceptionOccurred();
+ if (excep) {
+ report_exception(env, excep,
+ "*** Uncaught exception returned from death notification!");
+ }
- env->CallStaticVoidMethod(gBinderProxyOffsets.mClass,
- gBinderProxyOffsets.mSendDeathNotice, mObject);
- jthrowable excep = env->ExceptionOccurred();
- if (excep) {
- report_exception(env, excep,
- "*** Uncaught exception returned from death notification!");
+ // Demote from strong ref to weak after binderDied() has been delivered,
+ // to allow the DeathRecipient and BinderProxy to be GC'd if no longer needed.
+ mObjectWeak = env->NewWeakGlobalRef(mObject);
+ env->DeleteGlobalRef(mObject);
+ mObject = NULL;
}
}
@@ -423,8 +431,17 @@ public:
}
bool matches(jobject obj) {
+ bool result;
JNIEnv* env = javavm_to_jnienv(mVM);
- return env->IsSameObject(obj, mObject);
+
+ if (mObject != NULL) {
+ result = env->IsSameObject(obj, mObject);
+ } else {
+ jobject me = env->NewLocalRef(mObjectWeak);
+ result = env->IsSameObject(obj, me);
+ env->DeleteLocalRef(me);
+ }
+ return result;
}
protected:
@@ -433,12 +450,17 @@ protected:
//LOGI("Removing death ref: recipient=%p\n", mObject);
android_atomic_dec(&gNumDeathRefs);
JNIEnv* env = javavm_to_jnienv(mVM);
- env->DeleteGlobalRef(mObject);
+ if (mObject != NULL) {
+ env->DeleteGlobalRef(mObject);
+ } else {
+ env->DeleteWeakGlobalRef(mObjectWeak);
+ }
}
private:
- JavaVM* const mVM;
- jobject const mObject;
+ JavaVM* const mVM;
+ jobject mObject;
+ jweak mObjectWeak; // will be a weak ref to the same VM-side DeathRecipient after binderDied()
wp<DeathRecipientList> mList;
};
@@ -512,7 +534,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
if (val->checkSubclass(&gBinderOffsets)) {
// One of our own!
jobject object = static_cast<JavaBBinder*>(val.get())->object();
- //printf("objectForBinder %p: it's our own %p!\n", val.get(), object);
+ LOGDEATH("objectForBinder %p: it's our own %p!\n", val.get(), object);
return object;
}
@@ -528,7 +550,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
LOGV("objectForBinder %p: found existing %p!\n", val.get(), res);
return res;
}
- LOGV("Proxy object %p of IBinder %p no longer in working set!!!", object, val.get());
+ LOGDEATH("Proxy object %p of IBinder %p no longer in working set!!!", object, val.get());
android_atomic_dec(&gNumProxyRefs);
val->detachObject(&gBinderProxyOffsets);
env->DeleteGlobalRef(object);
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 063b52b7ede7..fb5e5fe0bfe3 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -677,6 +677,12 @@ static void android_view_GLES20Canvas_updateTextureLayer(JNIEnv* env, jobject cl
LayerRenderer::updateTextureLayer(layer, width, height, isOpaque, renderTarget, transform);
}
+static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
+ Layer* layer, SkMatrix* matrix) {
+
+ layer->getTransform().load(*matrix);
+}
+
static void android_view_GLES20Canvas_destroyLayer(JNIEnv* env, jobject clazz, Layer* layer) {
LayerRenderer::destroyLayer(layer);
}
@@ -821,6 +827,7 @@ static JNINativeMethod gMethods[] = {
{ "nCreateTextureLayer", "(Z[I)I", (void*) android_view_GLES20Canvas_createTextureLayer },
{ "nUpdateTextureLayer", "(IIIZLandroid/graphics/SurfaceTexture;)V",
(void*) android_view_GLES20Canvas_updateTextureLayer },
+ { "nSetTextureLayerTransform", "(II)V", (void*) android_view_GLES20Canvas_setTextureLayerTransform },
{ "nDestroyLayer", "(I)V", (void*) android_view_GLES20Canvas_destroyLayer },
{ "nDestroyLayerDeferred", "(I)V", (void*) android_view_GLES20Canvas_destroyLayerDeferred },
{ "nDrawLayer", "(IIFFI)V", (void*) android_view_GLES20Canvas_drawLayer },
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index b9868dba4800..2dbb0b2bec5d 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -42,6 +42,7 @@
<protected-broadcast android:name="android.intent.action.PACKAGE_RESTARTED" />
<protected-broadcast android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
<protected-broadcast android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
+ <protected-broadcast android:name="android.intent.action.PACKAGE_NEEDS_VERIFICATION" />
<protected-broadcast android:name="android.intent.action.UID_REMOVED" />
<protected-broadcast android:name="android.intent.action.CONFIGURATION_CHANGED" />
<protected-broadcast android:name="android.intent.action.LOCALE_CHANGED" />
@@ -1429,6 +1430,24 @@
android:protectionLevel="signature" />
<uses-permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE"/>
+ <!-- Package verifier needs to have this permission before the PackageManager will
+ trust it to verify packages.
+ @hide
+ -->
+ <permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
+ android:label="@string/permlab_packageVerificationAgent"
+ android:description="@string/permdesc_packageVerificationAgent"
+ android:protectionLevel="signatureOrSystem" />
+
+ <!-- Must be required by package verifier receiver, to ensure that only the
+ system can interact with it.
+ @hide
+ -->
+ <permission android:name="android.permission.BIND_PACKAGE_VERIFIER"
+ android:label="@string/permlab_bindPackageVerifier"
+ android:description="@string/permdesc_bindPackageVerifier"
+ android:protectionLevel="signature" />
+
<!-- The system process is explicitly the only one allowed to launch the
confirmation UI for full backup/restore -->
<uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
diff --git a/core/res/res/drawable-hdpi/ab_bottom_solid_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_bottom_solid_dark_holo.9.png
index 3ea6c445b946..81829bbb4c9a 100644
--- a/core/res/res/drawable-hdpi/ab_bottom_solid_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_bottom_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_bottom_solid_inverse_holo.9.png b/core/res/res/drawable-hdpi/ab_bottom_solid_inverse_holo.9.png
index 6c6fcd2a45eb..04368018440f 100644
--- a/core/res/res/drawable-hdpi/ab_bottom_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_bottom_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_bottom_solid_light_holo.9.png b/core/res/res/drawable-hdpi/ab_bottom_solid_light_holo.9.png
index 854631ec22de..6574c8c40141 100644
--- a/core/res/res/drawable-hdpi/ab_bottom_solid_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_bottom_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_bottom_transparent_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_bottom_transparent_dark_holo.9.png
index aef6142df029..1565ac26dd2a 100644
--- a/core/res/res/drawable-hdpi/ab_bottom_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_bottom_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_bottom_transparent_light_holo.9.png b/core/res/res/drawable-hdpi/ab_bottom_transparent_light_holo.9.png
index d8b5edc3a1e9..77d4c4b7c971 100644
--- a/core/res/res/drawable-hdpi/ab_bottom_transparent_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_bottom_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_solid_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_solid_dark_holo.9.png
index 660a234c65f7..0fc8632310ff 100644
--- a/core/res/res/drawable-hdpi/ab_solid_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_solid_light_holo.9.png b/core/res/res/drawable-hdpi/ab_solid_light_holo.9.png
index 9756cf5ceebd..74540c194edc 100644
--- a/core/res/res/drawable-hdpi/ab_solid_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_solid_shadow_holo.9.png b/core/res/res/drawable-hdpi/ab_solid_shadow_holo.9.png
index 80213d513886..69bcd7acd9d2 100644
--- a/core/res/res/drawable-hdpi/ab_solid_shadow_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_solid_shadow_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_stacked_solid_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_stacked_solid_dark_holo.9.png
index 6de2bf2c3176..9f8829f98e74 100644
--- a/core/res/res/drawable-hdpi/ab_stacked_solid_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_stacked_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png b/core/res/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
index c23e47320e00..d63e85eb6605 100644
--- a/core/res/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_stacked_solid_light_holo.9.png b/core/res/res/drawable-hdpi/ab_stacked_solid_light_holo.9.png
index 343d7c6bd3b8..9cff5d851dd1 100644
--- a/core/res/res/drawable-hdpi/ab_stacked_solid_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_stacked_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_stacked_transparent_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_stacked_transparent_dark_holo.9.png
index 3de11745ec61..12a6454b321d 100644
--- a/core/res/res/drawable-hdpi/ab_stacked_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_stacked_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_stacked_transparent_light_holo.9.png b/core/res/res/drawable-hdpi/ab_stacked_transparent_light_holo.9.png
index da8b0427fe2a..3355d300039c 100644
--- a/core/res/res/drawable-hdpi/ab_stacked_transparent_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_stacked_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_transparent_dark_holo.9.png b/core/res/res/drawable-hdpi/ab_transparent_dark_holo.9.png
index 1957c32468ad..a5e857071831 100644
--- a/core/res/res/drawable-hdpi/ab_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_transparent_light_holo.9.png b/core/res/res/drawable-hdpi/ab_transparent_light_holo.9.png
index 0f1ce73a33d7..c49412a7c87e 100644
--- a/core/res/res/drawable-hdpi/ab_transparent_light_holo.9.png
+++ b/core/res/res/drawable-hdpi/ab_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png
index 769f57063c9e..fabc252691d4 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png
index 74cefd6d1fbf..f59ef4eb15e5 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png
index 4450f110eead..c87c5a6d3473 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png
index 93b7b17a0223..6e4cae2644da 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png
index 3ada1be991dc..e6f83cc7f286 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png
index 749ea56951e4..5c97e3ffb559 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.png
index 1d1a58909cbd..34762f8cc252 100644
--- a/core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.png
index 1d1a58909cbd..34762f8cc252 100644
--- a/core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.png
index 8922fa4711d9..0d2eb4b990d5 100644
--- a/core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.png
index 53cf2f386f82..7de8d9be4ca6 100644
--- a/core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_dark.png
index 39f1ca48d60b..a7ce7e11acb6 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_light.png
index 04567599d4f9..93c0df01cf85 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_dark.png
index 20cfc23200a1..f0508ac1b873 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_light.png
index c05dcd3f563a..14fbc7a7d586 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
index c91b76f6f01e..0f4fffff7690 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
index 4764c675d3db..8fab476273ae 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_dark.png
index 5997c2d8b300..c56166fe21db 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_light.png
index ee6c869cc7cd..6bb4ad6c2877 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_dark.png
index f052e67cf697..edfb3655c18c 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_light.png
index 247d3062223f..f2664c441199 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_dark.png
index f95f1551a450..435c10dfbbe4 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_light.png
index 7bebc96984b3..f2e41904b7df 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_holo_dark.png
index 02319257d748..5b87782439df 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_holo_light.png
index cfde3cbfdde4..41c9e6c335dd 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
index 0296a62ee518..c91da17417e3 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
index 697001227e99..8d6b81d94901 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/create_contact.png b/core/res/res/drawable-hdpi/create_contact.png
index 19d59b4526e5..7a29b65b1f60 100644
--- a/core/res/res/drawable-hdpi/create_contact.png
+++ b/core/res/res/drawable-hdpi/create_contact.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/day_picker_week_view_dayline_holo.9.png b/core/res/res/drawable-hdpi/day_picker_week_view_dayline_holo.9.png
index 2edae8ff8382..1deaad714971 100644
--- a/core/res/res/drawable-hdpi/day_picker_week_view_dayline_holo.9.png
+++ b/core/res/res/drawable-hdpi/day_picker_week_view_dayline_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.png b/core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.png
index e8e1deb08a7b..a529487092c8 100644
--- a/core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.png b/core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.png
index 9e6cbbe9e40e..e3641b5a8d59 100644
--- a/core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_angel.png b/core/res/res/drawable-hdpi/emo_im_angel.png
index 10742a66436c..e9d4983647ce 100644
--- a/core/res/res/drawable-hdpi/emo_im_angel.png
+++ b/core/res/res/drawable-hdpi/emo_im_angel.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_cool.png b/core/res/res/drawable-hdpi/emo_im_cool.png
index e3c86546a368..c8464b59c28a 100644
--- a/core/res/res/drawable-hdpi/emo_im_cool.png
+++ b/core/res/res/drawable-hdpi/emo_im_cool.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_crying.png b/core/res/res/drawable-hdpi/emo_im_crying.png
index b23791ca4acf..94a2b9a826c1 100644
--- a/core/res/res/drawable-hdpi/emo_im_crying.png
+++ b/core/res/res/drawable-hdpi/emo_im_crying.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_embarrassed.png b/core/res/res/drawable-hdpi/emo_im_embarrassed.png
index cf7daf720b53..fe9138db8bac 100644
--- a/core/res/res/drawable-hdpi/emo_im_embarrassed.png
+++ b/core/res/res/drawable-hdpi/emo_im_embarrassed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_foot_in_mouth.png b/core/res/res/drawable-hdpi/emo_im_foot_in_mouth.png
index 050b7be72da9..98471773d6f9 100644
--- a/core/res/res/drawable-hdpi/emo_im_foot_in_mouth.png
+++ b/core/res/res/drawable-hdpi/emo_im_foot_in_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_happy.png b/core/res/res/drawable-hdpi/emo_im_happy.png
index 69e3bedefe84..eba9debca83b 100644
--- a/core/res/res/drawable-hdpi/emo_im_happy.png
+++ b/core/res/res/drawable-hdpi/emo_im_happy.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_kissing.png b/core/res/res/drawable-hdpi/emo_im_kissing.png
index 0cca68eaa802..ff19711a312f 100644
--- a/core/res/res/drawable-hdpi/emo_im_kissing.png
+++ b/core/res/res/drawable-hdpi/emo_im_kissing.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_laughing.png b/core/res/res/drawable-hdpi/emo_im_laughing.png
index 8406ad03226e..b1d4d6a02ae1 100644
--- a/core/res/res/drawable-hdpi/emo_im_laughing.png
+++ b/core/res/res/drawable-hdpi/emo_im_laughing.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_lips_are_sealed.png b/core/res/res/drawable-hdpi/emo_im_lips_are_sealed.png
index 222f17535e42..e47cf2ae8b98 100644
--- a/core/res/res/drawable-hdpi/emo_im_lips_are_sealed.png
+++ b/core/res/res/drawable-hdpi/emo_im_lips_are_sealed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_money_mouth.png b/core/res/res/drawable-hdpi/emo_im_money_mouth.png
index d711bfb7e589..82f80f25e3d1 100644
--- a/core/res/res/drawable-hdpi/emo_im_money_mouth.png
+++ b/core/res/res/drawable-hdpi/emo_im_money_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_sad.png b/core/res/res/drawable-hdpi/emo_im_sad.png
index 40017f17f0d3..b5959ec8bac6 100644
--- a/core/res/res/drawable-hdpi/emo_im_sad.png
+++ b/core/res/res/drawable-hdpi/emo_im_sad.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_surprised.png b/core/res/res/drawable-hdpi/emo_im_surprised.png
index 4b2af7a27e51..dbe1c3873bcf 100644
--- a/core/res/res/drawable-hdpi/emo_im_surprised.png
+++ b/core/res/res/drawable-hdpi/emo_im_surprised.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.png b/core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.png
index 42ac80d55868..fb5f9adf0887 100644
--- a/core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.png
+++ b/core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_undecided.png b/core/res/res/drawable-hdpi/emo_im_undecided.png
index 2cf5bd2c7a40..b7edef7086f2 100644
--- a/core/res/res/drawable-hdpi/emo_im_undecided.png
+++ b/core/res/res/drawable-hdpi/emo_im_undecided.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_winking.png b/core/res/res/drawable-hdpi/emo_im_winking.png
index a3a087675789..6fe1027dea42 100644
--- a/core/res/res/drawable-hdpi/emo_im_winking.png
+++ b/core/res/res/drawable-hdpi/emo_im_winking.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_wtf.png b/core/res/res/drawable-hdpi/emo_im_wtf.png
index 86c4bdacb0da..1d4a99bfd9e8 100644
--- a/core/res/res/drawable-hdpi/emo_im_wtf.png
+++ b/core/res/res/drawable-hdpi/emo_im_wtf.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/emo_im_yelling.png b/core/res/res/drawable-hdpi/emo_im_yelling.png
index cfd991a6026f..99d694ba7b76 100644
--- a/core/res/res/drawable-hdpi/emo_im_yelling.png
+++ b/core/res/res/drawable-hdpi/emo_im_yelling.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
index dc0c534bdefa..6bb4d1e691d0 100644
--- a/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_light.9.png b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
index 2dd454837eae..3fb3eb1bbb47 100644
--- a/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
index d9fd48f6e761..a679da5b391b 100644
--- a/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_light.9.png b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
index 7cec83ad514f..175ce17ffd50 100644
--- a/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
index d41a7dc22e6e..2b7c9178ce96 100644
--- a/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
index 818b1c525113..1227e9e17b6d 100644
--- a/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
index 44502db8c741..5cd1ac7b51ab 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
index 44502db8c741..5cd1ac7b51ab 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
index 8d58ab549e7d..9a7e5aeca66a 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
index 8d58ab549e7d..9a7e5aeca66a 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-hdpi/ic_audio_alarm_mute.png
index e31fdb857e18..45ed7b603a41 100644
--- a/core/res/res/drawable-hdpi/ic_audio_alarm_mute.png
+++ b/core/res/res/drawable-hdpi/ic_audio_alarm_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_bt_mute.png b/core/res/res/drawable-hdpi/ic_audio_bt_mute.png
index 14542eb5e283..298db927e52c 100644
--- a/core/res/res/drawable-hdpi/ic_audio_bt_mute.png
+++ b/core/res/res/drawable-hdpi/ic_audio_bt_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_notification_mute.png b/core/res/res/drawable-hdpi/ic_audio_notification_mute.png
index a350e1679fba..697cc9254935 100644
--- a/core/res/res/drawable-hdpi/ic_audio_notification_mute.png
+++ b/core/res/res/drawable-hdpi/ic_audio_notification_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_phone.png b/core/res/res/drawable-hdpi/ic_audio_phone.png
index 2fff2040a955..8a7d67ab5082 100644
--- a/core/res/res/drawable-hdpi/ic_audio_phone.png
+++ b/core/res/res/drawable-hdpi/ic_audio_phone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
index 393877812fb6..1df685865dbd 100644
--- a/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
+++ b/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png
index 499c0a31ecdd..fae02f9a765a 100644
--- a/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png
+++ b/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_vol_mute.png b/core/res/res/drawable-hdpi/ic_audio_vol_mute.png
index f7428c7f1ba1..4256385a8718 100644
--- a/core/res/res/drawable-hdpi/ic_audio_vol_mute.png
+++ b/core/res/res/drawable-hdpi/ic_audio_vol_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_search.png b/core/res/res/drawable-hdpi/ic_btn_search.png
index 0a91eabcc7a6..98e61a36fc14 100644
--- a/core/res/res/drawable-hdpi/ic_btn_search.png
+++ b/core/res/res/drawable-hdpi/ic_btn_search.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_search_go.png b/core/res/res/drawable-hdpi/ic_btn_search_go.png
index 8a3a402b2c9d..65f807971ff3 100644
--- a/core/res/res/drawable-hdpi/ic_btn_search_go.png
+++ b/core/res/res/drawable-hdpi/ic_btn_search_go.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_speak_now.png b/core/res/res/drawable-hdpi/ic_btn_speak_now.png
index 45a81558ec9c..c9281d378e93 100644
--- a/core/res/res/drawable-hdpi/ic_btn_speak_now.png
+++ b/core/res/res/drawable-hdpi/ic_btn_speak_now.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit.png b/core/res/res/drawable-hdpi/ic_commit.png
deleted file mode 100644
index 404051c55688..000000000000
--- a/core/res/res/drawable-hdpi/ic_commit.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit_search_api_holo_dark.png b/core/res/res/drawable-hdpi/ic_commit_search_api_holo_dark.png
new file mode 100644
index 000000000000..83f36a94cf14
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_commit_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit_search_api_holo_light.png b/core/res/res/drawable-hdpi/ic_commit_search_api_holo_light.png
index b01688fa3225..a3cc21e6ba3d 100644
--- a/core/res/res/drawable-hdpi/ic_commit_search_api_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_commit_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture.png b/core/res/res/drawable-hdpi/ic_contact_picture.png
index e29e63a1a040..9123c8ce99a5 100644
--- a/core/res/res/drawable-hdpi/ic_contact_picture.png
+++ b/core/res/res/drawable-hdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-hdpi/ic_lock_airplane_mode.png
index 610f9d077191..90c80fdb65d9 100644
--- a/core/res/res/drawable-hdpi/ic_lock_airplane_mode.png
+++ b/core/res/res/drawable-hdpi/ic_lock_airplane_mode.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off.png b/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off.png
index cd50647c4e0a..b05589459553 100644
--- a/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off.png
+++ b/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_lock.png b/core/res/res/drawable-hdpi/ic_lock_lock.png
index 0fc79e1d4df2..6d1029ce9384 100644
--- a/core/res/res/drawable-hdpi/ic_lock_lock.png
+++ b/core/res/res/drawable-hdpi/ic_lock_lock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_power_off.png b/core/res/res/drawable-hdpi/ic_lock_power_off.png
index 2f120c625b41..bc2dc706a385 100644
--- a/core/res/res/drawable-hdpi/ic_lock_power_off.png
+++ b/core/res/res/drawable-hdpi/ic_lock_power_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_silent_mode_off.png b/core/res/res/drawable-hdpi/ic_lock_silent_mode_off.png
index 17d705c62b17..ecb7d042bc60 100644
--- a/core/res/res/drawable-hdpi/ic_lock_silent_mode_off.png
+++ b/core/res/res/drawable-hdpi/ic_lock_silent_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
index 80899128f1bf..639529489422 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
index e4ba8fdab78b..74fda0f31a14 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
index c9197c81b98d..1558a0a9c177 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png
index d510e1dd710c..a94d1b9ea5c0 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
index f5dfacc48ea4..0ccf36189085 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
index b4d399d66d89..14a684e93354 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
index 0f4bfe6d0d1f..1b7f499aa7de 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png b/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
index 995705dc607e..399aa1cdba80 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_ime.png b/core/res/res/drawable-hdpi/ic_lockscreen_ime.png
new file mode 100644
index 000000000000..29a7989372fc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png
index d1938b99bcce..7060d596f32e 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
index ecafbeaee1b5..b79dbbaa2606 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
index 1f527b75ec42..86325458d7a6 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png
index f6ccbd29a8cd..88d0a9f55818 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
index d4e558dcfe06..e25c7a0db9db 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
index 5d999a62d891..701fa42b5c3a 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png
index 10b32682c185..0ebff0b1f545 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png b/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
index 72b8f0a742e4..c8de3a31995f 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png
index d1f30156f163..e3009436ca44 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.png
index e0532228cad4..da7734014a07 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_embed_play.png b/core/res/res/drawable-hdpi/ic_media_embed_play.png
index 23ac7e45e426..05778c181f6f 100644
--- a/core/res/res/drawable-hdpi/ic_media_embed_play.png
+++ b/core/res/res/drawable-hdpi/ic_media_embed_play.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_ff.png b/core/res/res/drawable-hdpi/ic_media_ff.png
index a892ba2b6514..c65956ab7fc4 100644
--- a/core/res/res/drawable-hdpi/ic_media_ff.png
+++ b/core/res/res/drawable-hdpi/ic_media_ff.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_fullscreen.png b/core/res/res/drawable-hdpi/ic_media_fullscreen.png
index 0cdbf7743e6d..ad082453a136 100644
--- a/core/res/res/drawable-hdpi/ic_media_fullscreen.png
+++ b/core/res/res/drawable-hdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_next.png b/core/res/res/drawable-hdpi/ic_media_next.png
index 2285670f48f6..c74703eea93c 100644
--- a/core/res/res/drawable-hdpi/ic_media_next.png
+++ b/core/res/res/drawable-hdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_pause.png b/core/res/res/drawable-hdpi/ic_media_pause.png
index ffb55cd82ea1..671148e8f809 100644
--- a/core/res/res/drawable-hdpi/ic_media_pause.png
+++ b/core/res/res/drawable-hdpi/ic_media_pause.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_play.png b/core/res/res/drawable-hdpi/ic_media_play.png
index e525bd25a2b4..c2e366a7dd7e 100644
--- a/core/res/res/drawable-hdpi/ic_media_play.png
+++ b/core/res/res/drawable-hdpi/ic_media_play.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_previous.png b/core/res/res/drawable-hdpi/ic_media_previous.png
index 333371164333..15dc3903bf3f 100644
--- a/core/res/res/drawable-hdpi/ic_media_previous.png
+++ b/core/res/res/drawable-hdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_rew.png b/core/res/res/drawable-hdpi/ic_media_rew.png
index b14e9b9cb51e..a4ac181777ff 100644
--- a/core/res/res/drawable-hdpi/ic_media_rew.png
+++ b/core/res/res/drawable-hdpi/ic_media_rew.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_stop.png b/core/res/res/drawable-hdpi/ic_media_stop.png
new file mode 100644
index 000000000000..ec0c1eaabb80
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_stop.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_notification_ime_default.png b/core/res/res/drawable-hdpi/ic_notification_ime_default.png
index 1a9d88c0b664..ac598190a0b8 100644
--- a/core/res/res/drawable-hdpi/ic_notification_ime_default.png
+++ b/core/res/res/drawable-hdpi/ic_notification_ime_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
index 82f6734e6f73..5654cd69429f 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
index 82f6734e6f73..5654cd69429f 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_section_divider_holo_dark.9.png b/core/res/res/drawable-hdpi/list_section_divider_holo_dark.9.png
index 5522f5cfdfd1..43a20adcb19d 100644
--- a/core/res/res/drawable-hdpi/list_section_divider_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_section_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png b/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
index a9dbfb9ca495..b7b292e92b5c 100644
--- a/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png b/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
index 5f5b23f9fc95..dae40ca5450e 100644
--- a/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selected_holo_light.9.png b/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
index 5f5b23f9fc95..dae40ca5450e 100644
--- a/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_submenu_background.9.png b/core/res/res/drawable-hdpi/menu_submenu_background.9.png
index cbd4400bb0b6..7b7c8b2eaea7 100644
--- a/core/res/res/drawable-hdpi/menu_submenu_background.9.png
+++ b/core/res/res/drawable-hdpi/menu_submenu_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/overscroll_glow.png b/core/res/res/drawable-hdpi/overscroll_glow.png
index 5963c000d97b..8f0c2cb04f0e 100644
--- a/core/res/res/drawable-hdpi/overscroll_glow.png
+++ b/core/res/res/drawable-hdpi/overscroll_glow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
index 0f883dc8415e..416b456ba425 100644
--- a/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/picture_emergency.png b/core/res/res/drawable-hdpi/picture_emergency.png
index e088f1247c4b..0e13a4385d01 100644
--- a/core/res/res/drawable-hdpi/picture_emergency.png
+++ b/core/res/res/drawable-hdpi/picture_emergency.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/presence_away.png b/core/res/res/drawable-hdpi/presence_away.png
index 4ef28215041d..b25b8212eef8 100644
--- a/core/res/res/drawable-hdpi/presence_away.png
+++ b/core/res/res/drawable-hdpi/presence_away.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png
index 5aea3d98a641..310c368e7a68 100644
--- a/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png
index 5743d06ae886..70cb7fc7e0bc 100644
--- a/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
index e2c63b0ce15a..7cbff01a2611 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
index e2c63b0ce15a..7cbff01a2611 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
index 4b204e79fe64..40d0d1645cbf 100644
--- a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png
index 4b204e79fe64..40d0d1645cbf 100644
--- a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_secondary_holo_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 501a5735330c..df7f236d5930 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 b43cb43af740..8950f818f27f 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/scrubber_primary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
index 0fdd53063df7..0d13f7142a92 100644
--- a/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
index a7eaf66231e2..b39d83166976 100644
--- a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png
index 14ce98538339..c997bf0299fc 100644
--- a/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png
index 5edaed5bc001..b2a22dcdb285 100644
--- a/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png
index 15a7aa10bf6c..b306f22ccd26 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png
index a0f7e3e080d7..21cf17e4fd1d 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png
index 03f02541e90f..b9833f3f94d7 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png
index 54c4f17fcc7b..f68b6624b557 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png
index 7f062fe1605c..2a23d3a173e4 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png
index 7f062fe1605c..2a23d3a173e4 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png
index 5b0958bcc689..3128fd9278ce 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png
index 6d34b40ba562..924a93b7a4e0 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png
index 80bba6b24344..09fc9c32c647 100644
--- a/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png
index ffd9e37b03f8..bb257b910990 100644
--- a/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png
index ea20276c57d1..df49a4d0bb50 100644
--- a/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png
index c2b031cf4d1c..a6cb9922a528 100644
--- a/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png
index a3fc80474ea3..75815a63c638 100644
--- a/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png
index a3fc80474ea3..75815a63c638 100644
--- a/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png
index 86aa7da2fedb..dff47c064061 100644
--- a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png
index c8ec05d7434a..8c3d2979d00c 100644
--- a/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
index 9887faa8619b..1446fa72921d 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_car_mode.png b/core/res/res/drawable-hdpi/stat_notify_car_mode.png
index 94f288c5c3b7..bc6137de6550 100644
--- a/core/res/res/drawable-hdpi/stat_notify_car_mode.png
+++ b/core/res/res/drawable-hdpi/stat_notify_car_mode.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_chat.png b/core/res/res/drawable-hdpi/stat_notify_chat.png
index bddea5045940..845aef318617 100644
--- a/core/res/res/drawable-hdpi/stat_notify_chat.png
+++ b/core/res/res/drawable-hdpi/stat_notify_chat.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_disk_full.png b/core/res/res/drawable-hdpi/stat_notify_disk_full.png
index b44ce5830f24..c696a5b12774 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_disk_full.png
+++ b/core/res/res/drawable-hdpi/stat_notify_disk_full.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_email_generic.png b/core/res/res/drawable-hdpi/stat_notify_email_generic.png
index 8d60237509fc..c19d6670f871 100644
--- a/core/res/res/drawable-hdpi/stat_notify_email_generic.png
+++ b/core/res/res/drawable-hdpi/stat_notify_email_generic.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_error.png b/core/res/res/drawable-hdpi/stat_notify_error.png
index 6942871ce121..dbaf94433b45 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_error.png
+++ b/core/res/res/drawable-hdpi/stat_notify_error.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_gmail.png b/core/res/res/drawable-hdpi/stat_notify_gmail.png
index bf8582a6f5c4..f205a7c85f91 100644
--- a/core/res/res/drawable-hdpi/stat_notify_gmail.png
+++ b/core/res/res/drawable-hdpi/stat_notify_gmail.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_missed_call.png b/core/res/res/drawable-hdpi/stat_notify_missed_call.png
index 6df57ff310cc..74f5df730406 100644
--- a/core/res/res/drawable-hdpi/stat_notify_missed_call.png
+++ b/core/res/res/drawable-hdpi/stat_notify_missed_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard.png b/core/res/res/drawable-hdpi/stat_notify_sdcard.png
index 08577742432c..5892d38a739e 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sdcard.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png b/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png
index 388049699cc9..1c101ea13def 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard_prepare.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
index ac984efd2397..901eac413552 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png b/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png
index b7ba4bae2137..a357251753f8 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sync.png b/core/res/res/drawable-hdpi/stat_notify_sync.png
index 76319b07efa5..90b39c958581 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sync.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sync.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sync_anim0.png b/core/res/res/drawable-hdpi/stat_notify_sync_anim0.png
index 863c3d738994..90b39c958581 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sync_anim0.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sync_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_sync_error.png b/core/res/res/drawable-hdpi/stat_notify_sync_error.png
index 0083c3f8114f..074cdee276cd 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_sync_error.png
+++ b/core/res/res/drawable-hdpi/stat_notify_sync_error.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_voicemail.png b/core/res/res/drawable-hdpi/stat_notify_voicemail.png
index 499325beb023..896d1ce08ecd 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_voicemail.png
+++ b/core/res/res/drawable-hdpi/stat_notify_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_wifi_in_range.png b/core/res/res/drawable-hdpi/stat_notify_wifi_in_range.png
index 8d80709599e6..97ddb3cfa014 100644
--- a/core/res/res/drawable-hdpi/stat_notify_wifi_in_range.png
+++ b/core/res/res/drawable-hdpi/stat_notify_wifi_in_range.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 615e8b3e7fe7..ddb8a71d76fe 100755..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/stat_sys_data_bluetooth.png b/core/res/res/drawable-hdpi/stat_sys_data_bluetooth.png
index 526fbfae4861..8e08f1c6e046 100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_bluetooth.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_data_usb.png b/core/res/res/drawable-hdpi/stat_sys_data_usb.png
index 606ef80b1c9f..f14f9080c121 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_data_usb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_data_usb.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim0.png b/core/res/res/drawable-hdpi/stat_sys_download_anim0.png
index 051012819e49..910de294cebd 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim1.png b/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
index 631622bb0355..71ea9250a2e5 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim2.png b/core/res/res/drawable-hdpi/stat_sys_download_anim2.png
index e3002459beed..bc1877dab0be 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim2.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim3.png b/core/res/res/drawable-hdpi/stat_sys_download_anim3.png
index fd220e3b04b9..9f41092baabf 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim4.png b/core/res/res/drawable-hdpi/stat_sys_download_anim4.png
index a1ea9e38c187..5fa63053785e 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim4.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim5.png b/core/res/res/drawable-hdpi/stat_sys_download_anim5.png
index 7804a295f3a4..703759ae5837 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim5.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_gps_on.png b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
index 542ebb04087d..cb8a1e81d8ea 100644
--- a/core/res/res/drawable-hdpi/stat_sys_gps_on.png
+++ b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_secure.png b/core/res/res/drawable-hdpi/stat_sys_secure.png
index c4a17deaffc2..5e979dba1e89 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_secure.png
+++ b/core/res/res/drawable-hdpi/stat_sys_secure.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
index a9a2b2e727a7..a9af4a88c849 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
index 6218c3f321f8..576bd77b889e 100644
--- a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
+++ b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_throttled.png b/core/res/res/drawable-hdpi/stat_sys_throttled.png
index 99ae4ac1170e..ed66abf49469 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_throttled.png
+++ b/core/res/res/drawable-hdpi/stat_sys_throttled.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png
index 48ba7354a3e3..78f54b7f57a9 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
index cbb06a598384..9ec9f2ecbb98 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim2.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim2.png
index e4edda95cdf8..3a9031e8e004 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim2.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
index c2a9b03545ad..486c1eda32ba 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim4.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim4.png
index 23f2f9da5218..b35672cc27db 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim4.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim5.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim5.png
index 3fd8b7fc13e5..4611122f5adc 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim5.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_warning.png b/core/res/res/drawable-hdpi/stat_sys_warning.png
index 0d1a33c96040..dbaf94433b45 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_warning.png
+++ b/core/res/res/drawable-hdpi/stat_sys_warning.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.png
index ed3656cdb952..e65f21a3f54f 100644
--- a/core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.png
index 7f4839664868..76c54841f073 100644
--- a/core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.png
index fb7cfb02c43b..80a7ef1d9bd1 100644
--- a/core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.png b/core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.png
index ff748602ff3e..bd11555ae568 100644
--- a/core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_bg_holo_dark.9.png
index 941b13147c07..1fba7ee14b44 100644
--- a/core/res/res/drawable-hdpi/switch_bg_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_bg_holo_light.9.png b/core/res/res/drawable-hdpi/switch_bg_holo_light.9.png
index a776df9ad7e8..5a484dfc8c68 100644
--- a/core/res/res/drawable-hdpi/switch_bg_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.png
index 268e3950f570..152c33889d47 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.png b/core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.png
index f842ca5bae17..9c44d4b77750 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.png
index 29e6f242dc81..cb456485fac8 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.png
index 08af1f7f7890..13dd09aeffb4 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.png
index 797e9fb7fd31..e72f42853938 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_holo_light.9.png b/core/res/res/drawable-hdpi/switch_thumb_holo_light.9.png
index 370faf287f59..84504eb4e053 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
index 200a24348389..44a4baa4cc16 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
index 4e537c9d0721..5c5ee814c304 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_bottom_holo.9.png b/core/res/res/drawable-hdpi/tab_bottom_holo.9.png
index ec9fa8d8054e..9286c7a93e8e 100644
--- a/core/res/res/drawable-hdpi/tab_bottom_holo.9.png
+++ b/core/res/res/drawable-hdpi/tab_bottom_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_focus.9.png b/core/res/res/drawable-hdpi/tab_focus.9.png
index 6e8a71fca1da..89a1c0bcb27c 100644
--- a/core/res/res/drawable-hdpi/tab_focus.9.png
+++ b/core/res/res/drawable-hdpi/tab_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_focus_bar_left.9.png b/core/res/res/drawable-hdpi/tab_focus_bar_left.9.png
index 51194a4df1f5..e879e37808e7 100644
--- a/core/res/res/drawable-hdpi/tab_focus_bar_left.9.png
+++ b/core/res/res/drawable-hdpi/tab_focus_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_focus_bar_right.9.png b/core/res/res/drawable-hdpi/tab_focus_bar_right.9.png
index 51194a4df1f5..e879e37808e7 100644
--- a/core/res/res/drawable-hdpi/tab_focus_bar_right.9.png
+++ b/core/res/res/drawable-hdpi/tab_focus_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_focused_holo.9.png b/core/res/res/drawable-hdpi/tab_focused_holo.9.png
deleted file mode 100644
index 39a8f7a2520d..000000000000
--- a/core/res/res/drawable-hdpi/tab_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_press.9.png b/core/res/res/drawable-hdpi/tab_press.9.png
index 119b2c683d5d..4c34188426b2 100644
--- a/core/res/res/drawable-hdpi/tab_press.9.png
+++ b/core/res/res/drawable-hdpi/tab_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_press_bar_left.9.png b/core/res/res/drawable-hdpi/tab_press_bar_left.9.png
index dc2fbce8b72d..c5f44f3ece38 100644
--- a/core/res/res/drawable-hdpi/tab_press_bar_left.9.png
+++ b/core/res/res/drawable-hdpi/tab_press_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_press_bar_right.9.png b/core/res/res/drawable-hdpi/tab_press_bar_right.9.png
index dc2fbce8b72d..c5f44f3ece38 100644
--- a/core/res/res/drawable-hdpi/tab_press_bar_right.9.png
+++ b/core/res/res/drawable-hdpi/tab_press_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_pressed_holo.9.png b/core/res/res/drawable-hdpi/tab_pressed_holo.9.png
index b8a569f7e5e8..2adb22ca101e 100644
--- a/core/res/res/drawable-hdpi/tab_pressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/tab_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_selected.9.png b/core/res/res/drawable-hdpi/tab_selected.9.png
index f036b9adbfb0..46a331f5a159 100644
--- a/core/res/res/drawable-hdpi/tab_selected.9.png
+++ b/core/res/res/drawable-hdpi/tab_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_selected_bar_left.9.png b/core/res/res/drawable-hdpi/tab_selected_bar_left.9.png
index aa935fe332a4..53efbb4b7d87 100644
--- a/core/res/res/drawable-hdpi/tab_selected_bar_left.9.png
+++ b/core/res/res/drawable-hdpi/tab_selected_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_selected_bar_right.9.png b/core/res/res/drawable-hdpi/tab_selected_bar_right.9.png
index aa935fe332a4..53efbb4b7d87 100644
--- a/core/res/res/drawable-hdpi/tab_selected_bar_right.9.png
+++ b/core/res/res/drawable-hdpi/tab_selected_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_unselected.9.png b/core/res/res/drawable-hdpi/tab_unselected.9.png
index c3a1f30f668c..74181af4b43c 100644
--- a/core/res/res/drawable-hdpi/tab_unselected.9.png
+++ b/core/res/res/drawable-hdpi/tab_unselected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
index c564495e13bd..c6adea3cedf6 100644
--- a/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
+++ b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.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 e42a62ee6a1b..82cb640e96a4 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 00d47f2d8251..a2a909a734e3 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 7426543a14eb..31f1c035cd6c 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_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/textfield_focused_holo_dark.9.png
index 0ce5d13f42f8..03a81d97b5db 100644
--- a/core/res/res/drawable-hdpi/textfield_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/textfield_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_focused_holo_light.9.png b/core/res/res/drawable-hdpi/textfield_focused_holo_light.9.png
index 945516e7932a..03a81d97b5db 100644
--- a/core/res/res/drawable-hdpi/textfield_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/textfield_focused_holo_light.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 e79e95b7bc9e..b77874103a89 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_light.9.png b/core/res/res/drawable-hdpi/textfield_search_selected_holo_light.9.png
index 177b631b7db8..c423a742edea 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-land-hdpi/bottombar_565.png b/core/res/res/drawable-land-hdpi/bottombar_565.png
deleted file mode 100755
index 9df56ca8c858..000000000000
--- a/core/res/res/drawable-land-hdpi/bottombar_565.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-ldpi/bottombar_565.png b/core/res/res/drawable-land-ldpi/bottombar_565.png
deleted file mode 100644
index 112c17dc51c4..000000000000
--- a/core/res/res/drawable-land-ldpi/bottombar_565.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/bottombar_565.png b/core/res/res/drawable-land-mdpi/bottombar_565.png
deleted file mode 100644
index 6121856704a0..000000000000
--- a/core/res/res/drawable-land-mdpi/bottombar_565.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-land-xhdpi/btn_lock_normal.9.png b/core/res/res/drawable-land-xhdpi/btn_lock_normal.9.png
new file mode 100644
index 000000000000..e7c4a19b01be
--- /dev/null
+++ b/core/res/res/drawable-land-xhdpi/btn_lock_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_bottom_solid_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_bottom_solid_dark_holo.9.png
index 3807a48e8f58..b3d51ed6aeb3 100644
--- a/core/res/res/drawable-mdpi/ab_bottom_solid_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_bottom_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_bottom_solid_inverse_holo.9.png b/core/res/res/drawable-mdpi/ab_bottom_solid_inverse_holo.9.png
index 99944386e33c..abae537bede6 100644
--- a/core/res/res/drawable-mdpi/ab_bottom_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_bottom_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_bottom_solid_light_holo.9.png b/core/res/res/drawable-mdpi/ab_bottom_solid_light_holo.9.png
index 564840360fe8..4c98afb7393c 100644
--- a/core/res/res/drawable-mdpi/ab_bottom_solid_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_bottom_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_bottom_transparent_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_bottom_transparent_dark_holo.9.png
index 261365d49b4a..de8010a1425c 100644
--- a/core/res/res/drawable-mdpi/ab_bottom_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_bottom_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_bottom_transparent_light_holo.9.png b/core/res/res/drawable-mdpi/ab_bottom_transparent_light_holo.9.png
index 95df5fcc4391..ecb2a0e5ed39 100644
--- a/core/res/res/drawable-mdpi/ab_bottom_transparent_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_bottom_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_solid_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_solid_dark_holo.9.png
index 4a6c3bc9027d..56d27a8e79cd 100644
--- a/core/res/res/drawable-mdpi/ab_solid_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_solid_light_holo.9.png b/core/res/res/drawable-mdpi/ab_solid_light_holo.9.png
index 93a0c3e19301..98b4956cc741 100644
--- a/core/res/res/drawable-mdpi/ab_solid_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_solid_shadow_holo.9.png b/core/res/res/drawable-mdpi/ab_solid_shadow_holo.9.png
index f3abd078fbc7..dcd3703ba1bc 100644
--- a/core/res/res/drawable-mdpi/ab_solid_shadow_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_solid_shadow_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_stacked_solid_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_stacked_solid_dark_holo.9.png
index e1d8f67ed004..aa0a3a0ed54e 100644
--- a/core/res/res/drawable-mdpi/ab_stacked_solid_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_stacked_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png b/core/res/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
index 9d7e953e4ca0..cf1796741178 100644
--- a/core/res/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_stacked_solid_light_holo.9.png b/core/res/res/drawable-mdpi/ab_stacked_solid_light_holo.9.png
index 711e0fdae66b..ab0003b69178 100644
--- a/core/res/res/drawable-mdpi/ab_stacked_solid_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_stacked_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_stacked_transparent_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_stacked_transparent_dark_holo.9.png
index 9649a2deeb94..5f1eb1e29bad 100644
--- a/core/res/res/drawable-mdpi/ab_stacked_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_stacked_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_stacked_transparent_light_holo.9.png b/core/res/res/drawable-mdpi/ab_stacked_transparent_light_holo.9.png
index 376e4efc7d00..89822b633f41 100644
--- a/core/res/res/drawable-mdpi/ab_stacked_transparent_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_stacked_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_transparent_dark_holo.9.png b/core/res/res/drawable-mdpi/ab_transparent_dark_holo.9.png
index 99c8fd3d1751..bd9921f5d2fa 100644
--- a/core/res/res/drawable-mdpi/ab_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_transparent_light_holo.9.png b/core/res/res/drawable-mdpi/ab_transparent_light_holo.9.png
index a86ec34538c0..8d93926fe1b8 100644
--- a/core/res/res/drawable-mdpi/ab_transparent_light_holo.9.png
+++ b/core/res/res/drawable-mdpi/ab_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.png
index b77cc78d3e34..290b9776963e 100644
--- a/core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.png
index aa00c75544ba..290b9776963e 100644
--- a/core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.png
index e35333b61bad..ffc11b78201e 100644
--- a/core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.png
index 878fddaec00b..8b5d036ef486 100644
--- a/core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
index 0fbdbfa061fb..93767a5ae8fa 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_off.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_off.9.png
index ae9745374304..7f16a44cdf23 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_off.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_on.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_on.9.png
index 4127d1ee7274..7887c2e9cc90 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_on.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
index 525ab8a40f19..88dc173349dd 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_off.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_off.9.png
index eb05820ded0a..9578c094cf89 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_off.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_on.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_on.9.png
index 416b2c7295b0..48d2b0911b69 100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_on.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_dark.png
index 480ef44a4878..056b9b81a258 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_light.png
index eaac9164d4e3..66aab5453360 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_dark.png
index 2f27022fc126..303177c1c059 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_light.png
index 20a98b39b4d5..e939d9213117 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
index 46ebc0d68e0c..b615e9e4851f 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
index 8052955462c4..a081e7e5b48a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_dark.png
index 7bd427611987..f43d7fc5abd5 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_light.png
index 0473f84c8d33..e137d464886d 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_dark.png
index d92d7ee4db8b..1337d85a4fd2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_light.png
index f10cbd3783ec..4dc896edcf3a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_dark.png
index 3ec97a3e5fb3..d051fb7e86c0 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_light.png
index 6624511cfccf..260283d6c709 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_holo_dark.png
index 78262054a055..6628c81831d2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_holo_light.png
index ed5acc92c110..3bfa580b3f6e 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
index fad9d2a0d73d..a6ccaabc9bb3 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
index f5d5453f28d9..001cada139d2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
index e51a584cea34..ebea1db0906d 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
index 820416ad067c..761c9361a351 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
index f02e8384eb7b..c505d3d659ea 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
index 321fcb96249d..99a71ef3a03e 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
index f671c566c27e..3c48fa10e16f 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/checkbox_off_background.png b/core/res/res/drawable-mdpi/checkbox_off_background.png
index 6b2124f7ee83..825ea6606ab7 100644
--- a/core/res/res/drawable-mdpi/checkbox_off_background.png
+++ b/core/res/res/drawable-mdpi/checkbox_off_background.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/checkbox_on_background.png b/core/res/res/drawable-mdpi/checkbox_on_background.png
index 56495fc1a7e0..57585da31258 100644
--- a/core/res/res/drawable-mdpi/checkbox_on_background.png
+++ b/core/res/res/drawable-mdpi/checkbox_on_background.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 c32db7e5db53..94ad00618e2c 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 196331608278..75d642cf206d 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/create_contact.png b/core/res/res/drawable-mdpi/create_contact.png
index 5c5718bafc00..5a9360b272e7 100644
--- a/core/res/res/drawable-mdpi/create_contact.png
+++ b/core/res/res/drawable-mdpi/create_contact.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/day_picker_week_view_dayline_holo.9.png b/core/res/res/drawable-mdpi/day_picker_week_view_dayline_holo.9.png
index a8cfd773cb34..7b750192462e 100644
--- a/core/res/res/drawable-mdpi/day_picker_week_view_dayline_holo.9.png
+++ b/core/res/res/drawable-mdpi/day_picker_week_view_dayline_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_dark.9.png
index 77b0999850e3..185146806333 100644
--- a/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_light.9.png
index 3fde76e3421a..a60aad5d7ac4 100644
--- a/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_divider_horizontal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_dark.9.png
index d9ad9d31ea50..bc6636cc231a 100644
--- a/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_light.9.png
index 3d82dc642108..7f9a9f13e773 100644
--- a/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/dropdown_disabled_holo_dark.9.png
index 15e2993f5a69..6af742a97285 100644
--- a/core/res/res/drawable-mdpi/dropdown_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/dropdown_disabled_holo_light.9.png
index 48315568f11e..f54d0b4f1f9c 100644
--- a/core/res/res/drawable-mdpi/dropdown_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/dropdown_focused_holo_dark.9.png
index 4021da81deac..b7044db5121b 100644
--- a/core/res/res/drawable-mdpi/dropdown_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_focused_holo_light.9.png b/core/res/res/drawable-mdpi/dropdown_focused_holo_light.9.png
index 120fe9a32652..0de1bb1bcb05 100644
--- a/core/res/res/drawable-mdpi/dropdown_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png
index d2b3557ac9fd..95e684a7ea5f 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_light.png
index cf501692c391..ed3e2401cb15 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_dark.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_dark.png
index 26634119cc69..2bbfc3a89e0e 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_light.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_light.png
index def24e48cd42..db6347b8db9d 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_focused_holo_light.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_focused_holo_light.png
index 85372b96e91f..7c88a57e58eb 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png
index 566be42b1a17..81de1bb4610d 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_light.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_light.png
index e600500657d9..c3fdef7bffb2 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_ic_arrow_pressed_holo_light.png b/core/res/res/drawable-mdpi/dropdown_ic_arrow_pressed_holo_light.png
index 52fc112e68f1..5352c0247ca1 100644
--- a/core/res/res/drawable-mdpi/dropdown_ic_arrow_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/dropdown_ic_arrow_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/dropdown_normal_holo_dark.9.png
index a5da0cd512ea..05d9e7e9b855 100644
--- a/core/res/res/drawable-mdpi/dropdown_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_normal_holo_light.9.png b/core/res/res/drawable-mdpi/dropdown_normal_holo_light.9.png
index 6695af9fe52f..4a15c63708a8 100644
--- a/core/res/res/drawable-mdpi/dropdown_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/dropdown_pressed_holo_dark.9.png
index e7e70fb8b914..5248c48b1ecb 100644
--- a/core/res/res/drawable-mdpi/dropdown_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dropdown_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/dropdown_pressed_holo_light.9.png
index f760c88a6b96..f2f6428dee02 100644
--- a/core/res/res/drawable-mdpi/dropdown_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dropdown_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_angel.png b/core/res/res/drawable-mdpi/emo_im_angel.png
index c34dfa69b4b1..297fcf0f0e50 100644
--- a/core/res/res/drawable-mdpi/emo_im_angel.png
+++ b/core/res/res/drawable-mdpi/emo_im_angel.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_cool.png b/core/res/res/drawable-mdpi/emo_im_cool.png
index d8eeb34e5d43..9ee1d5dda643 100644
--- a/core/res/res/drawable-mdpi/emo_im_cool.png
+++ b/core/res/res/drawable-mdpi/emo_im_cool.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_crying.png b/core/res/res/drawable-mdpi/emo_im_crying.png
index 1cafdb32613c..42ec8db47d12 100644
--- a/core/res/res/drawable-mdpi/emo_im_crying.png
+++ b/core/res/res/drawable-mdpi/emo_im_crying.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_embarrassed.png b/core/res/res/drawable-mdpi/emo_im_embarrassed.png
index e4db9634f83a..048f4b1363e0 100644
--- a/core/res/res/drawable-mdpi/emo_im_embarrassed.png
+++ b/core/res/res/drawable-mdpi/emo_im_embarrassed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_foot_in_mouth.png b/core/res/res/drawable-mdpi/emo_im_foot_in_mouth.png
index 09d1fba62e4a..db5c801e4204 100644
--- a/core/res/res/drawable-mdpi/emo_im_foot_in_mouth.png
+++ b/core/res/res/drawable-mdpi/emo_im_foot_in_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_happy.png b/core/res/res/drawable-mdpi/emo_im_happy.png
index b86602ae7e99..e85af7db84dd 100644
--- a/core/res/res/drawable-mdpi/emo_im_happy.png
+++ b/core/res/res/drawable-mdpi/emo_im_happy.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_kissing.png b/core/res/res/drawable-mdpi/emo_im_kissing.png
index 56378f6a8dd2..6c2458c57c3b 100644
--- a/core/res/res/drawable-mdpi/emo_im_kissing.png
+++ b/core/res/res/drawable-mdpi/emo_im_kissing.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_laughing.png b/core/res/res/drawable-mdpi/emo_im_laughing.png
index 980bf28118b7..268c8642eb32 100644
--- a/core/res/res/drawable-mdpi/emo_im_laughing.png
+++ b/core/res/res/drawable-mdpi/emo_im_laughing.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_lips_are_sealed.png b/core/res/res/drawable-mdpi/emo_im_lips_are_sealed.png
index f2de993b3661..a838158cdead 100644
--- a/core/res/res/drawable-mdpi/emo_im_lips_are_sealed.png
+++ b/core/res/res/drawable-mdpi/emo_im_lips_are_sealed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_money_mouth.png b/core/res/res/drawable-mdpi/emo_im_money_mouth.png
index 08c53fd690d0..56fcce4be7f4 100644
--- a/core/res/res/drawable-mdpi/emo_im_money_mouth.png
+++ b/core/res/res/drawable-mdpi/emo_im_money_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_sad.png b/core/res/res/drawable-mdpi/emo_im_sad.png
index 31c08d06d522..c5245cc6c26c 100644
--- a/core/res/res/drawable-mdpi/emo_im_sad.png
+++ b/core/res/res/drawable-mdpi/emo_im_sad.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_surprised.png b/core/res/res/drawable-mdpi/emo_im_surprised.png
index abe8c7ad0d24..231ccb1f606a 100644
--- a/core/res/res/drawable-mdpi/emo_im_surprised.png
+++ b/core/res/res/drawable-mdpi/emo_im_surprised.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.png b/core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.png
index 6f0f47b0e1a6..93847189758f 100644
--- a/core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.png
+++ b/core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_undecided.png b/core/res/res/drawable-mdpi/emo_im_undecided.png
index eb4f8c5bd392..9927af90f9ba 100644
--- a/core/res/res/drawable-mdpi/emo_im_undecided.png
+++ b/core/res/res/drawable-mdpi/emo_im_undecided.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_winking.png b/core/res/res/drawable-mdpi/emo_im_winking.png
index 568562ad6fa7..a9b39bd3aa90 100644
--- a/core/res/res/drawable-mdpi/emo_im_winking.png
+++ b/core/res/res/drawable-mdpi/emo_im_winking.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_wtf.png b/core/res/res/drawable-mdpi/emo_im_wtf.png
index 41dd47fcc16f..17806523e089 100644
--- a/core/res/res/drawable-mdpi/emo_im_wtf.png
+++ b/core/res/res/drawable-mdpi/emo_im_wtf.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/emo_im_yelling.png b/core/res/res/drawable-mdpi/emo_im_yelling.png
index c3c8612bd102..18e47153e42f 100644
--- a/core/res/res/drawable-mdpi/emo_im_yelling.png
+++ b/core/res/res/drawable-mdpi/emo_im_yelling.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
index e37c5597acac..6fa069fac957 100644
--- a/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_light.9.png b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
index 2ea96680937f..b9067933008e 100644
--- a/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
index 18a991fced99..5c7fa382727c 100644
--- a/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_light.9.png b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
index 28b9ec76f474..c392ecbfef4d 100644
--- a/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
index 6f51eef7474a..9dddbd2ac59a 100644
--- a/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
index 2ff83ed14135..6da2c1cbb232 100644
--- a/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
index 8796e21daa33..55f17c2f5cca 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
index 8796e21daa33..55f17c2f5cca 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
index e037d61b5694..34e126b26625 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
index e037d61b5694..34e126b26625 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-mdpi/ic_audio_alarm_mute.png
index ca3ed933983e..451e9321b085 100644
--- a/core/res/res/drawable-mdpi/ic_audio_alarm_mute.png
+++ b/core/res/res/drawable-mdpi/ic_audio_alarm_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_bt_mute.png b/core/res/res/drawable-mdpi/ic_audio_bt_mute.png
index 017338e765eb..f734c1c630bb 100644
--- a/core/res/res/drawable-mdpi/ic_audio_bt_mute.png
+++ b/core/res/res/drawable-mdpi/ic_audio_bt_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_notification_mute.png b/core/res/res/drawable-mdpi/ic_audio_notification_mute.png
index f0b6d8ab18db..2567f7678f33 100644
--- a/core/res/res/drawable-mdpi/ic_audio_notification_mute.png
+++ b/core/res/res/drawable-mdpi/ic_audio_notification_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_phone.png b/core/res/res/drawable-mdpi/ic_audio_phone.png
index 00ec59e6fb0a..beda721fdc3c 100644
--- a/core/res/res/drawable-mdpi/ic_audio_phone.png
+++ b/core/res/res/drawable-mdpi/ic_audio_phone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
index 856193b11492..b9b7c7b79a32 100644
--- a/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
+++ b/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png
index d5d1360a6ae4..cbe5021fa6ab 100644
--- a/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png
+++ b/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_vol_mute.png b/core/res/res/drawable-mdpi/ic_audio_vol_mute.png
index 52611b6c3b91..0dfc21ff7ce0 100644
--- a/core/res/res/drawable-mdpi/ic_audio_vol_mute.png
+++ b/core/res/res/drawable-mdpi/ic_audio_vol_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_btn_search.png b/core/res/res/drawable-mdpi/ic_btn_search.png
index 3f8913e2aa08..662f5de9151b 100644
--- a/core/res/res/drawable-mdpi/ic_btn_search.png
+++ b/core/res/res/drawable-mdpi/ic_btn_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_btn_search_go.png b/core/res/res/drawable-mdpi/ic_btn_search_go.png
index 0ed9e8e8d873..9a4e9b90a683 100644
--- a/core/res/res/drawable-mdpi/ic_btn_search_go.png
+++ b/core/res/res/drawable-mdpi/ic_btn_search_go.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_btn_speak_now.png b/core/res/res/drawable-mdpi/ic_btn_speak_now.png
index 83ee68b5d1f5..0589be66a4b9 100644
--- a/core/res/res/drawable-mdpi/ic_btn_speak_now.png
+++ b/core/res/res/drawable-mdpi/ic_btn_speak_now.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_disabled.png b/core/res/res/drawable-mdpi/ic_clear_disabled.png
index b9c3b4450568..79228baed020 100644
--- a/core/res/res/drawable-mdpi/ic_clear_disabled.png
+++ b/core/res/res/drawable-mdpi/ic_clear_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_search_api_disabled_holo_light.png b/core/res/res/drawable-mdpi/ic_clear_search_api_disabled_holo_light.png
index 3edbd740858a..c0bdf0641a19 100644
--- a/core/res/res/drawable-mdpi/ic_clear_search_api_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_clear_search_api_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_clear_search_api_holo_light.png
index 90db01b5bcf1..15b86cbb21eb 100644
--- a/core/res/res/drawable-mdpi/ic_clear_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_clear_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit.png b/core/res/res/drawable-mdpi/ic_commit.png
index 49d7ec87ea91..3d167b597284 100644
--- a/core/res/res/drawable-mdpi/ic_commit.png
+++ b/core/res/res/drawable-mdpi/ic_commit.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit_search_api_holo_dark.png b/core/res/res/drawable-mdpi/ic_commit_search_api_holo_dark.png
new file mode 100644
index 000000000000..844c99c22f9c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_commit_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_commit_search_api_holo_light.png
index b01688fa3225..86c170e97b10 100644
--- a/core/res/res/drawable-mdpi/ic_commit_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_commit_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_contact_picture.png b/core/res/res/drawable-mdpi/ic_contact_picture.png
index faa3dc04644f..535a7728c850 100644
--- a/core/res/res/drawable-mdpi/ic_contact_picture.png
+++ b/core/res/res/drawable-mdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_contact_picture_2.png b/core/res/res/drawable-mdpi/ic_contact_picture_2.png
index 8b184af7cfe4..004a6c6f1e3e 100644
--- a/core/res/res/drawable-mdpi/ic_contact_picture_2.png
+++ b/core/res/res/drawable-mdpi/ic_contact_picture_2.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_contact_picture_3.png b/core/res/res/drawable-mdpi/ic_contact_picture_3.png
index a2d08b55fe8e..001bf29cc96d 100644
--- a/core/res/res/drawable-mdpi/ic_contact_picture_3.png
+++ b/core/res/res/drawable-mdpi/ic_contact_picture_3.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_dialog_alert.png b/core/res/res/drawable-mdpi/ic_dialog_alert.png
index 0a7de04767ee..ef498efb73ab 100644
--- a/core/res/res/drawable-mdpi/ic_dialog_alert.png
+++ b/core/res/res/drawable-mdpi/ic_dialog_alert.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_go.png b/core/res/res/drawable-mdpi/ic_go.png
index 234064838de1..bf19833f2e1e 100644
--- a/core/res/res/drawable-mdpi/ic_go.png
+++ b/core/res/res/drawable-mdpi/ic_go.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_go_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_go_search_api_holo_light.png
index 7e1ba2adc627..8518498eb6c9 100644
--- a/core/res/res/drawable-mdpi/ic_go_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_go_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-mdpi/ic_lock_airplane_mode.png
index caafcb2ef53d..2b1dc1a8c5da 100755..100644
--- a/core/res/res/drawable-mdpi/ic_lock_airplane_mode.png
+++ b/core/res/res/drawable-mdpi/ic_lock_airplane_mode.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off.png b/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off.png
index cb2cbdf181a6..49ed3d2ddb87 100755..100644
--- a/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off.png
+++ b/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_lock.png b/core/res/res/drawable-mdpi/ic_lock_lock.png
index b662b03c9bb5..5ff3654d3172 100644
--- a/core/res/res/drawable-mdpi/ic_lock_lock.png
+++ b/core/res/res/drawable-mdpi/ic_lock_lock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_power_off.png b/core/res/res/drawable-mdpi/ic_lock_power_off.png
index 4405b437e59c..2c55e475bac1 100644
--- a/core/res/res/drawable-mdpi/ic_lock_power_off.png
+++ b/core/res/res/drawable-mdpi/ic_lock_power_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_silent_mode_off.png b/core/res/res/drawable-mdpi/ic_lock_silent_mode_off.png
index 95257a36ab82..1a02aaa77af5 100644
--- a/core/res/res/drawable-mdpi/ic_lock_silent_mode_off.png
+++ b/core/res/res/drawable-mdpi/ic_lock_silent_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_ime.png b/core/res/res/drawable-mdpi/ic_lockscreen_ime.png
new file mode 100644
index 000000000000..b27e059260ce
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_embed_play.png b/core/res/res/drawable-mdpi/ic_media_embed_play.png
index fc5d8c622f6a..3576ce53e421 100644
--- a/core/res/res/drawable-mdpi/ic_media_embed_play.png
+++ b/core/res/res/drawable-mdpi/ic_media_embed_play.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_ff.png b/core/res/res/drawable-mdpi/ic_media_ff.png
index 892772eb13e4..170dd2daaa75 100644
--- a/core/res/res/drawable-mdpi/ic_media_ff.png
+++ b/core/res/res/drawable-mdpi/ic_media_ff.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_fullscreen.png b/core/res/res/drawable-mdpi/ic_media_fullscreen.png
index 1c60e1586477..960aa851053e 100644
--- a/core/res/res/drawable-mdpi/ic_media_fullscreen.png
+++ b/core/res/res/drawable-mdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_next.png b/core/res/res/drawable-mdpi/ic_media_next.png
index bbe311b76fda..a6feed0e9e38 100644
--- a/core/res/res/drawable-mdpi/ic_media_next.png
+++ b/core/res/res/drawable-mdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_pause.png b/core/res/res/drawable-mdpi/ic_media_pause.png
index e4e8d86b62a6..548ba0219311 100644
--- a/core/res/res/drawable-mdpi/ic_media_pause.png
+++ b/core/res/res/drawable-mdpi/ic_media_pause.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_play.png b/core/res/res/drawable-mdpi/ic_media_play.png
index 8eaf96240ed2..0fe680647e94 100644
--- a/core/res/res/drawable-mdpi/ic_media_play.png
+++ b/core/res/res/drawable-mdpi/ic_media_play.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_previous.png b/core/res/res/drawable-mdpi/ic_media_previous.png
index e9abc7f3bd81..0163d094596d 100644
--- a/core/res/res/drawable-mdpi/ic_media_previous.png
+++ b/core/res/res/drawable-mdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_rew.png b/core/res/res/drawable-mdpi/ic_media_rew.png
index a5eb94a25460..5489180eb16e 100644
--- a/core/res/res/drawable-mdpi/ic_media_rew.png
+++ b/core/res/res/drawable-mdpi/ic_media_rew.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_stop.png b/core/res/res/drawable-mdpi/ic_media_stop.png
new file mode 100644
index 000000000000..24bcb709205d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_stop.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_notification_ime_default.png b/core/res/res/drawable-mdpi/ic_notification_ime_default.png
index 1a9d88c0b664..67269e824947 100644
--- a/core/res/res/drawable-mdpi/ic_notification_ime_default.png
+++ b/core/res/res/drawable-mdpi/ic_notification_ime_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search.png b/core/res/res/drawable-mdpi/ic_search.png
index d92071b995b9..4be72f108ba1 100644
--- a/core/res/res/drawable-mdpi/ic_search.png
+++ b/core/res/res/drawable-mdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
index 72e207bc5dc8..f2e26f8838bd 100644
--- a/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search.png b/core/res/res/drawable-mdpi/ic_voice_search.png
index a2fe87452859..73c6be654aa8 100644
--- a/core/res/res/drawable-mdpi/ic_voice_search.png
+++ b/core/res/res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
index 3481c982862c..71d838e736f2 100644
--- a/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
index fe72d000d4bf..f6d9f1bf7986 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
index be666c6f553c..b7262d17ff1e 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png
index adbb146d6fa1..0f1190b74693 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png
index e8be7bf370b3..88ca2e0f1109 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png
index 120a9d8878f8..f0f9436273f8 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png
index 60ec1462a4b3..8aa1263ed9d5 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png
index 747745378c7a..4a89f4b866cc 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png
index c79a35cf3da8..78c7a9fd5e27 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png
index 2e6ca2ebf201..36f9a3224b7a 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_target_gray.png b/core/res/res/drawable-mdpi/jog_tab_target_gray.png
index 517b2534703b..a1e25e12081a 100644
--- a/core/res/res/drawable-mdpi/jog_tab_target_gray.png
+++ b/core/res/res/drawable-mdpi/jog_tab_target_gray.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_target_green.png b/core/res/res/drawable-mdpi/jog_tab_target_green.png
index 188f3cc838c4..d1377eedf059 100644
--- a/core/res/res/drawable-mdpi/jog_tab_target_green.png
+++ b/core/res/res/drawable-mdpi/jog_tab_target_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_target_red.png b/core/res/res/drawable-mdpi/jog_tab_target_red.png
index a36394dc5158..b840bc62dbbe 100644
--- a/core/res/res/drawable-mdpi/jog_tab_target_red.png
+++ b/core/res/res/drawable-mdpi/jog_tab_target_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_target_yellow.png b/core/res/res/drawable-mdpi/jog_tab_target_yellow.png
index ba999b10410e..58b2e626a067 100644
--- a/core/res/res/drawable-mdpi/jog_tab_target_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_tab_target_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
index b60aaa5915b9..6e77525d2dbb 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
index b60aaa5915b9..6e77525d2dbb 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png b/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
index f7074535db90..af0bc168d587 100644
--- a/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png b/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
index 441ccc0530ac..c2f2dd87c92d 100644
--- a/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png b/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
index faa0672b781c..4cbcee9039e1 100644
--- a/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selected_holo_light.9.png b/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
index faa0672b781c..4cbcee9039e1 100644
--- a/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_submenu_background.9.png b/core/res/res/drawable-mdpi/menu_submenu_background.9.png
index a1535321ce79..2281c46e9b6a 100644
--- a/core/res/res/drawable-mdpi/menu_submenu_background.9.png
+++ b/core/res/res/drawable-mdpi/menu_submenu_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png b/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png
index 9ecb8af06c6e..f0bdfb0a4c4e 100644
--- a/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png
+++ b/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/overscroll_glow.png b/core/res/res/drawable-mdpi/overscroll_glow.png
index e63e465d9605..8389ef4c5820 100644
--- a/core/res/res/drawable-mdpi/overscroll_glow.png
+++ b/core/res/res/drawable-mdpi/overscroll_glow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
index 78a86a58e56c..c64da8d0e712 100644
--- a/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error.9.png b/core/res/res/drawable-mdpi/popup_inline_error.9.png
index 6a8297af915f..2d62071ad29a 100755..100644
--- a/core/res/res/drawable-mdpi/popup_inline_error.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_inline_error_above.9.png b/core/res/res/drawable-mdpi/popup_inline_error_above.9.png
index 2e601d0c81d6..a318891f258c 100644
--- a/core/res/res/drawable-mdpi/popup_inline_error_above.9.png
+++ b/core/res/res/drawable-mdpi/popup_inline_error_above.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png
index c5418f9efc33..3d946e545d1e 100644
--- a/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png
index c943b2e8228c..4bb22f0e10e6 100644
--- a/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
index 4bf3cb9b2d65..31228b6950bc 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
index 4bf3cb9b2d65..31228b6950bc 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
index b13c8789969c..7274274b178b 100644
--- a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png
index b13c8789969c..7274274b178b 100644
--- a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_secondary_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 09203367ef1a..0fc20e01acc1 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 fb7a95588f91..2b7a262cf201 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/scrubber_primary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
index c9945199d17e..7cbf2f2ccd78 100644
--- a/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
index 5e21da42cbb5..81772a851b53 100644
--- a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png
index 017b593cef3b..b8037a36f032 100644
--- a/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png
index 12c6e21072ca..76df16ffd5a4 100644
--- a/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png
index 8cedc021e939..9c99bdabff4c 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png
index b5af0f72f6f9..81b205a59660 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png
index ffb97a554599..3ad668770537 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png
index 1d7948c0fd49..fab4c6762af0 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png
index fb6a0a0c4683..bfe4da89f836 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png
index fb6a0a0c4683..bfe4da89f836 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png
index 556b1068edc2..dda29986727a 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png
index fcca39ff4b5d..951301dfa062 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png
index ddc2b22b87a5..f88dcbad908d 100644
--- a/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png
index eb0d50148811..c75eecee6e3d 100644
--- a/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png
index 8ba2a42634d0..eb23155e7d0f 100644
--- a/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png
index cf5096437245..4318af5e74ed 100644
--- a/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png
index 7ab9428fdd91..440ef6dda0a5 100644
--- a/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png
index 7ab9428fdd91..440ef6dda0a5 100644
--- a/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png
index 5654920d75f6..4785df9464ec 100644
--- a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png
index 655339d41f3c..246e0d0345d2 100644
--- a/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_call_mute.png b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
index 845ec864096a..8797a09874e1 100644
--- a/core/res/res/drawable-mdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_car_mode.png b/core/res/res/drawable-mdpi/stat_notify_car_mode.png
index dfd2e0a1adaf..d8015dc5d25c 100644
--- a/core/res/res/drawable-mdpi/stat_notify_car_mode.png
+++ b/core/res/res/drawable-mdpi/stat_notify_car_mode.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_chat.png b/core/res/res/drawable-mdpi/stat_notify_chat.png
index e4464c23d075..82c83d0b123c 100644
--- a/core/res/res/drawable-mdpi/stat_notify_chat.png
+++ b/core/res/res/drawable-mdpi/stat_notify_chat.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_disk_full.png b/core/res/res/drawable-mdpi/stat_notify_disk_full.png
index 69b513c946ab..392e7bf2f343 100755..100644
--- a/core/res/res/drawable-mdpi/stat_notify_disk_full.png
+++ b/core/res/res/drawable-mdpi/stat_notify_disk_full.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_email_generic.png b/core/res/res/drawable-mdpi/stat_notify_email_generic.png
index 42d518d8724d..7732c1087d9b 100644
--- a/core/res/res/drawable-mdpi/stat_notify_email_generic.png
+++ b/core/res/res/drawable-mdpi/stat_notify_email_generic.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_error.png b/core/res/res/drawable-mdpi/stat_notify_error.png
index ddf0a2f16b13..168f8f6ff88e 100644
--- a/core/res/res/drawable-mdpi/stat_notify_error.png
+++ b/core/res/res/drawable-mdpi/stat_notify_error.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_gmail.png b/core/res/res/drawable-mdpi/stat_notify_gmail.png
index 516e865a0904..47ee78265b61 100644
--- a/core/res/res/drawable-mdpi/stat_notify_gmail.png
+++ b/core/res/res/drawable-mdpi/stat_notify_gmail.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_missed_call.png b/core/res/res/drawable-mdpi/stat_notify_missed_call.png
index d2e363150774..9583a6bc993a 100644
--- a/core/res/res/drawable-mdpi/stat_notify_missed_call.png
+++ b/core/res/res/drawable-mdpi/stat_notify_missed_call.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_more.png b/core/res/res/drawable-mdpi/stat_notify_more.png
index a85a16eae4a2..ca9e09e77145 100644
--- a/core/res/res/drawable-mdpi/stat_notify_more.png
+++ b/core/res/res/drawable-mdpi/stat_notify_more.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard.png b/core/res/res/drawable-mdpi/stat_notify_sdcard.png
index 8f642011a57a..5eae7a2c144a 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sdcard.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png b/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png
index fc051fac7ca1..a7a8b5c67968 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard_prepare.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
index b936f455a1db..6f17febbacea 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sdcard_usb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sim_toolkit.png b/core/res/res/drawable-mdpi/stat_notify_sim_toolkit.png
index 87327b424d2c..6a774cf16a34 100755..100644
--- a/core/res/res/drawable-mdpi/stat_notify_sim_toolkit.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sim_toolkit.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sync.png b/core/res/res/drawable-mdpi/stat_notify_sync.png
index 4876b8e761b3..1be8677f1694 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sync.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sync.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sync_anim0.png b/core/res/res/drawable-mdpi/stat_notify_sync_anim0.png
index 8372756f6601..1be8677f1694 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sync_anim0.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sync_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_sync_error.png b/core/res/res/drawable-mdpi/stat_notify_sync_error.png
index 27255495d185..30658c583608 100644
--- a/core/res/res/drawable-mdpi/stat_notify_sync_error.png
+++ b/core/res/res/drawable-mdpi/stat_notify_sync_error.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_voicemail.png b/core/res/res/drawable-mdpi/stat_notify_voicemail.png
index 67a0f91bf1c4..dd7014685f5d 100644
--- a/core/res/res/drawable-mdpi/stat_notify_voicemail.png
+++ b/core/res/res/drawable-mdpi/stat_notify_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_wifi_in_range.png b/core/res/res/drawable-mdpi/stat_notify_wifi_in_range.png
index de632979fbe1..11b6a5a3bfda 100644
--- a/core/res/res/drawable-mdpi/stat_notify_wifi_in_range.png
+++ b/core/res/res/drawable-mdpi/stat_notify_wifi_in_range.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 6ba480d93aae..730d96f7acc9 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/stat_sys_data_bluetooth.png b/core/res/res/drawable-mdpi/stat_sys_data_bluetooth.png
index 46f690104768..68fe66aa5b26 100644
--- a/core/res/res/drawable-mdpi/stat_sys_data_bluetooth.png
+++ b/core/res/res/drawable-mdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_data_usb.png b/core/res/res/drawable-mdpi/stat_sys_data_usb.png
index 44860bfb8352..40d77f0a38f5 100644
--- a/core/res/res/drawable-mdpi/stat_sys_data_usb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_data_usb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim0.png b/core/res/res/drawable-mdpi/stat_sys_download_anim0.png
index 9c77ecbe4622..25324f645f84 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim0.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim1.png b/core/res/res/drawable-mdpi/stat_sys_download_anim1.png
index 4bf5e6c8c831..6d1fb4a0a8cf 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim1.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim2.png b/core/res/res/drawable-mdpi/stat_sys_download_anim2.png
index 22118106c7a5..4c3e96399fa1 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim2.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim3.png b/core/res/res/drawable-mdpi/stat_sys_download_anim3.png
index 7db30960d336..2aae62541a8d 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim3.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim4.png b/core/res/res/drawable-mdpi/stat_sys_download_anim4.png
index 894dd6323dc0..55dbe1201151 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim4.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_download_anim5.png b/core/res/res/drawable-mdpi/stat_sys_download_anim5.png
index 889c01e36f3b..53fda4441ddf 100644
--- a/core/res/res/drawable-mdpi/stat_sys_download_anim5.png
+++ b/core/res/res/drawable-mdpi/stat_sys_download_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_gps_on.png b/core/res/res/drawable-mdpi/stat_sys_gps_on.png
index e0b9d6e5c7b4..2c98972e5ac2 100644
--- a/core/res/res/drawable-mdpi/stat_sys_gps_on.png
+++ b/core/res/res/drawable-mdpi/stat_sys_gps_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_phone_call.png b/core/res/res/drawable-mdpi/stat_sys_phone_call.png
index c44d0620f7f4..71da6a2d581f 100644
--- a/core/res/res/drawable-mdpi/stat_sys_phone_call.png
+++ b/core/res/res/drawable-mdpi/stat_sys_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-mdpi/stat_sys_phone_call_forward.png
index ed4b6ec1289f..b0dbe6dce16f 100755..100644
--- a/core/res/res/drawable-mdpi/stat_sys_phone_call_forward.png
+++ b/core/res/res/drawable-mdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-mdpi/stat_sys_phone_call_on_hold.png
index 921644765daf..22e9082c49b1 100644
--- a/core/res/res/drawable-mdpi/stat_sys_phone_call_on_hold.png
+++ b/core/res/res/drawable-mdpi/stat_sys_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_secure.png b/core/res/res/drawable-mdpi/stat_sys_secure.png
index 7167c3a83a8f..da3e318f914f 100644
--- a/core/res/res/drawable-mdpi/stat_sys_secure.png
+++ b/core/res/res/drawable-mdpi/stat_sys_secure.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
index 25fef560648a..e8c6374d2b41 100644
--- a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_throttled.png b/core/res/res/drawable-mdpi/stat_sys_throttled.png
index 2cbe7f40b2f6..ef6a7af9d344 100644
--- a/core/res/res/drawable-mdpi/stat_sys_throttled.png
+++ b/core/res/res/drawable-mdpi/stat_sys_throttled.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim0.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim0.png
index 6a05585eeaeb..6402aa5ae1c6 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim0.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim1.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim1.png
index af492c80aecf..b9c364c92b15 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim1.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim2.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim2.png
index 4ba150c8f13b..217ea4eb6579 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim2.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim3.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim3.png
index cbcf28098d16..e22ec6ded41f 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim3.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim4.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim4.png
index cb8628cad5d6..a86d5cdfa1c4 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim4.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_upload_anim5.png b/core/res/res/drawable-mdpi/stat_sys_upload_anim5.png
index e7a5376497de..3387dbb27be4 100644
--- a/core/res/res/drawable-mdpi/stat_sys_upload_anim5.png
+++ b/core/res/res/drawable-mdpi/stat_sys_upload_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-mdpi/stat_sys_vp_phone_call.png
index aa03b4f55c20..32b23ed84621 100644
--- a/core/res/res/drawable-mdpi/stat_sys_vp_phone_call.png
+++ b/core/res/res/drawable-mdpi/stat_sys_vp_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-mdpi/stat_sys_vp_phone_call_on_hold.png
index 5f454409b424..a4c1fc88d0dc 100644
--- a/core/res/res/drawable-mdpi/stat_sys_vp_phone_call_on_hold.png
+++ b/core/res/res/drawable-mdpi/stat_sys_vp_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_warning.png b/core/res/res/drawable-mdpi/stat_sys_warning.png
index 2a764fa4019f..168f8f6ff88e 100644
--- a/core/res/res/drawable-mdpi/stat_sys_warning.png
+++ b/core/res/res/drawable-mdpi/stat_sys_warning.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/status_bar_item_app_background_normal.9.png b/core/res/res/drawable-mdpi/status_bar_item_app_background_normal.9.png
index c0796153ec06..873c556f628d 100644
--- a/core/res/res/drawable-mdpi/status_bar_item_app_background_normal.9.png
+++ b/core/res/res/drawable-mdpi/status_bar_item_app_background_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.png
index 35ff94879702..b8dd5450a2bc 100644
--- a/core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.png
index ceb1869c4b88..11b84265fb5f 100644
--- a/core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.png
index 4753a930fc16..c9481fa4efb1 100644
--- a/core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.png b/core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.png
index 446950144c4b..eb08c872ef74 100644
--- a/core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_bg_holo_dark.9.png
index ac0032551173..429d73de7ab0 100644
--- a/core/res/res/drawable-mdpi/switch_bg_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_bg_holo_light.9.png b/core/res/res/drawable-mdpi/switch_bg_holo_light.9.png
index f48f9602e793..693ee3311903 100644
--- a/core/res/res/drawable-mdpi/switch_bg_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.png
index c70261f06e9c..bf4b1617e32e 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.png b/core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.png
index c17d9bf4d694..45359935bc32 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.png
index 744128d51799..c56f49dc78df 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.png
index e89439d399c6..5272f08f4e96 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.png
index 51b6b2bcdff0..9b7380461fde 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_holo_light.9.png b/core/res/res/drawable-mdpi/switch_thumb_holo_light.9.png
index f418398b56b6..bcd503f8e80c 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
index 699ade97315c..9c948a5c98b2 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
index 7f674c6bde93..b035f427c5a8 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/sym_keyboard_shift.png b/core/res/res/drawable-mdpi/sym_keyboard_shift.png
index 91d6e32f9d0e..572c1c1cc0e3 100644
--- a/core/res/res/drawable-mdpi/sym_keyboard_shift.png
+++ b/core/res/res/drawable-mdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/sym_keyboard_shift_locked.png b/core/res/res/drawable-mdpi/sym_keyboard_shift_locked.png
index 2bd053656a5a..175ed6ddda36 100644
--- a/core/res/res/drawable-mdpi/sym_keyboard_shift_locked.png
+++ b/core/res/res/drawable-mdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_focused_holo.9.png b/core/res/res/drawable-mdpi/tab_focused_holo.9.png
deleted file mode 100644
index 187d8c56e11e..000000000000
--- a/core/res/res/drawable-mdpi/tab_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png
index d14c02b8e069..6710945d0982 100644
--- a/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png
index d14c02b8e069..6710945d0982 100644
--- a/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_v4.9.png
index 52cc34e9ac21..3c1c4ebca4b4 100644
--- a/core/res/res/drawable-mdpi/tab_selected_v4.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_unselected_v4.9.png b/core/res/res/drawable-mdpi/tab_unselected_v4.9.png
index 7d0859a5f91d..bb383371a10e 100644
--- a/core/res/res/drawable-mdpi/tab_unselected_v4.9.png
+++ b/core/res/res/drawable-mdpi/tab_unselected_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
index d8ae54c5ca64..23684fabc5c0 100644
--- a/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
+++ b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.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 959887f2df7c..d2cb710a4d3b 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 42d4e1a4e667..db70e5a21f21 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 61f9c12001c6..be3d6eaa70f9 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_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/textfield_focused_holo_dark.9.png
index 0ce5d13f42f8..efbaef8b47ed 100644
--- a/core/res/res/drawable-mdpi/textfield_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/textfield_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_focused_holo_light.9.png b/core/res/res/drawable-mdpi/textfield_focused_holo_light.9.png
index 945516e7932a..efbaef8b47ed 100644
--- a/core/res/res/drawable-mdpi/textfield_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/textfield_focused_holo_light.9.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 faaa6c2b9af6..99840b1c848c 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 ec444055ffbc..6bd950970164 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 1cc76a30992e..22493de901e8 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 25937605facc..02b491c2a318 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 8688d6a2e809..16c4c1a0b478 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 3f4c28226105..e474bc596cfe 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 8692528d3487..c56ab9cd28b4 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 849af731cd80..a2e594441070 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-mdpi/vpn_connected.png b/core/res/res/drawable-mdpi/vpn_connected.png
index 65fc6db787bf..0d1a0262154d 100644
--- a/core/res/res/drawable-mdpi/vpn_connected.png
+++ b/core/res/res/drawable-mdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/vpn_disconnected.png b/core/res/res/drawable-mdpi/vpn_disconnected.png
index 2440c6909ef5..d16d7fbd1db0 100644
--- a/core/res/res/drawable-mdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-mdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_green_up.png
new file mode 100644
index 000000000000..cc46f19b19b2
--- /dev/null
+++ b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png
new file mode 100644
index 000000000000..cc46f19b19b2
--- /dev/null
+++ b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo.png b/core/res/res/drawable-nodpi/platlogo.png
index c235005f2326..e619ed59bf1e 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/ab_bottom_solid_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_bottom_solid_dark_holo.9.png
index 462e0e0ca8c9..506cd68ffc55 100644
--- a/core/res/res/drawable-xhdpi/ab_bottom_solid_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_bottom_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_bottom_solid_inverse_holo.9.png b/core/res/res/drawable-xhdpi/ab_bottom_solid_inverse_holo.9.png
index 939ff4eba165..c185112e4c61 100644
--- a/core/res/res/drawable-xhdpi/ab_bottom_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_bottom_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_bottom_solid_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_bottom_solid_light_holo.9.png
index 8f890406f6d6..8ed7f9b718c2 100644
--- a/core/res/res/drawable-xhdpi/ab_bottom_solid_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_bottom_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_bottom_transparent_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_bottom_transparent_dark_holo.9.png
index ccd53a343944..c4694cdb5403 100644
--- a/core/res/res/drawable-xhdpi/ab_bottom_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_bottom_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_bottom_transparent_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_bottom_transparent_light_holo.9.png
index 0b1ae2dc7fa1..57f5cfa2b67e 100644
--- a/core/res/res/drawable-xhdpi/ab_bottom_transparent_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_bottom_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_solid_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_solid_dark_holo.9.png
index c8e5efc404a4..d16e50cc351d 100644
--- a/core/res/res/drawable-xhdpi/ab_solid_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_solid_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_solid_light_holo.9.png
index 6cb8a0eb03cd..45cc8074e9c7 100644
--- a/core/res/res/drawable-xhdpi/ab_solid_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_solid_shadow_holo.9.png b/core/res/res/drawable-xhdpi/ab_solid_shadow_holo.9.png
index 49b2669c6815..a9e0d4d5bc66 100644
--- a/core/res/res/drawable-xhdpi/ab_solid_shadow_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_solid_shadow_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_stacked_solid_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_stacked_solid_dark_holo.9.png
index 201e21d5f84a..5ea235dea8e1 100644
--- a/core/res/res/drawable-xhdpi/ab_stacked_solid_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_stacked_solid_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png b/core/res/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
index ac96200639c6..0220c8dbab61 100644
--- a/core/res/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_stacked_solid_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_stacked_solid_light_holo.9.png
index d605d964bede..be13077ac2df 100644
--- a/core/res/res/drawable-xhdpi/ab_stacked_solid_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_stacked_solid_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_stacked_transparent_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_stacked_transparent_dark_holo.9.png
index 8ece2a9b0e02..ab02e7a371c3 100644
--- a/core/res/res/drawable-xhdpi/ab_stacked_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_stacked_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_stacked_transparent_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_stacked_transparent_light_holo.9.png
index ae0b6b77719c..0b5a24e06e67 100644
--- a/core/res/res/drawable-xhdpi/ab_stacked_transparent_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_stacked_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_transparent_dark_holo.9.png b/core/res/res/drawable-xhdpi/ab_transparent_dark_holo.9.png
index d3a38096c1f2..6d21429b60fb 100644
--- a/core/res/res/drawable-xhdpi/ab_transparent_dark_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_transparent_dark_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_transparent_light_holo.9.png b/core/res/res/drawable-xhdpi/ab_transparent_light_holo.9.png
index 7e6e24d2461b..c34c46f94c74 100644
--- a/core/res/res/drawable-xhdpi/ab_transparent_light_holo.9.png
+++ b/core/res/res/drawable-xhdpi/ab_transparent_light_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/activity_title_bar.9.png b/core/res/res/drawable-xhdpi/activity_title_bar.9.png
new file mode 100644
index 000000000000..949f31e1f950
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/activity_title_bar.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/arrow_down_float.png b/core/res/res/drawable-xhdpi/arrow_down_float.png
new file mode 100644
index 000000000000..b165ee3aa089
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/arrow_down_float.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/arrow_up_float.png b/core/res/res/drawable-xhdpi/arrow_up_float.png
new file mode 100644
index 000000000000..793ec42d863f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/arrow_up_float.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/battery_charge_background.png b/core/res/res/drawable-xhdpi/battery_charge_background.png
new file mode 100644
index 000000000000..84b168c74b37
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/battery_charge_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/bottom_bar.png b/core/res/res/drawable-xhdpi/bottom_bar.png
new file mode 100644
index 000000000000..67b1e47123c6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/bottom_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_buttonless_off.png b/core/res/res/drawable-xhdpi/btn_check_buttonless_off.png
new file mode 100644
index 000000000000..a3c56550792c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_check_buttonless_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_buttonless_on.png b/core/res/res/drawable-xhdpi/btn_check_buttonless_on.png
new file mode 100644
index 000000000000..0629581d0cae
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_check_buttonless_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_label_background.9.png b/core/res/res/drawable-xhdpi/btn_check_label_background.9.png
new file mode 100644
index 000000000000..9257ca963011
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_check_label_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_circle_disable.png b/core/res/res/drawable-xhdpi/btn_circle_disable.png
new file mode 100644
index 000000000000..420e01aeeab9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_circle_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_circle_disable_focused.png b/core/res/res/drawable-xhdpi/btn_circle_disable_focused.png
new file mode 100644
index 000000000000..6876916b33ec
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_circle_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_circle_normal.png b/core/res/res/drawable-xhdpi/btn_circle_normal.png
new file mode 100644
index 000000000000..de7e71efd62c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_circle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_circle_pressed.png b/core/res/res/drawable-xhdpi/btn_circle_pressed.png
new file mode 100644
index 000000000000..17776e4b58cf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_circle_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_circle_selected.png b/core/res/res/drawable-xhdpi/btn_circle_selected.png
new file mode 100644
index 000000000000..98aeff51e93e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_circle_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_close_normal.png b/core/res/res/drawable-xhdpi/btn_close_normal.png
new file mode 100644
index 000000000000..2d0b0ea135fe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_close_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_close_pressed.png b/core/res/res/drawable-xhdpi/btn_close_pressed.png
new file mode 100644
index 000000000000..5d9b5eeac5a1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_close_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_close_selected.png b/core/res/res/drawable-xhdpi/btn_close_selected.png
new file mode 100644
index 000000000000..1bf174065252
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_close_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_default.png b/core/res/res/drawable-xhdpi/btn_code_lock_default.png
new file mode 100644
index 000000000000..a644014d58b6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_touched.png b/core/res/res/drawable-xhdpi/btn_code_lock_touched.png
new file mode 100644
index 000000000000..67faad25eb90
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal.9.png b/core/res/res/drawable-xhdpi/btn_default_normal.9.png
index 9f18a871fea4..4ca0b374b4f0 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_disable.9.png
index 652aa3e446c7..f7af2a477302 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_disable.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.png
index 92a7664c23ce..ab7084ec6b0e 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed.9.png
index 3f4269309003..02f5bb82704a 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_selected.9.png b/core/res/res/drawable-xhdpi/btn_default_selected.9.png
index ecdc72b482ea..0375a18e011e 100644
--- a/core/res/res/drawable-xhdpi/btn_default_selected.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_small_normal.9.png b/core/res/res/drawable-xhdpi/btn_default_small_normal.9.png
index f82303300239..d3680731e02c 100644
--- a/core/res/res/drawable-xhdpi/btn_default_small_normal.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_small_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.png
index f537a6d3f538..6d1eb481efbf 100644
--- a/core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png
index 1b116898d758..f4783d4e06c3 100644
--- a/core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_small_selected.9.png b/core/res/res/drawable-xhdpi/btn_default_small_selected.9.png
index 74a156ffc655..0df43d7d7a09 100644
--- a/core/res/res/drawable-xhdpi/btn_default_small_selected.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_small_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.png b/core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.png
index 44860dc0603a..44123463f3f3 100644
--- a/core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dialog_disable.png b/core/res/res/drawable-xhdpi/btn_dialog_disable.png
new file mode 100644
index 000000000000..571e40afa012
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dialog_normal.png b/core/res/res/drawable-xhdpi/btn_dialog_normal.png
new file mode 100644
index 000000000000..2d0b0ea135fe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dialog_pressed.png b/core/res/res/drawable-xhdpi/btn_dialog_pressed.png
new file mode 100644
index 000000000000..56195d2ea186
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dialog_selected.png b/core/res/res/drawable-xhdpi/btn_dialog_selected.png
new file mode 100644
index 000000000000..c33da5660108
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dropdown_disabled.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_disabled.9.png
new file mode 100644
index 000000000000..e45c7311bf27
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.png
new file mode 100644
index 000000000000..0e0e0d15193c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_normal.9.png
new file mode 100644
index 000000000000..a47ad5a6df5d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.png
new file mode 100644
index 000000000000..a3851a85e4f1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_selected.9.png
new file mode 100644
index 000000000000..80e4d0410cc1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_erase_default.9.png b/core/res/res/drawable-xhdpi/btn_erase_default.9.png
new file mode 100644
index 000000000000..f189e9c8482e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_erase_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_erase_pressed.9.png b/core/res/res/drawable-xhdpi/btn_erase_pressed.9.png
new file mode 100644
index 000000000000..99cd6fdd2938
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_erase_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_erase_selected.9.png b/core/res/res/drawable-xhdpi/btn_erase_selected.9.png
new file mode 100644
index 000000000000..b6de266476d2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_erase_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_global_search_normal.9.png b/core/res/res/drawable-xhdpi/btn_global_search_normal.9.png
new file mode 100644
index 000000000000..cc1194265bcc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_global_search_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_group_disabled_holo_dark.9.png
new file mode 100644
index 000000000000..6bf2fb4a7cf0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_group_disabled_holo_light.9.png
new file mode 100644
index 000000000000..979eccde1ae0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_group_focused_holo_dark.9.png
new file mode 100644
index 000000000000..725248215cd8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_group_focused_holo_light.9.png
new file mode 100644
index 000000000000..725248215cd8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_group_normal_holo_dark.9.png
new file mode 100644
index 000000000000..306556440b92
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_group_normal_holo_light.9.png
new file mode 100644
index 000000000000..a444e63b23d1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_group_pressed_holo_dark.9.png
new file mode 100644
index 000000000000..60d6675a8e98
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_group_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_group_pressed_holo_light.9.png
new file mode 100644
index 000000000000..142a1c99cb7e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_group_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png
new file mode 100644
index 000000000000..ef9262fca75e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_off.9.png
new file mode 100644
index 000000000000..6715afddd4f9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_on.9.png
new file mode 100644
index 000000000000..8ffddcf25dcc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png
new file mode 100644
index 000000000000..5a52bbc07431
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_off.9.png
new file mode 100644
index 000000000000..77c6d7822070
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_on.9.png
new file mode 100644
index 000000000000..ed73f09ab9f7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.png
new file mode 100644
index 000000000000..08021f99672b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png
new file mode 100644
index 000000000000..41c8ccb2954b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png
new file mode 100644
index 000000000000..546ccbc43b48
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png
new file mode 100644
index 000000000000..802b22eb846b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png
new file mode 100644
index 000000000000..d317f94bd798
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png
new file mode 100644
index 000000000000..80b50a11199f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal.9.png
new file mode 100644
index 000000000000..200d934ebe75
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_off.9.png
new file mode 100644
index 000000000000..76202a4dd684
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_on.9.png
new file mode 100644
index 000000000000..e9b2d7e1bd89
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed.9.png
new file mode 100644
index 000000000000..f3626b683952
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_off.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_off.9.png
new file mode 100644
index 000000000000..8db4f8e20739
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_on.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_on.9.png
new file mode 100644
index 000000000000..b835a07248ed
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_selected.9.png b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_selected.9.png
new file mode 100644
index 000000000000..8dd307030ab0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_keyboard_key_trans_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_media_player.9.png b/core/res/res/drawable-xhdpi/btn_media_player.9.png
new file mode 100644
index 000000000000..06e523d96065
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_media_player.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_media_player_disabled.9.png b/core/res/res/drawable-xhdpi/btn_media_player_disabled.9.png
new file mode 100644
index 000000000000..9b3350fdb072
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_media_player_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_media_player_disabled_selected.9.png b/core/res/res/drawable-xhdpi/btn_media_player_disabled_selected.9.png
new file mode 100644
index 000000000000..1872a0bb761d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_media_player_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_media_player_pressed.9.png b/core/res/res/drawable-xhdpi/btn_media_player_pressed.9.png
new file mode 100644
index 000000000000..e8810b09e1ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_media_player_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_media_player_selected.9.png b/core/res/res/drawable-xhdpi/btn_media_player_selected.9.png
new file mode 100644
index 000000000000..b9287d645202
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_media_player_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_minus_default.png b/core/res/res/drawable-xhdpi/btn_minus_default.png
new file mode 100644
index 000000000000..7e952f11009a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_minus_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_minus_disable.png b/core/res/res/drawable-xhdpi/btn_minus_disable.png
new file mode 100644
index 000000000000..63901e3466f7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_minus_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_minus_disable_focused.png b/core/res/res/drawable-xhdpi/btn_minus_disable_focused.png
new file mode 100644
index 000000000000..9073d4986410
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_minus_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_minus_pressed.png b/core/res/res/drawable-xhdpi/btn_minus_pressed.png
new file mode 100644
index 000000000000..49dfc3fb093b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_minus_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_minus_selected.png b/core/res/res/drawable-xhdpi/btn_minus_selected.png
new file mode 100644
index 000000000000..d1d2101c2992
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_minus_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_plus_default.png b/core/res/res/drawable-xhdpi/btn_plus_default.png
new file mode 100644
index 000000000000..d47113ace223
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_plus_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_plus_disable.png b/core/res/res/drawable-xhdpi/btn_plus_disable.png
new file mode 100644
index 000000000000..6432c81c48d2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_plus_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_plus_disable_focused.png b/core/res/res/drawable-xhdpi/btn_plus_disable_focused.png
new file mode 100644
index 000000000000..666bf9d9936c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_plus_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_plus_pressed.png b/core/res/res/drawable-xhdpi/btn_plus_pressed.png
new file mode 100644
index 000000000000..2fdb1d249cfe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_plus_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_plus_selected.png b/core/res/res/drawable-xhdpi/btn_plus_selected.png
new file mode 100644
index 000000000000..0f9157db0e73
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_plus_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_label_background.9.png b/core/res/res/drawable-xhdpi/btn_radio_label_background.9.png
new file mode 100644
index 000000000000..e5dee60cc9fd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_label_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off.png b/core/res/res/drawable-xhdpi/btn_radio_off.png
new file mode 100644
index 000000000000..be4bafaa0e94
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_dark.png
new file mode 100644
index 000000000000..0aa6b93ca113
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_light.png
new file mode 100644
index 000000000000..e7a7020ff662
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_dark.png
new file mode 100644
index 000000000000..e3fac6969fd8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_light.png
new file mode 100644
index 000000000000..c2c8b5e44444
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_dark.png
new file mode 100644
index 000000000000..c28914c2476a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_light.png
new file mode 100644
index 000000000000..9ddffd186b1a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_holo.png b/core/res/res/drawable-xhdpi/btn_radio_off_holo.png
new file mode 100644
index 000000000000..1167e1f87ed6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_holo_dark.png
new file mode 100644
index 000000000000..e6c247467b15
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_holo_light.png
new file mode 100644
index 000000000000..c642355fdb0e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed.png
new file mode 100644
index 000000000000..19e444359e3a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png
new file mode 100644
index 000000000000..786ce599888f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png
new file mode 100644
index 000000000000..f56d716fbb9e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_selected.png b/core/res/res/drawable-xhdpi/btn_radio_off_selected.png
new file mode 100644
index 000000000000..599b48b2963a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on.png b/core/res/res/drawable-xhdpi/btn_radio_on.png
new file mode 100644
index 000000000000..d041657212c1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_dark.png
new file mode 100644
index 000000000000..99f3d53a6663
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_light.png
new file mode 100644
index 000000000000..2d98e17ebb3e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_dark.png
new file mode 100644
index 000000000000..71984bc5547a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_light.png
new file mode 100644
index 000000000000..e77b6e35c62f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_dark.png
new file mode 100644
index 000000000000..5d1edc73c63b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_light.png
new file mode 100644
index 000000000000..db9fc3217fa6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_holo.png b/core/res/res/drawable-xhdpi/btn_radio_on_holo.png
new file mode 100644
index 000000000000..e39e0972cad3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_holo_dark.png
new file mode 100644
index 000000000000..4fc05dd9a597
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_holo_light.png
new file mode 100644
index 000000000000..bfcef363d9f5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed.png
new file mode 100644
index 000000000000..88640d03f6df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png
new file mode 100644
index 000000000000..ec7fa73e6256
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png
new file mode 100644
index 000000000000..6941ce032534
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_selected.png b/core/res/res/drawable-xhdpi/btn_radio_on_selected.png
new file mode 100644
index 000000000000..c90b24d36b4f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png
new file mode 100644
index 000000000000..d17506fc18f8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png
new file mode 100644
index 000000000000..93a01a5e83ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png
new file mode 100644
index 000000000000..dea640a467e8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png
new file mode 100644
index 000000000000..cf93bfb83e1b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png
new file mode 100644
index 000000000000..0696e04db6cd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png
new file mode 100644
index 000000000000..5f3bec249987
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_default.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_default.9.png
new file mode 100644
index 000000000000..07cb53c08c8a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.png
new file mode 100644
index 000000000000..d3ccef89098d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.png
new file mode 100644
index 000000000000..c553c58e6501
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_voice_default.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_default.9.png
new file mode 100644
index 000000000000..f478c4694df8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_voice_pressed.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_pressed.9.png
new file mode 100644
index 000000000000..ea5e50999f14
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_search_dialog_voice_selected.9.png b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_selected.9.png
new file mode 100644
index 000000000000..a46f0edebc91
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_search_dialog_voice_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_square_overlay_disabled.png b/core/res/res/drawable-xhdpi/btn_square_overlay_disabled.png
new file mode 100644
index 000000000000..3cad47031c31
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_square_overlay_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_square_overlay_disabled_focused.png b/core/res/res/drawable-xhdpi/btn_square_overlay_disabled_focused.png
new file mode 100644
index 000000000000..fff0d50d3437
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_square_overlay_disabled_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_square_overlay_normal.png b/core/res/res/drawable-xhdpi/btn_square_overlay_normal.png
new file mode 100644
index 000000000000..d2bd1519ad33
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_square_overlay_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_square_overlay_pressed.png b/core/res/res/drawable-xhdpi/btn_square_overlay_pressed.png
new file mode 100644
index 000000000000..b1bf326a8669
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_square_overlay_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_square_overlay_selected.png b/core/res/res/drawable-xhdpi/btn_square_overlay_selected.png
new file mode 100644
index 000000000000..c48a996d6919
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_square_overlay_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off.png b/core/res/res/drawable-xhdpi/btn_star_big_off.png
new file mode 100644
index 000000000000..4ed5142bbcbb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png b/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
new file mode 100644
index 000000000000..cc52dec15d97
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png b/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png
new file mode 100644
index 000000000000..fea77171eae5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png b/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
new file mode 100644
index 000000000000..503a5b260425
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png b/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
new file mode 100644
index 000000000000..8470723c0725
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on.png b/core/res/res/drawable-xhdpi/btn_star_big_on.png
new file mode 100644
index 000000000000..a094406f091a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png b/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
new file mode 100644
index 000000000000..bbf7d170b60e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png b/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png
new file mode 100644
index 000000000000..a46ea6942ac5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png b/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
new file mode 100644
index 000000000000..7e45f2a733d9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png b/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
new file mode 100644
index 000000000000..0607b78abb0b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_label_background.9.png b/core/res/res/drawable-xhdpi/btn_star_label_background.9.png
new file mode 100644
index 000000000000..a8b056817345
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_label_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_down_disabled.9.png b/core/res/res/drawable-xhdpi/btn_zoom_down_disabled.9.png
new file mode 100644
index 000000000000..7e4297b64111
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_down_disabled_focused.9.png b/core/res/res/drawable-xhdpi/btn_zoom_down_disabled_focused.9.png
new file mode 100644
index 000000000000..f23f23cca14b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_down_normal.9.png b/core/res/res/drawable-xhdpi/btn_zoom_down_normal.9.png
new file mode 100644
index 000000000000..59ae103c4b09
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_down_pressed.9.png b/core/res/res/drawable-xhdpi/btn_zoom_down_pressed.9.png
new file mode 100644
index 000000000000..23c19c1257b3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_down_selected.9.png b/core/res/res/drawable-xhdpi/btn_zoom_down_selected.9.png
new file mode 100644
index 000000000000..9066821c9624
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_page_normal.png b/core/res/res/drawable-xhdpi/btn_zoom_page_normal.png
new file mode 100644
index 000000000000..9ae3f5000cea
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_page_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_page_press.png b/core/res/res/drawable-xhdpi/btn_zoom_page_press.png
new file mode 100644
index 000000000000..3549bdf7cf4b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_page_press.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_up_disabled.9.png b/core/res/res/drawable-xhdpi/btn_zoom_up_disabled.9.png
new file mode 100644
index 000000000000..6bc9e2eabb98
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_up_disabled_focused.9.png b/core/res/res/drawable-xhdpi/btn_zoom_up_disabled_focused.9.png
new file mode 100644
index 000000000000..8dc0568bb86f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_up_normal.9.png b/core/res/res/drawable-xhdpi/btn_zoom_up_normal.9.png
new file mode 100644
index 000000000000..7776d2803064
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_up_pressed.9.png b/core/res/res/drawable-xhdpi/btn_zoom_up_pressed.9.png
new file mode 100644
index 000000000000..2a5b1f4ad2c0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_zoom_up_selected.9.png b/core/res/res/drawable-xhdpi/btn_zoom_up_selected.9.png
new file mode 100644
index 000000000000..f88c377974b4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_zoom_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/button_onoff_indicator_off.png b/core/res/res/drawable-xhdpi/button_onoff_indicator_off.png
new file mode 100644
index 000000000000..f70fd689ad7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/button_onoff_indicator_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/button_onoff_indicator_on.png b/core/res/res/drawable-xhdpi/button_onoff_indicator_on.png
new file mode 100644
index 000000000000..9163be4a03db
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/button_onoff_indicator_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/call_contact.png b/core/res/res/drawable-xhdpi/call_contact.png
new file mode 100644
index 000000000000..343e2dbcea6d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/call_contact.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/checkbox_off_background.png b/core/res/res/drawable-xhdpi/checkbox_off_background.png
new file mode 100644
index 000000000000..ade4c0aa9cde
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/checkbox_off_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/checkbox_on_background.png b/core/res/res/drawable-xhdpi/checkbox_on_background.png
new file mode 100644
index 000000000000..5f6803aae609
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/checkbox_on_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/clock_dial.png b/core/res/res/drawable-xhdpi/clock_dial.png
new file mode 100644
index 000000000000..6cb60a296ed8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/clock_dial.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/clock_hand_hour.png b/core/res/res/drawable-xhdpi/clock_hand_hour.png
new file mode 100644
index 000000000000..bc0c5bd4d59f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/clock_hand_hour.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/clock_hand_minute.png b/core/res/res/drawable-xhdpi/clock_hand_minute.png
new file mode 100644
index 000000000000..01d611fbbdcd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/clock_hand_minute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/code_lock_bottom.9.png b/core/res/res/drawable-xhdpi/code_lock_bottom.9.png
new file mode 100644
index 000000000000..1dbab24fe4f1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/code_lock_bottom.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/code_lock_left.9.png b/core/res/res/drawable-xhdpi/code_lock_left.9.png
new file mode 100644
index 000000000000..ae655215c16f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/code_lock_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/code_lock_top.9.png b/core/res/res/drawable-xhdpi/code_lock_top.9.png
new file mode 100644
index 000000000000..6f5cf6261797
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/code_lock_top.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
new file mode 100644
index 000000000000..9edf16e134ea
--- /dev/null
+++ 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
new file mode 100644
index 000000000000..0b5804221a87
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/combobox_nohighlight.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/compass_arrow.png b/core/res/res/drawable-xhdpi/compass_arrow.png
new file mode 100644
index 000000000000..1d0f36080496
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/compass_arrow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/compass_base.png b/core/res/res/drawable-xhdpi/compass_base.png
new file mode 100644
index 000000000000..a66eb4ae52af
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/compass_base.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/contact_header_bg.9.png b/core/res/res/drawable-xhdpi/contact_header_bg.9.png
new file mode 100644
index 000000000000..aee15b83ffeb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/contact_header_bg.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/create_contact.png b/core/res/res/drawable-xhdpi/create_contact.png
new file mode 100644
index 000000000000..c6d562255f02
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/create_contact.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dark_header.9.png b/core/res/res/drawable-xhdpi/dark_header.9.png
new file mode 100644
index 000000000000..5a0adc8bbb53
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dark_header.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/day_picker_week_view_dayline_holo.9.png b/core/res/res/drawable-xhdpi/day_picker_week_view_dayline_holo.9.png
new file mode 100644
index 000000000000..701a1b24d042
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/day_picker_week_view_dayline_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_dark.9.png b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_dark.9.png
new file mode 100644
index 000000000000..e96684634e4a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_light.9.png
new file mode 100644
index 000000000000..093802b0b599
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_divider_horizontal_light.9.png b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_light.9.png
new file mode 100644
index 000000000000..02aa017fcd7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_divider_horizontal_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_dark.png b/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_dark.png
new file mode 100644
index 000000000000..aa473abc640f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_light.png b/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_light.png
new file mode 100644
index 000000000000..ab21bbe8cb4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_dark.png b/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_dark.png
new file mode 100644
index 000000000000..338e1b754f1d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_light.png b/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_light.png
new file mode 100644
index 000000000000..e11f2e321da2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_dark.png
new file mode 100644
index 000000000000..0401bcd49788
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_light.png b/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_light.png
new file mode 100644
index 000000000000..70403924e3e0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dialog_ic_close_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_bright.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_bright.9.png
new file mode 100644
index 000000000000..41b776bb48f4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_bright_opaque.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_bright_opaque.9.png
new file mode 100644
index 000000000000..eb75a22063ba
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_bright_opaque.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_dark.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_dark.9.png
new file mode 100644
index 000000000000..55a5e5321610
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_dark_opaque.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_dark_opaque.9.png
new file mode 100644
index 000000000000..60e2cb2d849c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_dark_opaque.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_dim_dark.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_dim_dark.9.png
new file mode 100644
index 000000000000..cf34613102a7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_dim_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_holo_dark.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_holo_dark.9.png
new file mode 100644
index 000000000000..48a88b8950f6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_holo_light.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_holo_light.9.png
new file mode 100644
index 000000000000..712aef2337c8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_horizontal_textfield.9.png b/core/res/res/drawable-xhdpi/divider_horizontal_textfield.9.png
new file mode 100644
index 000000000000..c9fa0fdedcf7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_horizontal_textfield.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_bright.9.png b/core/res/res/drawable-xhdpi/divider_vertical_bright.9.png
new file mode 100644
index 000000000000..41b776bb48f4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_bright_opaque.9.png b/core/res/res/drawable-xhdpi/divider_vertical_bright_opaque.9.png
new file mode 100644
index 000000000000..eb75a22063ba
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_bright_opaque.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_dark.9.png b/core/res/res/drawable-xhdpi/divider_vertical_dark.9.png
new file mode 100644
index 000000000000..55a5e5321610
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_dark_opaque.9.png b/core/res/res/drawable-xhdpi/divider_vertical_dark_opaque.9.png
new file mode 100644
index 000000000000..60e2cb2d849c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_dark_opaque.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.png b/core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.png
new file mode 100644
index 000000000000..93507893f75b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.png b/core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.png
new file mode 100644
index 000000000000..e0f6e0adc35e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_dark.9.png
new file mode 100644
index 000000000000..b5d226a13e6a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_light.9.png
new file mode 100644
index 000000000000..af855619397b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/dropdown_disabled_holo_dark.9.png
new file mode 100644
index 000000000000..bf01b0af9b38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/dropdown_disabled_holo_light.9.png
new file mode 100644
index 000000000000..f4effa1903b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/dropdown_focused_holo_dark.9.png
new file mode 100644
index 000000000000..ce31d0fb3b34
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/dropdown_focused_holo_light.9.png
new file mode 100644
index 000000000000..45961712bffc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png
new file mode 100644
index 000000000000..adb6c36cb037
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_light.png
new file mode 100644
index 000000000000..a1075d5c9e47
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_dark.png
new file mode 100644
index 000000000000..782325ffb625
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_light.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_light.png
new file mode 100644
index 000000000000..195ecbb7057f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_focused_holo_light.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_focused_holo_light.png
new file mode 100644
index 000000000000..988e3f4353d3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png
new file mode 100644
index 000000000000..36d8cf47ee09
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_light.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_light.png
new file mode 100644
index 000000000000..a931132bfb20
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_ic_arrow_pressed_holo_light.png b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_pressed_holo_light.png
new file mode 100644
index 000000000000..833bc1314aee
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_ic_arrow_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/dropdown_normal_holo_dark.9.png
new file mode 100644
index 000000000000..ca18b0dafff1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/dropdown_normal_holo_light.9.png
new file mode 100644
index 000000000000..37ad0e001ff5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/dropdown_pressed_holo_dark.9.png
new file mode 100644
index 000000000000..bdee422dce77
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dropdown_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/dropdown_pressed_holo_light.9.png
new file mode 100644
index 000000000000..12ea0548806a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/dropdown_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/edit_query.png b/core/res/res/drawable-xhdpi/edit_query.png
new file mode 100644
index 000000000000..dea97019bee1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/edit_query.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/edit_query_background_normal.9.png b/core/res/res/drawable-xhdpi/edit_query_background_normal.9.png
new file mode 100644
index 000000000000..7787df365a50
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/edit_query_background_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/edit_query_background_pressed.9.png b/core/res/res/drawable-xhdpi/edit_query_background_pressed.9.png
new file mode 100644
index 000000000000..af81b2f5b0fb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/edit_query_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/edit_query_background_selected.9.png b/core/res/res/drawable-xhdpi/edit_query_background_selected.9.png
new file mode 100644
index 000000000000..b4f0f5981d96
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/edit_query_background_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/editbox_background_focus_yellow.9.png b/core/res/res/drawable-xhdpi/editbox_background_focus_yellow.9.png
new file mode 100644
index 000000000000..c4fdda1f289a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/editbox_background_focus_yellow.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/editbox_background_normal.9.png b/core/res/res/drawable-xhdpi/editbox_background_normal.9.png
new file mode 100644
index 000000000000..e1ee2761f92a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/editbox_background_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/editbox_dropdown_background.9.png b/core/res/res/drawable-xhdpi/editbox_dropdown_background.9.png
new file mode 100644
index 000000000000..ac9de9a36f05
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/editbox_dropdown_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/editbox_dropdown_background_dark.9.png b/core/res/res/drawable-xhdpi/editbox_dropdown_background_dark.9.png
new file mode 100644
index 000000000000..439a856673f1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/editbox_dropdown_background_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_angel.png b/core/res/res/drawable-xhdpi/emo_im_angel.png
new file mode 100644
index 000000000000..b4123ffe86c1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_angel.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_cool.png b/core/res/res/drawable-xhdpi/emo_im_cool.png
new file mode 100644
index 000000000000..0efacf895c87
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_cool.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_crying.png b/core/res/res/drawable-xhdpi/emo_im_crying.png
new file mode 100644
index 000000000000..7de7bf040b50
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_crying.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_embarrassed.png b/core/res/res/drawable-xhdpi/emo_im_embarrassed.png
new file mode 100644
index 000000000000..baa07653146b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_embarrassed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.png b/core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.png
new file mode 100644
index 000000000000..afb22bb4382d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_happy.png b/core/res/res/drawable-xhdpi/emo_im_happy.png
new file mode 100644
index 000000000000..08a242d2b0fc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_happy.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_kissing.png b/core/res/res/drawable-xhdpi/emo_im_kissing.png
new file mode 100644
index 000000000000..c643a3cfbfc2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_kissing.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_laughing.png b/core/res/res/drawable-xhdpi/emo_im_laughing.png
new file mode 100644
index 000000000000..0301f808a245
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_laughing.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.png b/core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.png
new file mode 100644
index 000000000000..594e5e7359f5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_money_mouth.png b/core/res/res/drawable-xhdpi/emo_im_money_mouth.png
new file mode 100644
index 000000000000..df9283a7c123
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_money_mouth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_sad.png b/core/res/res/drawable-xhdpi/emo_im_sad.png
new file mode 100644
index 000000000000..f42f0a91e1a4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_sad.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_surprised.png b/core/res/res/drawable-xhdpi/emo_im_surprised.png
new file mode 100644
index 000000000000..6b057fa2521b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_surprised.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.png b/core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.png
new file mode 100644
index 000000000000..ef128c551377
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_undecided.png b/core/res/res/drawable-xhdpi/emo_im_undecided.png
new file mode 100644
index 000000000000..fcc0f4276f37
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_undecided.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_winking.png b/core/res/res/drawable-xhdpi/emo_im_winking.png
new file mode 100644
index 000000000000..687b62b4a1fb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_winking.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_wtf.png b/core/res/res/drawable-xhdpi/emo_im_wtf.png
new file mode 100644
index 000000000000..cb75a18d662e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_wtf.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/emo_im_yelling.png b/core/res/res/drawable-xhdpi/emo_im_yelling.png
new file mode 100644
index 000000000000..32a7028a705e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/emo_im_yelling.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_ic_maximized.9.png b/core/res/res/drawable-xhdpi/expander_ic_maximized.9.png
new file mode 100644
index 000000000000..6eed88a1fda7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/expander_ic_maximized.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_ic_minimized.9.png b/core/res/res/drawable-xhdpi/expander_ic_minimized.9.png
new file mode 100644
index 000000000000..0683be681584
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/expander_ic_minimized.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png
index 71f8a067cd1e..98404d429c64 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png
index 850bd5eb0f98..6824947e0d85 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png
index 431336a1264f..c727bd44627b 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png
index 431336a1264f..c727bd44627b 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png
index 7882e551190d..f2c6b42031e0 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png
index 7882e551190d..f2c6b42031e0 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/focused_application_background_static.png b/core/res/res/drawable-xhdpi/focused_application_background_static.png
new file mode 100644
index 000000000000..8231e4fc4322
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/focused_application_background_static.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/frame_gallery_thumb.9.png b/core/res/res/drawable-xhdpi/frame_gallery_thumb.9.png
new file mode 100644
index 000000000000..915fbed3340b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/frame_gallery_thumb.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.png b/core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.png
new file mode 100644
index 000000000000..13ea0067944f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.png b/core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.png
new file mode 100644
index 000000000000..f9471444dd4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/gallery_selected_default.9.png b/core/res/res/drawable-xhdpi/gallery_selected_default.9.png
new file mode 100644
index 000000000000..742492ae465a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/gallery_selected_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/gallery_selected_focused.9.png b/core/res/res/drawable-xhdpi/gallery_selected_focused.9.png
new file mode 100644
index 000000000000..4f5700f3324c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/gallery_selected_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/gallery_selected_pressed.9.png b/core/res/res/drawable-xhdpi/gallery_selected_pressed.9.png
new file mode 100644
index 000000000000..00b36b8e41c7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/gallery_selected_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/gallery_unselected_default.9.png b/core/res/res/drawable-xhdpi/gallery_unselected_default.9.png
new file mode 100644
index 000000000000..9bc0cdbefc80
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/gallery_unselected_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/gallery_unselected_pressed.9.png b/core/res/res/drawable-xhdpi/gallery_unselected_pressed.9.png
new file mode 100644
index 000000000000..c10554a681c0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/gallery_unselected_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/grid_selector_background_focus.9.png b/core/res/res/drawable-xhdpi/grid_selector_background_focus.9.png
new file mode 100644
index 000000000000..bafc62a973b2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/grid_selector_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/grid_selector_background_pressed.9.png b/core/res/res/drawable-xhdpi/grid_selector_background_pressed.9.png
new file mode 100644
index 000000000000..40e8a0ec6a40
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/grid_selector_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/highlight_disabled.9.png b/core/res/res/drawable-xhdpi/highlight_disabled.9.png
new file mode 100644
index 000000000000..a65fe8f98aea
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/highlight_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/highlight_pressed.9.png b/core/res/res/drawable-xhdpi/highlight_pressed.9.png
new file mode 100644
index 000000000000..d0e1564b8e4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/highlight_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/highlight_selected.9.png b/core/res/res/drawable-xhdpi/highlight_selected.9.png
new file mode 100644
index 000000000000..d332ee644079
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/highlight_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_aggregated.png b/core/res/res/drawable-xhdpi/ic_aggregated.png
new file mode 100644
index 000000000000..818a1b1c1bcf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_aggregated.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_alarm.png b/core/res/res/drawable-xhdpi/ic_audio_alarm.png
new file mode 100644
index 000000000000..c1f56a1d6509
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_alarm.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-xhdpi/ic_audio_alarm_mute.png
new file mode 100644
index 000000000000..0d7034f2f0ef
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_alarm_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_bt.png b/core/res/res/drawable-xhdpi/ic_audio_bt.png
new file mode 100644
index 000000000000..b8aa083ac178
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_bt.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_bt_mute.png b/core/res/res/drawable-xhdpi/ic_audio_bt_mute.png
new file mode 100644
index 000000000000..93a248178a35
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_bt_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_notification.png b/core/res/res/drawable-xhdpi/ic_audio_notification.png
new file mode 100644
index 000000000000..15182b952805
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_notification.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_notification_mute.png b/core/res/res/drawable-xhdpi/ic_audio_notification_mute.png
new file mode 100644
index 000000000000..c26b839bd577
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_notification_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_phone.png b/core/res/res/drawable-xhdpi/ic_audio_phone.png
new file mode 100644
index 000000000000..2a04619b4faa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_phone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_ring_notif.png b/core/res/res/drawable-xhdpi/ic_audio_ring_notif.png
new file mode 100644
index 000000000000..3fa419734bf3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_ring_notif.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.png b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.png
new file mode 100644
index 000000000000..e8e7fcc4b0ea
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_vol.png b/core/res/res/drawable-xhdpi/ic_audio_vol.png
new file mode 100644
index 000000000000..4e2e20e2252c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_vol.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_vol_mute.png b/core/res/res/drawable-xhdpi/ic_audio_vol_mute.png
new file mode 100644
index 000000000000..64a52150192e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_audio_vol_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_find_next.png b/core/res/res/drawable-xhdpi/ic_btn_find_next.png
new file mode 100644
index 000000000000..a334a5d1f0e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_find_next.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_find_prev.png b/core/res/res/drawable-xhdpi/ic_btn_find_prev.png
new file mode 100644
index 000000000000..d7b31779b9ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_find_prev.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_round_more_disabled.png b/core/res/res/drawable-xhdpi/ic_btn_round_more_disabled.png
new file mode 100644
index 000000000000..99f37c555730
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_round_more_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_round_more_normal.png b/core/res/res/drawable-xhdpi/ic_btn_round_more_normal.png
new file mode 100644
index 000000000000..7a8221fecbec
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_round_more_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_search.png b/core/res/res/drawable-xhdpi/ic_btn_search.png
new file mode 100644
index 000000000000..a267c0a6114e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_search.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_search_go.png b/core/res/res/drawable-xhdpi/ic_btn_search_go.png
new file mode 100644
index 000000000000..896dddd9ec54
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_search_go.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_speak_now.png b/core/res/res/drawable-xhdpi/ic_btn_speak_now.png
new file mode 100644
index 000000000000..f7f49224b7fa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_speak_now.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_disabled.png b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_disabled.png
new file mode 100644
index 000000000000..299a7bf61dcd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_normal.png b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_normal.png
new file mode 100644
index 000000000000..c43c68c836aa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_fit_page_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_disabled.png b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_disabled.png
new file mode 100644
index 000000000000..fa94bffeeca6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_normal.png b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_normal.png
new file mode 100644
index 000000000000..1629d6428a97
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_btn_square_browser_zoom_page_overview_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png b/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png
new file mode 100644
index 000000000000..b2db65c04df3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_cab_done_holo.png b/core/res/res/drawable-xhdpi/ic_cab_done_holo.png
new file mode 100644
index 000000000000..4eeee43c344d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_cab_done_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_clear_disabled.png b/core/res/res/drawable-xhdpi/ic_clear_disabled.png
new file mode 100644
index 000000000000..e35c5f05efda
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_clear_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_clear_search_api_disabled_holo_light.png b/core/res/res/drawable-xhdpi/ic_clear_search_api_disabled_holo_light.png
new file mode 100644
index 000000000000..7fd7aeb2a639
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_clear_search_api_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_clear_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_clear_search_api_holo_light.png
new file mode 100644
index 000000000000..53cfbd311551
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_clear_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_commit.png b/core/res/res/drawable-xhdpi/ic_commit.png
new file mode 100644
index 000000000000..b871f7e3bae5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_commit.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_dark.png b/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_dark.png
new file mode 100644
index 000000000000..d8faf900ae77
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_light.png
new file mode 100644
index 000000000000..e7c7280add8f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_commit_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_contact_picture.png b/core/res/res/drawable-xhdpi/ic_contact_picture.png
new file mode 100644
index 000000000000..4ade625f48cc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_contact_picture_2.png b/core/res/res/drawable-xhdpi/ic_contact_picture_2.png
new file mode 100644
index 000000000000..ecb7b679548c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_contact_picture_2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_contact_picture_3.png b/core/res/res/drawable-xhdpi/ic_contact_picture_3.png
new file mode 100644
index 000000000000..326f2f803ba3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_contact_picture_3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_delete.png b/core/res/res/drawable-xhdpi/ic_delete.png
new file mode 100644
index 000000000000..9abc51a53546
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_alert.png b/core/res/res/drawable-xhdpi/ic_dialog_alert.png
new file mode 100644
index 000000000000..2834f357c145
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_alert.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_dark.png b/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_dark.png
new file mode 100644
index 000000000000..f906e2aae9f1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_light.png b/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_light.png
new file mode 100644
index 000000000000..a99f0621c781
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_alert_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_close_normal_holo.png b/core/res/res/drawable-xhdpi/ic_dialog_close_normal_holo.png
new file mode 100644
index 000000000000..ea3bb48f281a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_close_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_close_pressed_holo.png b/core/res/res/drawable-xhdpi/ic_dialog_close_pressed_holo.png
new file mode 100644
index 000000000000..5475ef97843e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_close_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_dialer.png b/core/res/res/drawable-xhdpi/ic_dialog_dialer.png
new file mode 100644
index 000000000000..18f6880d1bcb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_dialer.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_email.png b/core/res/res/drawable-xhdpi/ic_dialog_email.png
new file mode 100644
index 000000000000..1c1eae6dc652
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_email.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_focused_holo.png b/core/res/res/drawable-xhdpi/ic_dialog_focused_holo.png
new file mode 100644
index 000000000000..000d885bb8c1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_info.png b/core/res/res/drawable-xhdpi/ic_dialog_info.png
new file mode 100644
index 000000000000..478dcc1b6942
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_map.png b/core/res/res/drawable-xhdpi/ic_dialog_map.png
new file mode 100644
index 000000000000..e25b8196d09f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_map.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_time.png b/core/res/res/drawable-xhdpi/ic_dialog_time.png
new file mode 100644
index 000000000000..10c9d72334dc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_time.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_usb.png b/core/res/res/drawable-xhdpi/ic_dialog_usb.png
new file mode 100644
index 000000000000..5893bff85c62
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_usb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_emergency.png b/core/res/res/drawable-xhdpi/ic_emergency.png
new file mode 100644
index 000000000000..f5df6cd1de38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_emergency.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_go.png b/core/res/res/drawable-xhdpi/ic_go.png
new file mode 100644
index 000000000000..1e2dcfa02057
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_go.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_go_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_go_search_api_holo_light.png
new file mode 100644
index 000000000000..f12eafcdcfe1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_go_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_input_add.png b/core/res/res/drawable-xhdpi/ic_input_add.png
new file mode 100644
index 000000000000..f1242f5e855e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_input_add.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_input_delete.png b/core/res/res/drawable-xhdpi/ic_input_delete.png
new file mode 100644
index 000000000000..34c5f3939bb7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_input_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_input_get.png b/core/res/res/drawable-xhdpi/ic_input_get.png
new file mode 100644
index 000000000000..7f9e9bfdacd2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_input_get.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_answer.png b/core/res/res/drawable-xhdpi/ic_jog_dial_answer.png
new file mode 100644
index 000000000000..eedb7fd76e36
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_answer.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_end.png b/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_end.png
new file mode 100644
index 000000000000..829973e1405b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_end.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_hold.png b/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_hold.png
new file mode 100644
index 000000000000..e8336d06c3cb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_answer_and_hold.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_decline.png b/core/res/res/drawable-xhdpi/ic_jog_dial_decline.png
new file mode 100644
index 000000000000..7cab5f5ff5af
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_decline.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-xhdpi/ic_jog_dial_sound_off.png
new file mode 100644
index 000000000000..65aa39bf6c14
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_sound_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-xhdpi/ic_jog_dial_sound_on.png
new file mode 100644
index 000000000000..ce8f3a7c5ef7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_sound_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-xhdpi/ic_jog_dial_unlock.png
new file mode 100644
index 000000000000..5d6fb7b307d8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_unlock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_jog_dial_vibrate_on.png b/core/res/res/drawable-xhdpi/ic_jog_dial_vibrate_on.png
new file mode 100644
index 000000000000..6fe8b7767d77
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_jog_dial_vibrate_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_launcher_android.png b/core/res/res/drawable-xhdpi/ic_launcher_android.png
new file mode 100644
index 000000000000..b1097d6a6279
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_launcher_android.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode.png
new file mode 100644
index 000000000000..dc7a9172eb76
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off.png b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off.png
new file mode 100644
index 000000000000..497ca2b81e99
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_idle_charging.png b/core/res/res/drawable-xhdpi/ic_lock_idle_charging.png
new file mode 100644
index 000000000000..14c8da440d1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_idle_charging.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_idle_lock.png b/core/res/res/drawable-xhdpi/ic_lock_idle_lock.png
new file mode 100644
index 000000000000..38b678641b3c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_idle_lock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_idle_low_battery.png b/core/res/res/drawable-xhdpi/ic_lock_idle_low_battery.png
new file mode 100644
index 000000000000..19af7e9d64cf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_idle_low_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_lock.png b/core/res/res/drawable-xhdpi/ic_lock_lock.png
new file mode 100644
index 000000000000..086a0ca0aac4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_lock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_power_off.png b/core/res/res/drawable-xhdpi/ic_lock_power_off.png
new file mode 100644
index 000000000000..530236ccd8df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_power_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_ringer_off.png b/core/res/res/drawable-xhdpi/ic_lock_ringer_off.png
new file mode 100644
index 000000000000..dff2c8932660
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_ringer_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_ringer_on.png b/core/res/res/drawable-xhdpi/ic_lock_ringer_on.png
new file mode 100644
index 000000000000..98341b06265f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_ringer_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_silent_mode.png b/core/res/res/drawable-xhdpi/ic_lock_silent_mode.png
new file mode 100644
index 000000000000..1ef944fb13a6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_silent_mode.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_silent_mode_off.png b/core/res/res/drawable-xhdpi/ic_lock_silent_mode_off.png
new file mode 100644
index 000000000000..8fd4a57f17a4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_silent_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_silent_mode_vibrate.png b/core/res/res/drawable-xhdpi/ic_lock_silent_mode_vibrate.png
new file mode 100644
index 000000000000..921f74e4eea1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_silent_mode_vibrate.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_ime.png b/core/res/res/drawable-xhdpi/ic_lockscreen_ime.png
new file mode 100644
index 000000000000..a40ddebf87c0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_ime.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position.png b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position.png
new file mode 100644
index 000000000000..6e2e6cb9d12e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim1.png b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim1.png
new file mode 100644
index 000000000000..238a8d9168e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim2.png b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim2.png
new file mode 100644
index 000000000000..e69d87863f11
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim3.png b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim3.png
new file mode 100644
index 000000000000..2c362f0a31b2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_maps_indicator_current_position_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_embed_play.png b/core/res/res/drawable-xhdpi/ic_media_embed_play.png
new file mode 100644
index 000000000000..b26f56501319
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_embed_play.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_ff.png b/core/res/res/drawable-xhdpi/ic_media_ff.png
new file mode 100644
index 000000000000..60f7e9218106
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_ff.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_fullscreen.png b/core/res/res/drawable-xhdpi/ic_media_fullscreen.png
new file mode 100644
index 000000000000..9526218f592b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_fullscreen.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_next.png b/core/res/res/drawable-xhdpi/ic_media_next.png
new file mode 100644
index 000000000000..9835c635faa9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_pause.png b/core/res/res/drawable-xhdpi/ic_media_pause.png
new file mode 100644
index 000000000000..8614bff431bb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_pause.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_play.png b/core/res/res/drawable-xhdpi/ic_media_play.png
new file mode 100644
index 000000000000..d93e8241970d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_play.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_previous.png b/core/res/res/drawable-xhdpi/ic_media_previous.png
new file mode 100644
index 000000000000..5df5987daafa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_rew.png b/core/res/res/drawable-xhdpi/ic_media_rew.png
new file mode 100644
index 000000000000..167d10e58b3c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_rew.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_stop.png b/core/res/res/drawable-xhdpi/ic_media_stop.png
new file mode 100644
index 000000000000..00159aaf5e38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_stop.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_video_poster.png b/core/res/res/drawable-xhdpi/ic_media_video_poster.png
new file mode 100644
index 000000000000..4aa4904db7bf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_video_poster.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_notification_clear_all.png b/core/res/res/drawable-xhdpi/ic_notification_clear_all.png
new file mode 100644
index 000000000000..5c553cfc4ac8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_notification_clear_all.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_notification_ime_default.png b/core/res/res/drawable-xhdpi/ic_notification_ime_default.png
new file mode 100644
index 000000000000..4d0f074c3910
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_notification_ime_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png b/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png
new file mode 100644
index 000000000000..010852f86121
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_partial_secure.png b/core/res/res/drawable-xhdpi/ic_partial_secure.png
new file mode 100644
index 000000000000..2dfbb1e6e1c4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_partial_secure.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_disk_full.png b/core/res/res/drawable-xhdpi/ic_popup_disk_full.png
new file mode 100644
index 000000000000..4313fdc7fbcd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_disk_full.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_reminder.png b/core/res/res/drawable-xhdpi/ic_popup_reminder.png
new file mode 100644
index 000000000000..4a03a1b0a30c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_reminder.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_1.png b/core/res/res/drawable-xhdpi/ic_popup_sync_1.png
new file mode 100644
index 000000000000..48f8d53ca059
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_2.png b/core/res/res/drawable-xhdpi/ic_popup_sync_2.png
new file mode 100644
index 000000000000..880c202f4c8d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_3.png b/core/res/res/drawable-xhdpi/ic_popup_sync_3.png
new file mode 100644
index 000000000000..eb6d03cbd70d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_4.png b/core/res/res/drawable-xhdpi/ic_popup_sync_4.png
new file mode 100644
index 000000000000..02a4d939552f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_5.png b/core/res/res/drawable-xhdpi/ic_popup_sync_5.png
new file mode 100644
index 000000000000..caaf5984e9a9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_5.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_popup_sync_6.png b/core/res/res/drawable-xhdpi/ic_popup_sync_6.png
new file mode 100644
index 000000000000..e662ab29175e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_popup_sync_6.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search.png b/core/res/res/drawable-xhdpi/ic_search.png
new file mode 100644
index 000000000000..998f91be9c4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png
new file mode 100644
index 000000000000..a4cdf1c79278
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_category_default.png b/core/res/res/drawable-xhdpi/ic_search_category_default.png
new file mode 100644
index 000000000000..7d5170e84bfe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_search_category_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_secure.png b/core/res/res/drawable-xhdpi/ic_secure.png
new file mode 100644
index 000000000000..9e2402850f00
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_secure.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_text_dot.png b/core/res/res/drawable-xhdpi/ic_text_dot.png
new file mode 100644
index 000000000000..d316f9ac8b1f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_text_dot.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_vibrate.png b/core/res/res/drawable-xhdpi/ic_vibrate.png
new file mode 100644
index 000000000000..5d0724ae41a7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_vibrate.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_vibrate_small.png b/core/res/res/drawable-xhdpi/ic_vibrate_small.png
new file mode 100644
index 000000000000..6ee6fd854949
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_vibrate_small.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search.png b/core/res/res/drawable-xhdpi/ic_voice_search.png
new file mode 100644
index 000000000000..c625a3602bcb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png
new file mode 100644
index 000000000000..c332ba08c21f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume.png b/core/res/res/drawable-xhdpi/ic_volume.png
new file mode 100644
index 000000000000..f6a457d69f83
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume_bluetooth_ad2p.png b/core/res/res/drawable-xhdpi/ic_volume_bluetooth_ad2p.png
new file mode 100644
index 000000000000..cbcdf33401b8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume_bluetooth_ad2p.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume_bluetooth_in_call.png b/core/res/res/drawable-xhdpi/ic_volume_bluetooth_in_call.png
new file mode 100644
index 000000000000..9c7e90619645
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume_bluetooth_in_call.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume_off.png b/core/res/res/drawable-xhdpi/ic_volume_off.png
new file mode 100644
index 000000000000..e0945142e391
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume_off_small.png b/core/res/res/drawable-xhdpi/ic_volume_off_small.png
new file mode 100644
index 000000000000..bc2960825539
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume_off_small.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_volume_small.png b/core/res/res/drawable-xhdpi/ic_volume_small.png
new file mode 100644
index 000000000000..9d6d9209a331
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_volume_small.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.png b/core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.png
new file mode 100644
index 000000000000..b26180dfa075
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/icon_highlight_square.9.png b/core/res/res/drawable-xhdpi/icon_highlight_square.9.png
new file mode 100644
index 000000000000..f45f1c51794e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/icon_highlight_square.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ime_qwerty.png b/core/res/res/drawable-xhdpi/ime_qwerty.png
new file mode 100644
index 000000000000..42c9e5aa2d05
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ime_qwerty.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.png
new file mode 100644
index 000000000000..a89b8d5d5609
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up_holo.png
new file mode 100644
index 000000000000..66c1b58b9871
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up.png
new file mode 100644
index 000000000000..2d34cf67843b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up_holo.png
new file mode 100644
index 000000000000..b5f807f73b38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_red_up_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default.png
new file mode 100644
index 000000000000..997d6a5eec08
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green.png
new file mode 100644
index 000000000000..2eb69f676109
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_green.png
new file mode 100644
index 000000000000..c106f76f321a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_green.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_yellow.png
new file mode 100644
index 000000000000..7657f74a43bf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_left_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_middle_yellow.png
new file mode 100644
index 000000000000..a90926da0c0e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_middle_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_red.png
new file mode 100644
index 000000000000..3a00c5646c94
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_red.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_yellow.png
new file mode 100644
index 000000000000..113daaa41143
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_long_right_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left.png
new file mode 100644
index 000000000000..ac62915230db
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left_and_right.png
new file mode 100644
index 000000000000..0efed7a0fcc3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_left_and_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_right.png
new file mode 100644
index 000000000000..859998bddb43
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_arrow_short_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_bg.png b/core/res/res/drawable-xhdpi/jog_dial_bg.png
new file mode 100644
index 000000000000..61fcb4692f4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_bg.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_dimple.png b/core/res/res/drawable-xhdpi/jog_dial_dimple.png
new file mode 100644
index 000000000000..3ab2ab6f55ce
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_dimple.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/jog_dial_dimple_dim.png b/core/res/res/drawable-xhdpi/jog_dial_dimple_dim.png
new file mode 100644
index 000000000000..720ff8020677
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/jog_dial_dimple_dim.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_accessory_bg_landscape.9.png b/core/res/res/drawable-xhdpi/keyboard_accessory_bg_landscape.9.png
new file mode 100644
index 000000000000..e534908ad42d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_accessory_bg_landscape.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_background.9.png b/core/res/res/drawable-xhdpi/keyboard_background.9.png
new file mode 100644
index 000000000000..33d8519b1bad
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_key_feedback_background.9.png b/core/res/res/drawable-xhdpi/keyboard_key_feedback_background.9.png
new file mode 100644
index 000000000000..6e8584bf71ab
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_key_feedback_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png b/core/res/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png
new file mode 100644
index 000000000000..d983a9521ed4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_popup_panel_background.9.png b/core/res/res/drawable-xhdpi/keyboard_popup_panel_background.9.png
new file mode 100644
index 000000000000..d9f48199b89e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_popup_panel_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/keyboard_popup_panel_trans_background.9.png b/core/res/res/drawable-xhdpi/keyboard_popup_panel_trans_background.9.png
new file mode 100644
index 000000000000..9a19f78aa59e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/keyboard_popup_panel_trans_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/light_header.9.png b/core/res/res/drawable-xhdpi/light_header.9.png
new file mode 100644
index 000000000000..029dd2afe452
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/light_header.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_divider_horizontal_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_divider_horizontal_holo_dark.9.png
new file mode 100644
index 000000000000..a8ad54daf787
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_divider_horizontal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
index 80c93da081da..e4b33935a3aa 100644
--- a/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
index 80c93da081da..e4b33935a3aa 100644
--- a/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_divider_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_section_divider_holo_dark.9.png
index 76fd13c325e7..942d72e65b09 100644
--- a/core/res/res/drawable-xhdpi/list_section_divider_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/list_section_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_divider_holo_light.9.png b/core/res/res/drawable-xhdpi/list_section_divider_holo_light.9.png
index d8fd9e396894..4ad088ffc687 100644
--- a/core/res/res/drawable-xhdpi/list_section_divider_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/list_section_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_header_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_section_header_holo_dark.9.png
new file mode 100644
index 000000000000..4412331cd5e4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_section_header_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_header_holo_light.9.png b/core/res/res/drawable-xhdpi/list_section_header_holo_light.9.png
new file mode 100644
index 000000000000..d0cba8d761a0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_section_header_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selected_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selected_holo_dark.9.png
index 3e8dac8d20af..4375032b27d8 100644
--- a/core/res/res/drawable-xhdpi/list_selected_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/list_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selected_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selected_holo_light.9.png
index 3e8dac8d20af..4375032b27d8 100644
--- a/core/res/res/drawable-xhdpi/list_selected_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/list_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_activated_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selector_activated_holo_dark.9.png
new file mode 100644
index 000000000000..f176c7f9b62b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_activated_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_activated_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selector_activated_holo_light.9.png
new file mode 100644
index 000000000000..b13f3404b8b2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_activated_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_default.9.png b/core/res/res/drawable-xhdpi/list_selector_background_default.9.png
new file mode 100644
index 000000000000..7261e96a1b32
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_default_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_default_light.9.png
new file mode 100644
index 000000000000..1fc96e2c352b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_default_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
new file mode 100644
index 000000000000..d599976c634c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_disabled_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_disabled_light.9.png
new file mode 100644
index 000000000000..9b22eff2bc31
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_disabled_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png b/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png
new file mode 100644
index 000000000000..17987f39a093
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_focused.9.png b/core/res/res/drawable-xhdpi/list_selector_background_focused.9.png
new file mode 100644
index 000000000000..c8e7681e0bfd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_focused_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_focused_light.9.png
new file mode 100644
index 000000000000..c8e7681e0bfd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_focused_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_focused_selected.9.png b/core/res/res/drawable-xhdpi/list_selector_background_focused_selected.9.png
new file mode 100644
index 000000000000..f56a2dc0235c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_focused_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png
new file mode 100644
index 000000000000..5a64592d3784
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_longpress.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_longpress_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_longpress_light.9.png
new file mode 100644
index 000000000000..ee50a53061aa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_longpress_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png
new file mode 100644
index 000000000000..1593577a406c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_pressed_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_pressed_light.9.png
new file mode 100644
index 000000000000..a9a293c84aee
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_pressed_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_selected.9.png b/core/res/res/drawable-xhdpi/list_selector_background_selected.9.png
new file mode 100644
index 000000000000..78358fe1af78
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_selected_light.9.png b/core/res/res/drawable-xhdpi/list_selector_background_selected_light.9.png
new file mode 100644
index 000000000000..7349da53133e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_background_selected_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selector_disabled_holo_dark.9.png
new file mode 100644
index 000000000000..88726b691605
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selector_disabled_holo_light.9.png
new file mode 100644
index 000000000000..c6a7d4d87c0e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selector_focused_holo_dark.9.png
new file mode 100644
index 000000000000..d9a26f49ca2f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selector_focused_holo_light.9.png
new file mode 100644
index 000000000000..7ea2b211ee27
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_dark.9.png
new file mode 100644
index 000000000000..7033b0e9274b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_light.9.png
new file mode 100644
index 000000000000..e6386756e7d7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_multiselect_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_selector_pressed_holo_dark.9.png
new file mode 100644
index 000000000000..df197011af19
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/list_selector_pressed_holo_light.9.png
new file mode 100644
index 000000000000..6e5a6a980ee8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_selector_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/maps_google_logo.png b/core/res/res/drawable-xhdpi/maps_google_logo.png
new file mode 100644
index 000000000000..2cd62579724d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/maps_google_logo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_background.9.png b/core/res/res/drawable-xhdpi/menu_background.9.png
new file mode 100644
index 000000000000..b784f711c9b9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-xhdpi/menu_background_fill_parent_width.9.png
new file mode 100644
index 000000000000..ab43013078e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_background_fill_parent_width.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_separator.9.png b/core/res/res/drawable-xhdpi/menu_separator.9.png
new file mode 100644
index 000000000000..3251f9587a50
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_separator.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menu_submenu_background.9.png b/core/res/res/drawable-xhdpi/menu_submenu_background.9.png
new file mode 100644
index 000000000000..54b2be68553a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menu_submenu_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menuitem_background_focus.9.png b/core/res/res/drawable-xhdpi/menuitem_background_focus.9.png
new file mode 100644
index 000000000000..83e4ae0080c0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menuitem_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menuitem_background_pressed.9.png b/core/res/res/drawable-xhdpi/menuitem_background_pressed.9.png
new file mode 100644
index 000000000000..70a000f8cdbd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menuitem_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menuitem_background_solid_focused.9.png b/core/res/res/drawable-xhdpi/menuitem_background_solid_focused.9.png
new file mode 100644
index 000000000000..671e75616929
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menuitem_background_solid_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menuitem_background_solid_pressed.9.png b/core/res/res/drawable-xhdpi/menuitem_background_solid_pressed.9.png
new file mode 100644
index 000000000000..5f334d8681fa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menuitem_background_solid_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/menuitem_checkbox_on.png b/core/res/res/drawable-xhdpi/menuitem_checkbox_on.png
new file mode 100644
index 000000000000..a7d2ad2a5d45
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/menuitem_checkbox_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/minitab_lt_focus.9.png b/core/res/res/drawable-xhdpi/minitab_lt_focus.9.png
new file mode 100644
index 000000000000..7a0995bb77a0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/minitab_lt_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/minitab_lt_press.9.png b/core/res/res/drawable-xhdpi/minitab_lt_press.9.png
new file mode 100644
index 000000000000..7602d3e92aff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/minitab_lt_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/minitab_lt_selected.9.png b/core/res/res/drawable-xhdpi/minitab_lt_selected.9.png
new file mode 100644
index 000000000000..544fad557a3c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/minitab_lt_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/minitab_lt_unselected.9.png b/core/res/res/drawable-xhdpi/minitab_lt_unselected.9.png
new file mode 100644
index 000000000000..bcdb9d7a12b4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/minitab_lt_unselected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/minitab_lt_unselected_press.9.png b/core/res/res/drawable-xhdpi/minitab_lt_unselected_press.9.png
new file mode 100644
index 000000000000..8aabb89d2d58
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/minitab_lt_unselected_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png b/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png
new file mode 100644
index 000000000000..4cc515ef6358
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
new file mode 100644
index 000000000000..b8220ceb7ec4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
new file mode 100644
index 000000000000..7f4f0937419c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
new file mode 100644
index 000000000000..c10b671f16d3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
new file mode 100644
index 000000000000..bfae684ddfd3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
new file mode 100644
index 000000000000..945163094d69
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
new file mode 100644
index 000000000000..01cc01a98987
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
new file mode 100644
index 000000000000..b4d9c7f33102
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
new file mode 100644
index 000000000000..5f3d98225eff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
new file mode 100644
index 000000000000..434f05fbbab3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
new file mode 100644
index 000000000000..0c329945d58e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
new file mode 100644
index 000000000000..cba1e76cb088
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
new file mode 100644
index 000000000000..ee270b44aea3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
new file mode 100644
index 000000000000..297f77c768a6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
new file mode 100644
index 000000000000..e5d512699c33
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/overscroll_glow.png b/core/res/res/drawable-xhdpi/overscroll_glow.png
index 227565ef1578..75c3eb487714 100644
--- a/core/res/res/drawable-xhdpi/overscroll_glow.png
+++ b/core/res/res/drawable-xhdpi/overscroll_glow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_background.9.png b/core/res/res/drawable-xhdpi/panel_background.9.png
new file mode 100644
index 000000000000..2ceae602f6b0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png
new file mode 100644
index 000000000000..0cf7ac83dff2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png b/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
new file mode 100644
index 000000000000..c171b7c7bc03
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_picture_frame_bg_focus_blue.9.png b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_focus_blue.9.png
new file mode 100644
index 000000000000..8c7b0bdd030a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_focus_blue.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_picture_frame_bg_normal.9.png b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_normal.9.png
new file mode 100644
index 000000000000..5477a0238efb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_picture_frame_bg_pressed_blue.9.png b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_pressed_blue.9.png
new file mode 100644
index 000000000000..d79a00306146
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/panel_picture_frame_bg_pressed_blue.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/password_field_default.9.png b/core/res/res/drawable-xhdpi/password_field_default.9.png
new file mode 100644
index 000000000000..cf8329e3862d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/password_field_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.png b/core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.png
new file mode 100644
index 000000000000..65ea61bc7869
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/picture_emergency.png b/core/res/res/drawable-xhdpi/picture_emergency.png
new file mode 100644
index 000000000000..08b421eefd22
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/picture_emergency.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/picture_frame.9.png b/core/res/res/drawable-xhdpi/picture_frame.9.png
new file mode 100644
index 000000000000..69ef655460ac
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/picture_frame.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pointer_arrow.png b/core/res/res/drawable-xhdpi/pointer_arrow.png
new file mode 100644
index 000000000000..957eb393d8ad
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pointer_arrow.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pointer_spot_anchor.png b/core/res/res/drawable-xhdpi/pointer_spot_anchor.png
new file mode 100644
index 000000000000..ad41c9785db4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pointer_spot_anchor.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pointer_spot_hover.png b/core/res/res/drawable-xhdpi/pointer_spot_hover.png
new file mode 100644
index 000000000000..e9b98f6d4b90
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pointer_spot_hover.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pointer_spot_touch.png b/core/res/res/drawable-xhdpi/pointer_spot_touch.png
new file mode 100644
index 000000000000..e10d99809161
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pointer_spot_touch.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_inline_error.9.png b/core/res/res/drawable-xhdpi/popup_inline_error.9.png
new file mode 100644
index 000000000000..2784c3066ff9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/popup_inline_error.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_inline_error_above.9.png b/core/res/res/drawable-xhdpi/popup_inline_error_above.9.png
new file mode 100644
index 000000000000..f26be8c70711
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/popup_inline_error_above.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/pressed_application_background_static.png b/core/res/res/drawable-xhdpi/pressed_application_background_static.png
new file mode 100644
index 000000000000..b70de9ed9db1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/pressed_application_background_static.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png
new file mode 100644
index 000000000000..345f5d3067c1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png
new file mode 100644
index 000000000000..c843ef3af22f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
index dc8711f2a166..097160bdc086 100644
--- a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
index dc8711f2a166..097160bdc086 100644
--- a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png
index 39a168f9677c..205b66e2cdef 100644
--- a/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png
index 39a168f9677c..205b66e2cdef 100644
--- a/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate1.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate1.png
new file mode 100644
index 000000000000..7f01aa46f393
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate2.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate2.png
new file mode 100644
index 000000000000..3105385c1034
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate3.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate3.png
new file mode 100644
index 000000000000..248b49a6b8ba
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_dark.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_dark.9.png
new file mode 100644
index 000000000000..622095bfca75
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_light.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_light.9.png
new file mode 100644
index 000000000000..bf8cf4c5870e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_dark.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_dark.9.png
new file mode 100644
index 000000000000..3e155decb26d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_light.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_light.9.png
new file mode 100644
index 000000000000..1c1974ab4cf0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_dark.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_dark.9.png
new file mode 100644
index 000000000000..52d95afa8dab
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_light.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_light.9.png
new file mode 100644
index 000000000000..2613e0d954d2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowup_left_right_holo_dark.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_right_holo_dark.9.png
new file mode 100644
index 000000000000..b7986e7c4681
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowup_left_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/quickactions_arrowup_right_holo_light.9.png b/core/res/res/drawable-xhdpi/quickactions_arrowup_right_holo_light.9.png
new file mode 100644
index 000000000000..e964b39467bb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/quickactions_arrowup_right_holo_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 8e2eb6646135..e258284a544b 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 89da95e1fe52..5c4bbf5f2195 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/radiobutton_off_background.png b/core/res/res/drawable-xhdpi/radiobutton_off_background.png
new file mode 100644
index 000000000000..384442f64cca
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/radiobutton_off_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/radiobutton_on_background.png b/core/res/res/drawable-xhdpi/radiobutton_on_background.png
new file mode 100644
index 000000000000..c65e4ff661e1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/radiobutton_on_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_half.png b/core/res/res/drawable-xhdpi/rate_star_big_half.png
new file mode 100644
index 000000000000..68c77a879467
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_big_half.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_off.png b/core/res/res/drawable-xhdpi/rate_star_big_off.png
new file mode 100644
index 000000000000..2389fff3af6a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_on.png b/core/res/res/drawable-xhdpi/rate_star_big_on.png
new file mode 100644
index 000000000000..39467dd052f9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_half.png b/core/res/res/drawable-xhdpi/rate_star_med_half.png
new file mode 100644
index 000000000000..6c6011428122
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_med_half.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_off.png b/core/res/res/drawable-xhdpi/rate_star_med_off.png
new file mode 100644
index 000000000000..3428a3b63d3e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_med_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_on.png b/core/res/res/drawable-xhdpi/rate_star_med_on.png
new file mode 100644
index 000000000000..0acddec3b15d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_med_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_half.png b/core/res/res/drawable-xhdpi/rate_star_small_half.png
new file mode 100644
index 000000000000..b7a5709617fc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_small_half.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_off.png b/core/res/res/drawable-xhdpi/rate_star_small_off.png
new file mode 100644
index 000000000000..2516cccc7a75
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_small_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_on.png b/core/res/res/drawable-xhdpi/rate_star_small_on.png
new file mode 100644
index 000000000000..327fd1ffa7fa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/rate_star_small_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/recent_dialog_background.9.png b/core/res/res/drawable-xhdpi/recent_dialog_background.9.png
new file mode 100644
index 000000000000..867e715a95ec
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/recent_dialog_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/reticle.png b/core/res/res/drawable-xhdpi/reticle.png
new file mode 100644
index 000000000000..c28b70d549b2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/reticle.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png
index 328bd1edeb99..073ff4c574e8 100644
--- a/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png
index dcc42213e00b..4c7b0aacdbfc 100644
--- a/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
index 80e440042cdc..a217a90d4629 100644
--- a/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png
index af96c43905da..551fb0ae7af5 100644
--- a/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/search_dropdown_background.9.png b/core/res/res/drawable-xhdpi/search_dropdown_background.9.png
new file mode 100644
index 000000000000..52761a7d026a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/search_dropdown_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/search_plate.9.png b/core/res/res/drawable-xhdpi/search_plate.9.png
new file mode 100644
index 000000000000..2ad7615df04b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/search_plate.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/search_plate_global.9.png b/core/res/res/drawable-xhdpi/search_plate_global.9.png
new file mode 100644
index 000000000000..2c935ae8d78b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/search_plate_global.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/seek_thumb_normal.png b/core/res/res/drawable-xhdpi/seek_thumb_normal.png
new file mode 100644
index 000000000000..fb21fcb9047c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/seek_thumb_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/seek_thumb_pressed.png b/core/res/res/drawable-xhdpi/seek_thumb_pressed.png
new file mode 100644
index 000000000000..d3cb25aaf6be
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/seek_thumb_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/seek_thumb_selected.png b/core/res/res/drawable-xhdpi/seek_thumb_selected.png
new file mode 100644
index 000000000000..8227c1f301a2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/seek_thumb_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/settings_header_raw.9.png b/core/res/res/drawable-xhdpi/settings_header_raw.9.png
new file mode 100644
index 000000000000..41e6c31a8371
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/settings_header_raw.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png
index 074f2d4b8890..5e7551dce8a9 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png
index f8c12cfa6155..f4586f8e9ea0 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png
index cf01901e62da..86d369da732f 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png
index 71f4f11cacb6..1c4983b8b854 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png
index c5916206cf8f..ed69545bf8b7 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png
index c5916206cf8f..ed69545bf8b7 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png
index 30caa29cbafd..9ee1f8ceb778 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png
index 7ee4c7f41ac0..e3e8656c3afe 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png
index 06b6dc71192e..fab743d10099 100644
--- a/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png
index aa32bcfa0350..9987f7401c51 100644
--- a/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png
index ba25eb048546..6dcd2d46f5d6 100644
--- a/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png
index 7a015ba20076..bfddedbfc5d6 100644
--- a/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.png b/core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.png
new file mode 100644
index 000000000000..b4352186ff81
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.png b/core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.png
new file mode 100644
index 000000000000..a45c7617715c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png
index c6aad2422e52..d80fa37e1310 100644
--- a/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png
index c6aad2422e52..d80fa37e1310 100644
--- a/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_normal.9.png b/core/res/res/drawable-xhdpi/spinner_normal.9.png
new file mode 100644
index 000000000000..71b65ddca777
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_press.9.png b/core/res/res/drawable-xhdpi/spinner_press.9.png
new file mode 100644
index 000000000000..d7233baa19ad
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png
index a0a78671d410..c2793968d912 100644
--- a/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png
index 85a3cae8ae5c..d75dedac9bd3 100644
--- a/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_select.9.png b/core/res/res/drawable-xhdpi/spinner_select.9.png
new file mode 100644
index 000000000000..a1b11e0b12ac
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_select.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/star_big_off.png b/core/res/res/drawable-xhdpi/star_big_off.png
new file mode 100644
index 000000000000..8a178433fd65
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/star_big_on.png b/core/res/res/drawable-xhdpi/star_big_on.png
new file mode 100644
index 000000000000..84f059696f9b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/star_off.png b/core/res/res/drawable-xhdpi/star_off.png
new file mode 100644
index 000000000000..010ef9bebca8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/star_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/star_on.png b/core/res/res/drawable-xhdpi/star_on.png
new file mode 100644
index 000000000000..01e077a4e4b4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/star_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_ecb_mode.png b/core/res/res/drawable-xhdpi/stat_ecb_mode.png
new file mode 100644
index 000000000000..ce1749426d5f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_ecb_mode.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_call_mute.png b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
new file mode 100644
index 000000000000..4135feaed94b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_car_mode.png b/core/res/res/drawable-xhdpi/stat_notify_car_mode.png
new file mode 100644
index 000000000000..1f3a9cc7f650
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_car_mode.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_chat.png b/core/res/res/drawable-xhdpi/stat_notify_chat.png
new file mode 100644
index 000000000000..f860fdc18d7e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_chat.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_disk_full.png b/core/res/res/drawable-xhdpi/stat_notify_disk_full.png
new file mode 100644
index 000000000000..3fa330e218e0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_disk_full.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_email_generic.png b/core/res/res/drawable-xhdpi/stat_notify_email_generic.png
new file mode 100644
index 000000000000..07d297f49dd1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_email_generic.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_error.png b/core/res/res/drawable-xhdpi/stat_notify_error.png
new file mode 100644
index 000000000000..c7ac11ff7fa2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_error.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_gmail.png b/core/res/res/drawable-xhdpi/stat_notify_gmail.png
new file mode 100644
index 000000000000..e1efa9b77bfa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_gmail.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_missed_call.png b/core/res/res/drawable-xhdpi/stat_notify_missed_call.png
new file mode 100644
index 000000000000..4fab7967cb5c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_missed_call.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_more.png b/core/res/res/drawable-xhdpi/stat_notify_more.png
new file mode 100644
index 000000000000..76c2c765dd1c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_more.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sdcard.png b/core/res/res/drawable-xhdpi/stat_notify_sdcard.png
new file mode 100644
index 000000000000..72012135fe10
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sdcard.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sdcard_prepare.png b/core/res/res/drawable-xhdpi/stat_notify_sdcard_prepare.png
new file mode 100644
index 000000000000..648893b94695
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sdcard_prepare.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-xhdpi/stat_notify_sdcard_usb.png
new file mode 100644
index 000000000000..abd8b6ed5242
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sdcard_usb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sim_toolkit.png b/core/res/res/drawable-xhdpi/stat_notify_sim_toolkit.png
new file mode 100644
index 000000000000..9e1df7208e2b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sim_toolkit.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sync.png b/core/res/res/drawable-xhdpi/stat_notify_sync.png
new file mode 100644
index 000000000000..b3bf21ffef89
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sync.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sync_anim0.png b/core/res/res/drawable-xhdpi/stat_notify_sync_anim0.png
new file mode 100644
index 000000000000..b3bf21ffef89
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sync_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_sync_error.png b/core/res/res/drawable-xhdpi/stat_notify_sync_error.png
new file mode 100644
index 000000000000..33582ef1077b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_sync_error.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_voicemail.png b/core/res/res/drawable-xhdpi/stat_notify_voicemail.png
new file mode 100644
index 000000000000..fd88ac205392
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.png b/core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.png
new file mode 100644
index 000000000000..3a2e070adfb2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.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
new file mode 100644
index 000000000000..01eb61d38874
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_0.png b/core/res/res/drawable-xhdpi/stat_sys_battery_0.png
new file mode 100644
index 000000000000..50aa7202a72a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_100.png b/core/res/res/drawable-xhdpi/stat_sys_battery_100.png
new file mode 100644
index 000000000000..0aefc68e437f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_15.png b/core/res/res/drawable-xhdpi/stat_sys_battery_15.png
new file mode 100644
index 000000000000..686ce51ad41e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_28.png b/core/res/res/drawable-xhdpi/stat_sys_battery_28.png
new file mode 100644
index 000000000000..031546b8fce2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_43.png b/core/res/res/drawable-xhdpi/stat_sys_battery_43.png
new file mode 100644
index 000000000000..d38698743c12
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_57.png b/core/res/res/drawable-xhdpi/stat_sys_battery_57.png
new file mode 100644
index 000000000000..51115df0b78a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_71.png b/core/res/res/drawable-xhdpi/stat_sys_battery_71.png
new file mode 100644
index 000000000000..ca4fd8091d04
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_85.png b/core/res/res/drawable-xhdpi/stat_sys_battery_85.png
new file mode 100644
index 000000000000..f32e9e11122d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
new file mode 100644
index 000000000000..1d9efe74be1c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
new file mode 100644
index 000000000000..c5debbfbc147
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
new file mode 100644
index 000000000000..0b11fb1025c1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
new file mode 100644
index 000000000000..3d06ee2aab7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
new file mode 100644
index 000000000000..ea601e1e9842
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
new file mode 100644
index 000000000000..843b0b4eddd5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
new file mode 100644
index 000000000000..213e3f16441e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
new file mode 100644
index 000000000000..ca5c41580d5a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_battery_unknown.png b/core/res/res/drawable-xhdpi/stat_sys_battery_unknown.png
new file mode 100644
index 000000000000..7f156be3cdeb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_battery_unknown.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_data_bluetooth.png b/core/res/res/drawable-xhdpi/stat_sys_data_bluetooth.png
new file mode 100644
index 000000000000..68cac47cb406
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_data_usb.png b/core/res/res/drawable-xhdpi/stat_sys_data_usb.png
new file mode 100644
index 000000000000..57c1099d0d55
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_data_usb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim0.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim0.png
new file mode 100644
index 000000000000..73cbc96f903e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim1.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim1.png
new file mode 100644
index 000000000000..3e39abb05b04
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim2.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim2.png
new file mode 100644
index 000000000000..fc9b0dec53bf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim3.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim3.png
new file mode 100644
index 000000000000..94bc01220c59
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim4.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim4.png
new file mode 100644
index 000000000000..e6b5857fecde
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_download_anim5.png b/core/res/res/drawable-xhdpi/stat_sys_download_anim5.png
new file mode 100644
index 000000000000..f1df0c878bee
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_download_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_gps_on.png b/core/res/res/drawable-xhdpi/stat_sys_gps_on.png
new file mode 100644
index 000000000000..a7408d492c8c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_gps_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_headset.png b/core/res/res/drawable-xhdpi/stat_sys_headset.png
new file mode 100644
index 000000000000..4d447abf2881
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_headset.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_phone_call.png b/core/res/res/drawable-xhdpi/stat_sys_phone_call.png
new file mode 100644
index 000000000000..5aee387d21bf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-xhdpi/stat_sys_phone_call_forward.png
new file mode 100644
index 000000000000..15c8ddaf6845
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-xhdpi/stat_sys_phone_call_on_hold.png
new file mode 100644
index 000000000000..d5a1531ff345
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_r_signal_0_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_r_signal_0_cdma.png
new file mode 100644
index 000000000000..99ce37895afc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_r_signal_0_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_r_signal_1_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_r_signal_1_cdma.png
new file mode 100644
index 000000000000..e4301142dc35
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_r_signal_1_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_r_signal_2_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_r_signal_2_cdma.png
new file mode 100644
index 000000000000..42418962e549
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_r_signal_2_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_r_signal_3_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_r_signal_3_cdma.png
new file mode 100644
index 000000000000..3195feeb84d8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_r_signal_3_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_r_signal_4_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_r_signal_4_cdma.png
new file mode 100644
index 000000000000..3cb54634e0fc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_r_signal_4_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_ra_signal_0_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_0_cdma.png
new file mode 100644
index 000000000000..5f9a46bd1dec
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_0_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_ra_signal_1_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_1_cdma.png
new file mode 100644
index 000000000000..da5d09cf58ba
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_1_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_ra_signal_2_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_2_cdma.png
new file mode 100644
index 000000000000..8cd6e0842f28
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_2_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_ra_signal_3_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_3_cdma.png
new file mode 100644
index 000000000000..6c6868019764
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_3_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_ra_signal_4_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_4_cdma.png
new file mode 100644
index 000000000000..5cf6e9c61cef
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_ra_signal_4_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_secure.png b/core/res/res/drawable-xhdpi/stat_sys_secure.png
new file mode 100644
index 000000000000..bef2fd726e40
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_secure.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_0_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_signal_0_cdma.png
new file mode 100644
index 000000000000..28815f14aa2a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_0_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_1_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_signal_1_cdma.png
new file mode 100644
index 000000000000..1643c1011f8a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_1_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_2_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_signal_2_cdma.png
new file mode 100644
index 000000000000..0f5a1478d359
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_2_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_3_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_signal_3_cdma.png
new file mode 100644
index 000000000000..d37f761be94e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_3_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_4_cdma.png b/core/res/res/drawable-xhdpi/stat_sys_signal_4_cdma.png
new file mode 100644
index 000000000000..f4b835f6484c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_4_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_0.png b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_0.png
new file mode 100644
index 000000000000..dc5196c75d8e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_1.png b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_1.png
new file mode 100644
index 000000000000..5da3b3a5e1b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_2.png b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_2.png
new file mode 100644
index 000000000000..d17890de80d2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_3.png b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_3.png
new file mode 100644
index 000000000000..2dbe7599d456
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_4.png b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_4.png
new file mode 100644
index 000000000000..796f9edc0232
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_signal_evdo_4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
new file mode 100644
index 000000000000..3ac1b88d28a2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png b/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png
new file mode 100644
index 000000000000..c3e2acf52470
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_general.png b/core/res/res/drawable-xhdpi/stat_sys_tether_general.png
new file mode 100644
index 000000000000..a1c200ef739a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_tether_general.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png b/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png
new file mode 100644
index 000000000000..a3008b8b9ecd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png
new file mode 100644
index 000000000000..1fd3139c92b5
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_throttled.png b/core/res/res/drawable-xhdpi/stat_sys_throttled.png
new file mode 100644
index 000000000000..043a1e3e7b15
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_throttled.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim0.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim0.png
new file mode 100644
index 000000000000..2fbdaf8b269d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim0.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim1.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim1.png
new file mode 100644
index 000000000000..cd0ca73608da
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim2.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim2.png
new file mode 100644
index 000000000000..e443f4573f1a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim3.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim3.png
new file mode 100644
index 000000000000..8fb42f8ea5fd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim4.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim4.png
new file mode 100644
index 000000000000..2fb18024e9d0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_upload_anim5.png b/core/res/res/drawable-xhdpi/stat_sys_upload_anim5.png
new file mode 100644
index 000000000000..c1d9db5a62c3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_upload_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call.png
new file mode 100644
index 000000000000..af804819975d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call_on_hold.png
new file mode 100644
index 000000000000..2ba109545c43
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_vp_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_warning.png b/core/res/res/drawable-xhdpi/stat_sys_warning.png
new file mode 100644
index 000000000000..c7ac11ff7fa2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_sys_warning.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_background.png b/core/res/res/drawable-xhdpi/status_bar_background.png
new file mode 100644
index 000000000000..529904f8846c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_background.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_header_background.9.png b/core/res/res/drawable-xhdpi/status_bar_header_background.9.png
new file mode 100644
index 000000000000..d03720f81ae7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_header_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_item_app_background_normal.9.png b/core/res/res/drawable-xhdpi/status_bar_item_app_background_normal.9.png
new file mode 100644
index 000000000000..7f3d9db49c00
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_item_app_background_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_item_background_focus.9.png b/core/res/res/drawable-xhdpi/status_bar_item_background_focus.9.png
new file mode 100644
index 000000000000..5d77613d8df8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_item_background_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_item_background_normal.9.png b/core/res/res/drawable-xhdpi/status_bar_item_background_normal.9.png
new file mode 100644
index 000000000000..3b4959ffd947
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_item_background_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/status_bar_item_background_pressed.9.png b/core/res/res/drawable-xhdpi/status_bar_item_background_pressed.9.png
new file mode 100644
index 000000000000..70a000f8cdbd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/status_bar_item_background_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/statusbar_background.9.png b/core/res/res/drawable-xhdpi/statusbar_background.9.png
new file mode 100644
index 000000000000..e1a3a9b427ef
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/statusbar_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/submenu_arrow_nofocus.png b/core/res/res/drawable-xhdpi/submenu_arrow_nofocus.png
new file mode 100644
index 000000000000..5e640307c262
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/submenu_arrow_nofocus.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_action_add.png b/core/res/res/drawable-xhdpi/sym_action_add.png
new file mode 100644
index 000000000000..b0562c4890ed
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_action_add.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_action_call.png b/core/res/res/drawable-xhdpi/sym_action_call.png
new file mode 100644
index 000000000000..e0de1e01739a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_action_call.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_action_chat.png b/core/res/res/drawable-xhdpi/sym_action_chat.png
new file mode 100644
index 000000000000..c0f26240ee60
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_action_chat.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_action_email.png b/core/res/res/drawable-xhdpi/sym_action_email.png
new file mode 100644
index 000000000000..343a9c1a4c1c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_action_email.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_app_on_sd_unavailable_icon.png b/core/res/res/drawable-xhdpi/sym_app_on_sd_unavailable_icon.png
new file mode 100644
index 000000000000..e4e6a5a70df2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_app_on_sd_unavailable_icon.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_call_incoming.png b/core/res/res/drawable-xhdpi/sym_call_incoming.png
new file mode 100644
index 000000000000..738390aae416
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_call_incoming.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_call_missed.png b/core/res/res/drawable-xhdpi/sym_call_missed.png
new file mode 100644
index 000000000000..2eb7aa46bb94
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_call_missed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_call_outgoing.png b/core/res/res/drawable-xhdpi/sym_call_outgoing.png
new file mode 100644
index 000000000000..77f21e6bfe2e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_call_outgoing.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_contact_card.png b/core/res/res/drawable-xhdpi/sym_contact_card.png
new file mode 100644
index 000000000000..aa65f1c987dd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_contact_card.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_def_app_icon.png b/core/res/res/drawable-xhdpi/sym_def_app_icon.png
new file mode 100644
index 000000000000..f36039995174
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_def_app_icon.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_delete.png b/core/res/res/drawable-xhdpi/sym_keyboard_delete.png
new file mode 100644
index 000000000000..ca936d1985c6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_delete_dim.png b/core/res/res/drawable-xhdpi/sym_keyboard_delete_dim.png
new file mode 100644
index 000000000000..2dac874076ba
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_delete_dim.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_delete.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_delete.png
new file mode 100644
index 000000000000..843cc8272da3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_ok.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_ok.png
new file mode 100644
index 000000000000..425452e07914
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_ok.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_return.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_return.png
new file mode 100644
index 000000000000..d19e4dd91210
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_return.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift.png
new file mode 100644
index 000000000000..22df42123641
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift_locked.png
new file mode 100644
index 000000000000..30f3ead6cc5c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_feedback_space.png b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_space.png
new file mode 100644
index 000000000000..840da36d99ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_feedback_space.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num0_no_plus.png b/core/res/res/drawable-xhdpi/sym_keyboard_num0_no_plus.png
new file mode 100644
index 000000000000..c477cf125a2f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num0_no_plus.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num1.png b/core/res/res/drawable-xhdpi/sym_keyboard_num1.png
new file mode 100644
index 000000000000..decd5843838c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num2.png b/core/res/res/drawable-xhdpi/sym_keyboard_num2.png
new file mode 100644
index 000000000000..37948fbfcd3b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num3.png b/core/res/res/drawable-xhdpi/sym_keyboard_num3.png
new file mode 100644
index 000000000000..0e36ff2bf6cb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num4.png b/core/res/res/drawable-xhdpi/sym_keyboard_num4.png
new file mode 100644
index 000000000000..f469a4a8d44b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num5.png b/core/res/res/drawable-xhdpi/sym_keyboard_num5.png
new file mode 100644
index 000000000000..941f87736034
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num5.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num6.png b/core/res/res/drawable-xhdpi/sym_keyboard_num6.png
new file mode 100644
index 000000000000..eceec55334e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num6.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num7.png b/core/res/res/drawable-xhdpi/sym_keyboard_num7.png
new file mode 100644
index 000000000000..5b5d2055f22c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num7.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num8.png b/core/res/res/drawable-xhdpi/sym_keyboard_num8.png
new file mode 100644
index 000000000000..ea776ebf8d3f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num8.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_num9.png b/core/res/res/drawable-xhdpi/sym_keyboard_num9.png
new file mode 100644
index 000000000000..29047fb01021
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_num9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_ok.png b/core/res/res/drawable-xhdpi/sym_keyboard_ok.png
new file mode 100644
index 000000000000..08a5eefb176a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_ok.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_ok_dim.png b/core/res/res/drawable-xhdpi/sym_keyboard_ok_dim.png
new file mode 100644
index 000000000000..6a366188460a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_ok_dim.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_return.png b/core/res/res/drawable-xhdpi/sym_keyboard_return.png
new file mode 100644
index 000000000000..b1e1ce9e30fb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_return.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_shift.png b/core/res/res/drawable-xhdpi/sym_keyboard_shift.png
new file mode 100644
index 000000000000..6df40801c3f7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_shift_locked.png b/core/res/res/drawable-xhdpi/sym_keyboard_shift_locked.png
new file mode 100644
index 000000000000..470196ea75d3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_space.png b/core/res/res/drawable-xhdpi/sym_keyboard_space.png
new file mode 100644
index 000000000000..cce2845a5e34
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/sym_keyboard_space.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_bottom_holo.9.png b/core/res/res/drawable-xhdpi/tab_bottom_holo.9.png
new file mode 100644
index 000000000000..712dd22b5dd6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_bottom_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_focus.9.png b/core/res/res/drawable-xhdpi/tab_focus.9.png
new file mode 100644
index 000000000000..737d2c44a7c9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_focus_bar_left.9.png b/core/res/res/drawable-xhdpi/tab_focus_bar_left.9.png
new file mode 100644
index 000000000000..e879e37808e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_focus_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_focus_bar_right.9.png b/core/res/res/drawable-xhdpi/tab_focus_bar_right.9.png
new file mode 100644
index 000000000000..e879e37808e7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_focus_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_press.9.png b/core/res/res/drawable-xhdpi/tab_press.9.png
new file mode 100644
index 000000000000..78b43dbfac6d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_press_bar_left.9.png b/core/res/res/drawable-xhdpi/tab_press_bar_left.9.png
new file mode 100644
index 000000000000..c5f44f3ece38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_press_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_press_bar_right.9.png b/core/res/res/drawable-xhdpi/tab_press_bar_right.9.png
new file mode 100644
index 000000000000..c5f44f3ece38
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_press_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_pressed_holo.9.png b/core/res/res/drawable-xhdpi/tab_pressed_holo.9.png
new file mode 100644
index 000000000000..c2219757ecea
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected.9.png b/core/res/res/drawable-xhdpi/tab_selected.9.png
new file mode 100644
index 000000000000..fba5ee492140
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_bar_left.9.png b/core/res/res/drawable-xhdpi/tab_selected_bar_left.9.png
new file mode 100644
index 000000000000..53efbb4b7d87
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_bar_left_v4.9.png b/core/res/res/drawable-xhdpi/tab_selected_bar_left_v4.9.png
new file mode 100644
index 000000000000..eec4ddb60a3c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected_bar_left_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_bar_right.9.png b/core/res/res/drawable-xhdpi/tab_selected_bar_right.9.png
new file mode 100644
index 000000000000..53efbb4b7d87
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_bar_right_v4.9.png b/core/res/res/drawable-xhdpi/tab_selected_bar_right_v4.9.png
new file mode 100644
index 000000000000..eec4ddb60a3c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected_bar_right_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_v4.9.png b/core/res/res/drawable-xhdpi/tab_selected_v4.9.png
new file mode 100644
index 000000000000..e867f90df55b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_selected_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_unselected.9.png b/core/res/res/drawable-xhdpi/tab_unselected.9.png
new file mode 100644
index 000000000000..317170183a5a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_unselected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_unselected_v4.9.png b/core/res/res/drawable-xhdpi/tab_unselected_v4.9.png
new file mode 100644
index 000000000000..60b980737cce
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_unselected_v4.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png b/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png
new file mode 100644
index 000000000000..e7bb0d44bd58
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png b/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png
new file mode 100644
index 000000000000..f429785dc0f4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-xhdpi/text_edit_side_paste_window.9.png
new file mode 100644
index 000000000000..ac10b3e91da4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_edit_side_paste_window.9.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
new file mode 100644
index 000000000000..6a105609e6bb
--- /dev/null
+++ 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
new file mode 100644
index 000000000000..71aaa85adf4c
--- /dev/null
+++ 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
new file mode 100644
index 000000000000..5339adc55fff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_default.9.png b/core/res/res/drawable-xhdpi/textfield_default.9.png
new file mode 100644
index 000000000000..20b1a098451a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_disabled.9.png b/core/res/res/drawable-xhdpi/textfield_disabled.9.png
new file mode 100644
index 000000000000..794dce806376
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_disabled_selected.9.png b/core/res/res/drawable-xhdpi/textfield_disabled_selected.9.png
new file mode 100644
index 000000000000..b708d8241894
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/textfield_focused_holo_dark.9.png
new file mode 100644
index 000000000000..3ed03f32cdbe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/textfield_focused_holo_light.9.png
new file mode 100644
index 000000000000..3ed03f32cdbe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_default.9.png b/core/res/res/drawable-xhdpi/textfield_search_default.9.png
new file mode 100644
index 000000000000..0ed71f7e0022
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_empty_default.9.png b/core/res/res/drawable-xhdpi/textfield_search_empty_default.9.png
new file mode 100644
index 000000000000..290dd38cc515
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_empty_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.png b/core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.png
new file mode 100644
index 000000000000..bf20153b7bbd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.png b/core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.png
new file mode 100644
index 000000000000..18406a39bb1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_pressed.9.png b/core/res/res/drawable-xhdpi/textfield_search_pressed.9.png
new file mode 100644
index 000000000000..0913c23ada57
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_selected.9.png b/core/res/res/drawable-xhdpi/textfield_search_selected.9.png
new file mode 100644
index 000000000000..7ba4d61f5543
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_selected.9.png b/core/res/res/drawable-xhdpi/textfield_selected.9.png
new file mode 100644
index 000000000000..275d6283c23b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/title_bar_medium.9.png b/core/res/res/drawable-xhdpi/title_bar_medium.9.png
new file mode 100644
index 000000000000..4ef531c22a4d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/title_bar_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/title_bar_portrait.9.png b/core/res/res/drawable-xhdpi/title_bar_portrait.9.png
new file mode 100644
index 000000000000..eb607c7cb995
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/title_bar_portrait.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/title_bar_shadow.9.png b/core/res/res/drawable-xhdpi/title_bar_shadow.9.png
new file mode 100644
index 000000000000..45b545602d56
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/title_bar_shadow.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/title_bar_tall.9.png b/core/res/res/drawable-xhdpi/title_bar_tall.9.png
new file mode 100644
index 000000000000..4beb1d7fee46
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/title_bar_tall.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/unknown_image.png b/core/res/res/drawable-xhdpi/unknown_image.png
new file mode 100644
index 000000000000..0a9f643daeb1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/unknown_image.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/usb_android.png b/core/res/res/drawable-xhdpi/usb_android.png
new file mode 100644
index 000000000000..41fc29d18c54
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/usb_android.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/usb_android_connected.png b/core/res/res/drawable-xhdpi/usb_android_connected.png
new file mode 100644
index 000000000000..71f2d4451815
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/usb_android_connected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/vpn_connected.png b/core/res/res/drawable-xhdpi/vpn_connected.png
new file mode 100644
index 000000000000..5d37ffc47ff9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/vpn_disconnected.png b/core/res/res/drawable-xhdpi/vpn_disconnected.png
new file mode 100644
index 000000000000..dd9ba929ad3d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/zoom_plate.9.png b/core/res/res/drawable-xhdpi/zoom_plate.9.png
new file mode 100644
index 000000000000..5229b5fa6ff3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/zoom_plate.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
index 5b67d7189e34..08f645389f67 100644
--- a/core/res/res/layout-sw600dp/preference_list_content.xml
+++ b/core/res/res/layout-sw600dp/preference_list_content.xml
@@ -44,8 +44,11 @@
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
- android:paddingTop="16dp"
- android:paddingBottom="16dp"
+ 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"
diff --git a/core/res/res/layout/action_bar_title_item.xml b/core/res/res/layout/action_bar_title_item.xml
index e803b2613a73..08284023e1fc 100644
--- a/core/res/res/layout/action_bar_title_item.xml
+++ b/core/res/res/layout/action_bar_title_item.xml
@@ -16,10 +16,10 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingRight="16dip"
- android:background="?android:attr/selectableItemBackground"
+ android:background="?android:attr/actionBarItemBackground"
android:enabled="false">
<ImageView android:id="@android:id/up"
diff --git a/core/res/res/layout/activity_chooser_view.xml b/core/res/res/layout/activity_chooser_view.xml
index 5d82a97cd786..82e1f8305f84 100644
--- a/core/res/res/layout/activity_chooser_view.xml
+++ b/core/res/res/layout/activity_chooser_view.xml
@@ -22,7 +22,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
- style="?android:attr/actionButtonStyle">
+ style="?android:attr/actionButtonStyle"
+ android:padding="0dip">
<FrameLayout
android:id="@+id/default_activity_button"
@@ -31,7 +32,7 @@
android:layout_gravity="center"
android:focusable="true"
android:addStatesFromChildren="true"
- android:background="?android:attr/selectableItemBackground">
+ android:background="?android:attr/actionBarItemBackground">
<ImageView android:id="@+id/image"
android:layout_width="32dip"
@@ -53,7 +54,7 @@
android:layout_gravity="center"
android:focusable="true"
android:addStatesFromChildren="true"
- android:background="?android:attr/selectableItemBackground">
+ android:background="?android:attr/actionBarItemBackground">
<ImageView android:id="@+id/image"
android:layout_width="32dip"
diff --git a/core/res/res/layout/activity_list_item.xml b/core/res/res/layout/activity_list_item.xml
index 25d95fd74e5d..7022fe1858e3 100644
--- a/core/res/res/layout/activity_list_item.xml
+++ b/core/res/res/layout/activity_list_item.xml
@@ -22,8 +22,8 @@
android:layout_height="wrap_content"
android:paddingTop="1dip"
android:paddingBottom="1dip"
- android:paddingLeft="6dip"
- android:paddingRight="6dip">
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip">
<ImageView android:id="@+id/icon"
android:layout_width="24dip"
diff --git a/core/res/res/layout/breadcrumbs_in_fragment.xml b/core/res/res/layout/breadcrumbs_in_fragment.xml
index 98fffb7c429e..9c1261813cb7 100644
--- a/core/res/res/layout/breadcrumbs_in_fragment.xml
+++ b/core/res/res/layout/breadcrumbs_in_fragment.xml
@@ -13,10 +13,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<!-- This layout disables breadcrumbs in the fragment area and causes PreferenceActivity to
put the breadcrumbs in the action bar. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_height="@dimen/preference_fragment_padding_side"
- android:layout_width="match_parent">
-</LinearLayout> \ No newline at end of file
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:visibility="gone" />
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
index 4c44049c1de3..bc86ab7c1f6f 100644
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_password_landscape.xml
@@ -133,13 +133,14 @@
<!-- Column 2 - password entry field and PIN keyboard -->
<LinearLayout
- android:orientation="vertical"
+ android:orientation="horizontal"
android:layout_width="270dip"
android:layout_gravity="center_vertical">
<EditText android:id="@+id/passwordEntry"
android:layout_height="wrap_content"
- android:layout_width="match_parent"
+ android:layout_width="0dip"
+ android:layout_weight="1"
android:gravity="center"
android:singleLine="true"
android:textStyle="normal"
@@ -153,6 +154,17 @@
android:suggestionsEnabled="false"
/>
+ <ImageView android:id="@+id/switch_ime_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_lockscreen_ime"
+ android:clickable="true"
+ android:padding="8dip"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground"
+ android:visibility="gone"
+ />
+
</LinearLayout>
<!-- Numeric keyboard -->
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index 1d0ea54791e9..994c4399d847 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -95,22 +95,39 @@
/>
<!-- Password entry field -->
- <EditText android:id="@+id/passwordEntry"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
+ <LinearLayout
android:layout_gravity="center_vertical|fill_horizontal"
- android:gravity="center_horizontal"
- android:singleLine="true"
- android:textStyle="normal"
- android:inputType="textPassword"
- android:textSize="36sp"
+ android:orientation="horizontal"
android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:background="@drawable/lockscreen_password_field_dark"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="#ffffffff"
- android:imeOptions="actionDone"
- android:suggestionsEnabled="false"/>
+ android:layout_marginRight="16dip">
+
+ <EditText android:id="@+id/passwordEntry"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="center_horizontal"
+ android:singleLine="true"
+ android:textStyle="normal"
+ android:inputType="textPassword"
+ android:textSize="36sp"
+ android:background="@drawable/lockscreen_password_field_dark"
+ 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"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_lockscreen_ime"
+ android:clickable="true"
+ android:padding="8dip"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground"
+ android:visibility="gone"
+ />
+
+ </LinearLayout>
<!-- Numeric keyboard -->
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
diff --git a/core/res/res/layout/list_menu_item_layout.xml b/core/res/res/layout/list_menu_item_layout.xml
index aaff4c789a81..93bd76b732de 100644
--- a/core/res/res/layout/list_menu_item_layout.xml
+++ b/core/res/res/layout/list_menu_item_layout.xml
@@ -26,8 +26,8 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="6dip"
- android:layout_marginRight="6dip"
+ android:layout_marginLeft="16dip"
+ android:layout_marginRight="16dip"
android:duplicateParentState="true">
<TextView
@@ -36,7 +36,7 @@
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:singleLine="true"
android:duplicateParentState="true"
android:ellipsize="marquee"
diff --git a/core/res/res/layout/preference_list_content.xml b/core/res/res/layout/preference_list_content.xml
index 4e7981a5bfae..62181b54ae69 100644
--- a/core/res/res/layout/preference_list_content.xml
+++ b/core/res/res/layout/preference_list_content.xml
@@ -44,8 +44,11 @@
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"
diff --git a/core/res/res/layout/preference_list_fragment.xml b/core/res/res/layout/preference_list_fragment.xml
index 315f708cd763..fdef4fc51a41 100644
--- a/core/res/res/layout/preference_list_fragment.xml
+++ b/core/res/res/layout/preference_list_fragment.xml
@@ -32,11 +32,19 @@
android:paddingBottom="@dimen/preference_fragment_padding_bottom"
android:paddingLeft="@dimen/preference_fragment_padding_side"
android:paddingRight="@dimen/preference_fragment_padding_side"
+ android:scrollbarStyle="@integer/preference_fragment_scrollbarStyle"
android:clipToPadding="false"
android:drawSelectorOnTop="false"
android:cacheColorHint="@android:color/transparent"
android:scrollbarAlwaysDrawVerticalTrack="true" />
+ <TextView android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:padding="@dimen/preference_fragment_padding_side"
+ android:gravity="center"
+ android:visibility="gone" />
+
<RelativeLayout android:id="@+id/button_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml
index 673c96c62364..c81c716b04b6 100644
--- a/core/res/res/layout/search_bar.xml
+++ b/core/res/res/layout/search_bar.xml
@@ -38,7 +38,7 @@
<LinearLayout
android:id="@id/closeButton"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="48dp"
android:orientation="horizontal"
android:focusable="true"
android:background="?android:attr/selectableItemBackground">
@@ -51,9 +51,10 @@
<ImageView
android:id="@+id/search_app_icon"
- android:layout_height="48dip"
- android:layout_width="48dip"
+ android:layout_height="32dip"
+ android:layout_width="32dip"
android:layout_gravity="center_vertical"
+ android:scaleType="centerInside"
/>
</LinearLayout>
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index 6b70d8dc42f7..f699a461e317 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -22,8 +22,6 @@
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
android:orientation="horizontal"
>
@@ -42,12 +40,12 @@
<ImageView
android:id="@+id/search_button"
- android:layout_height="wrap_content"
+ style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
+ android:layout_height="match_parent"
android:layout_gravity="center_vertical"
- android:background="?android:attr/selectableItemBackground"
android:src="?android:attr/searchViewSearchIcon"
- style="?android:attr/actionButtonStyle"
+ android:contentDescription="@string/searchview_description_search"
/>
<LinearLayout
@@ -58,6 +56,8 @@
android:layout_gravity="center_vertical"
android:layout_marginTop="4dip"
android:layout_marginBottom="4dip"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
android:orientation="horizontal">
<ImageView
@@ -99,11 +99,12 @@
android:dropDownAnchor="@id/search_edit_frame"
android:dropDownVerticalOffset="0dip"
android:dropDownHorizontalOffset="0dip"
+ android:contentDescription="@string/searchview_description_query"
/>
<ImageView
android:id="@+id/search_close_btn"
- android:layout_width="@dimen/dropdownitem_icon_width"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="8dip"
android:paddingRight="8dip"
@@ -111,6 +112,7 @@
android:background="?android:attr/selectableItemBackground"
android:src="?android:attr/searchViewCloseIcon"
android:focusable="true"
+ android:contentDescription="@string/searchview_description_clear"
/>
</LinearLayout>
@@ -133,6 +135,7 @@
android:src="?android:attr/searchViewGoIcon"
android:visibility="gone"
android:focusable="true"
+ android:contentDescription="@string/searchview_description_submit"
/>
<ImageView
@@ -146,6 +149,7 @@
android:background="?android:attr/selectableItemBackground"
android:visibility="gone"
android:focusable="true"
+ android:contentDescription="@string/searchview_description_voice"
/>
</LinearLayout>
</LinearLayout>
diff --git a/core/res/res/layout/select_dialog_item_holo.xml b/core/res/res/layout/select_dialog_item_holo.xml
index 0c700cfd1c97..3d19c06a147b 100644
--- a/core/res/res/layout/select_dialog_item_holo.xml
+++ b/core/res/res/layout/select_dialog_item_holo.xml
@@ -27,7 +27,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="?android:attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingLeft="16dip"
diff --git a/core/res/res/layout/simple_expandable_list_item_1.xml b/core/res/res/layout/simple_expandable_list_item_1.xml
index dc3e58e7f3a4..df4324b17f4a 100644
--- a/core/res/res/layout/simple_expandable_list_item_1.xml
+++ b/core/res/res/layout/simple_expandable_list_item_1.xml
@@ -19,6 +19,6 @@
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
/>
diff --git a/core/res/res/layout/simple_expandable_list_item_2.xml b/core/res/res/layout/simple_expandable_list_item_2.xml
index b48b444e66d8..c0935fa282e5 100644
--- a/core/res/res/layout/simple_expandable_list_item_2.xml
+++ b/core/res/res/layout/simple_expandable_list_item_2.xml
@@ -27,7 +27,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
/>
<TextView android:id="@android:id/text2"
diff --git a/core/res/res/layout/simple_list_item_1.xml b/core/res/res/layout/simple_list_item_1.xml
index c9c77a5f9c11..252e006a307f 100644
--- a/core/res/res/layout/simple_list_item_1.xml
+++ b/core/res/res/layout/simple_list_item_1.xml
@@ -18,8 +18,9 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
- android:paddingLeft="6dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
android:minHeight="?android:attr/listPreferredItemHeight"
/>
diff --git a/core/res/res/layout/simple_list_item_2.xml b/core/res/res/layout/simple_list_item_2.xml
index c87922cef9b2..9b6c62a707fe 100644
--- a/core/res/res/layout/simple_list_item_2.xml
+++ b/core/res/res/layout/simple_list_item_2.xml
@@ -24,9 +24,9 @@
<TextView android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="6dip"
- android:layout_marginTop="6dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:layout_marginLeft="8dip"
+ android:layout_marginTop="8dip"
+ android:textAppearance="?android:attr/textAppearanceListItem"
/>
<TextView android:id="@android:id/text2"
diff --git a/core/res/res/layout/simple_list_item_activated_1.xml b/core/res/res/layout/simple_list_item_activated_1.xml
index 8416df2632e5..d60f93b46a86 100644
--- a/core/res/res/layout/simple_list_item_activated_1.xml
+++ b/core/res/res/layout/simple_list_item_activated_1.xml
@@ -18,7 +18,7 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeight"
diff --git a/core/res/res/layout/simple_list_item_activated_2.xml b/core/res/res/layout/simple_list_item_activated_2.xml
index 2ffbf0268233..5be5c9220547 100644
--- a/core/res/res/layout/simple_list_item_activated_2.xml
+++ b/core/res/res/layout/simple_list_item_activated_2.xml
@@ -27,8 +27,8 @@
<TextView android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="6dip"
- android:layout_marginTop="6dip"
+ android:layout_marginLeft="8dip"
+ android:layout_marginTop="8dip"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
diff --git a/core/res/res/layout/simple_list_item_checked.xml b/core/res/res/layout/simple_list_item_checked.xml
index 5f99044e58fd..79d3a18464e1 100644
--- a/core/res/res/layout/simple_list_item_checked.xml
+++ b/core/res/res/layout/simple_list_item_checked.xml
@@ -18,9 +18,9 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
android:checkMark="?android:attr/textCheckMark"
- android:paddingLeft="6dip"
- android:paddingRight="6dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
/>
diff --git a/core/res/res/layout/simple_list_item_multiple_choice.xml b/core/res/res/layout/simple_list_item_multiple_choice.xml
index 05c66f31510a..03054278bd94 100644
--- a/core/res/res/layout/simple_list_item_multiple_choice.xml
+++ b/core/res/res/layout/simple_list_item_multiple_choice.xml
@@ -18,9 +18,9 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
- android:paddingLeft="6dip"
- android:paddingRight="6dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
/>
diff --git a/core/res/res/layout/simple_list_item_single_choice.xml b/core/res/res/layout/simple_list_item_single_choice.xml
index 27afd1d6f4b5..ac4a4a8cfa35 100644
--- a/core/res/res/layout/simple_list_item_single_choice.xml
+++ b/core/res/res/layout/simple_list_item_single_choice.xml
@@ -18,9 +18,9 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
- android:paddingLeft="6dip"
- android:paddingRight="6dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
/>
diff --git a/core/res/res/layout/simple_selectable_list_item.xml b/core/res/res/layout/simple_selectable_list_item.xml
index 518bcd0fcbd4..6ce22d611d92 100644
--- a/core/res/res/layout/simple_selectable_list_item.xml
+++ b/core/res/res/layout/simple_selectable_list_item.xml
@@ -18,9 +18,9 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceListItem"
android:gravity="center_vertical"
android:background="?android:attr/listChoiceBackgroundIndicator"
- android:paddingLeft="6dip"
- android:paddingRight="9dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
/>
diff --git a/core/res/res/layout/tab_indicator_holo.xml b/core/res/res/layout/tab_indicator_holo.xml
index d5fc3f41c9bc..4410b206b461 100644
--- a/core/res/res/layout/tab_indicator_holo.xml
+++ b/core/res/res/layout/tab_indicator_holo.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
@@ -14,27 +14,23 @@
limitations under the License.
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="58dp"
- android:layout_weight="0"
- android:paddingBottom="8dp"
- android:background="@android:drawable/tab_indicator_holo">
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_height="?android:attr/actionBarSize"
+ android:orientation="horizontal"
+ style="@android:style/Widget.Holo.Tab">
- <ImageView android:id="@+id/icon"
+ <ImageView
+ android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingLeft="3dp"
- android:paddingRight="3dp"
- android:layout_centerHorizontal="true" />
+ android:layout_gravity="center_vertical"
+ android:visibility="gone" />
- <TextView android:id="@+id/title"
+ <TextView
+ android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:paddingLeft="3dp"
- android:paddingRight="3dp"
- style="?android:attr/tabWidgetStyle" />
-
-</RelativeLayout>
+ android:layout_gravity="center_vertical"
+ style="@android:style/Widget.Holo.TabText" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/tab_indicator_holo_large.xml b/core/res/res/layout/tab_indicator_holo_large.xml
deleted file mode 100644
index bdd8d110f217..000000000000
--- a/core/res/res/layout/tab_indicator_holo_large.xml
+++ /dev/null
@@ -1,46 +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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="56dip"
- android:layout_weight="0"
- android:layout_marginLeft="0dip"
- android:layout_marginRight="0dip"
- android:background="@android:drawable/tab_indicator_holo">
-
- <View android:id="@+id/tab_indicator_left_spacer"
- android:layout_width="16dip"
- android:layout_height="0dip" />
-
- <ImageView android:id="@+id/icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:visibility="gone"
- android:layout_toRightOf="@id/tab_indicator_left_spacer"
- android:paddingRight="8dip" />
-
- <TextView android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_toRightOf="@id/icon"
- android:paddingLeft="0dip"
- android:paddingRight="16dip"
- style="?android:attr/tabWidgetStyle" />
-
-</RelativeLayout>
diff --git a/core/res/res/layout/volume_adjust.xml b/core/res/res/layout/volume_adjust.xml
index 7303003f00b7..ea4e1f9a6036 100644
--- a/core/res/res/layout/volume_adjust.xml
+++ b/core/res/res/layout/volume_adjust.xml
@@ -18,6 +18,7 @@
android:layout_width="480dp"
android:layout_height="wrap_content">
<LinearLayout
+ android:id="@+id/visible_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 11369b2f83fc..d8811494976d 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -155,8 +155,7 @@
<string name="fcError" msgid="3327560126588500777">"Verbindingsprobleem of ongeldige kenmerk-kode."</string>
<!-- no translation found for httpErrorOk (1191919378083472204) -->
<skip />
- <!-- no translation found for httpError (6603022914760066338) -->
- <skip />
+ <string name="httpError" msgid="6603022914760066338">"\'n Netwerkfout het voorgekom."</string>
<!-- no translation found for httpErrorLookup (4517085806977851374) -->
<skip />
<!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
@@ -167,7 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (5047872902739125260) -->
+ <!-- no translation found for httpErrorIO (4270874999047767599) -->
<skip />
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
@@ -292,6 +291,10 @@
<!-- 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 />
<!-- 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>
@@ -389,6 +392,8 @@
<skip />
<!-- no translation found for permdesc_bindTextService (172508880651909350) -->
<skip />
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind aan \'n VPN-diens"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Laat die houer toe om aan die topvlak-koppelvlak van \'n VPN-diens te bind. Behoort nooit vir gewone programme nodig te wees nie."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind aan \'n muurpapier"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Stel die houer toe om aan die topvlak-koppelvlak van \'n muurpapier te bind. Behoort vir gewone programme nooit nodig te wees nie."</string>
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
@@ -467,19 +472,19 @@
<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 (2211941946684590103) -->
+ <!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
- <!-- no translation found for permdesc_readProfile (4732942280141331352) -->
+ <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
<skip />
- <!-- no translation found for permlab_writeProfile (6561668046361989220) -->
+ <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
<skip />
- <!-- no translation found for permdesc_writeProfile (8040643023682531996) -->
+ <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
- <string name="permlab_readCalendar" msgid="6898987798303840534">"lees kalendergebeure"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Laat \'n program toe om al die kalendergebeurtenisse te lees wat op jou tablet gestoor is. Kwaadwillige programme kan dit gebruik om jou kalendergebeurtenisse na ander mense te stuur."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Laat \'n program toe om al die kalendergebeurtenisse te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kalendergebeurtenisse na ander mense te stuur."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"wysig of voeg kalendergebeurtenisse by en stuur e-pos aan gaste"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Laat \'n program toe om gebeurtenisse op jou kalender te wysig of by te voeg, wat \'n e-pos na gaste kan stuur. Kwaadwillige programme kan dit gebruik om jou kalendergebeurtenisse uit te vee of te wysig of e-pos aan gaste te 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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"voeg by of verander kalenderafsprake en stuur \'n e-pos aan gaste sonder eienaars se medewete"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Laat \'n program toe om kalenderafsprake as die eienaar van die kalender te stuur en om afsprake wat jy op jou toestel kan verander, insluitend dié van vriende of kollegas, by te voeg, te verwyder of te verander. \'n Kwaadwillige program met dié toestemming kan strooipos stuur wat lyk asof dit gestuur is deur kalendereienaars, gebeure sonder die eienaars se medewete verander of vals afsprake byvoeg."</string>
<!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
<skip />
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Skep skynligging-bronne vir die toets. Kwaadwillige programme kan dit gebruik om die ligging en/of status te oorheers wat deur regteligging-bronne soos GPS of netwerkverskaffers opgehaal word."</string>
@@ -616,9 +621,9 @@
<!-- 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 (7823599210086622545) -->
+ <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
<skip />
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Laat \'n program toe om die APN-instellings te wysig, soos die instaanbediener en poort van enige APN."</string>
+ <!-- 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>
<!-- 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>
@@ -962,12 +967,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Laat \'n program toe om die blaaier se geskiedenis of gestoorde boekmerke op die foon te wysig. Kwaadwillige programme kan dit gebruik om jou blaaier se data uit te vee of dit te wysig."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"stel alarm in wekker"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Laat die program toe om \'n alarm te stel in \'n geïnstalleerde wekkerprogram. Sommige wekkerprogramme sal dalk nie hierdie kenmerk implementeer nie."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"voeg stemboodskap by"</string>
+ <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 />
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -992,6 +1003,16 @@
<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 />
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string>
@@ -1113,9 +1134,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Niks om te plak nie"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Vervang"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Kies teks..."</string>
@@ -1152,22 +1171,17 @@
<skip />
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
- <!-- no translation found for aerr_title (653922989522758100) -->
- <skip />
- <string name="aerr_application" msgid="4683614104336409186">"Die program <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) het onverwags gestop. Probeer asseblief weer."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Die proses <xliff:g id="PROCESS">%1$s</xliff:g>het onverwags gestop. Probeer asseblief weer."</string>
- <!-- no translation found for anr_title (3100070910664756057) -->
- <skip />
- <!-- no translation found for anr_activity_application (3538242413112507636) -->
- <skip />
- <!-- no translation found for anr_activity_process (5420826626009561014) -->
- <skip />
- <!-- no translation found for anr_application_process (4185842666452210193) -->
- <skip />
- <!-- no translation found for anr_process (1246866008169975783) -->
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <!-- no translation found for aerr_application (932628488013092776) -->
<skip />
- <!-- no translation found for force_close (3653416315450806396) -->
+ <!-- no translation found for aerr_process (4507058997035697579) -->
<skip />
+ <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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> reageer nie. Wil jy dit toemaak?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> reageer nie. "\n\n" Wil jy dit toemaak?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Verslag"</string>
<!-- no translation found for wait (7147118217226317732) -->
<skip />
@@ -1205,18 +1219,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Kennisgewing-volume"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1234,15 +1241,13 @@
<item quantity="one" msgid="1634101450343277345">"Oop Wi-Fi-netwerke beskikbaar"</item>
<item quantity="other" msgid="7915895323644292768">"Oop Wi-Fi-netwerke beskikbaar"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kon nie aan Wi-Fikoppel nie"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"het \'n swak internetverbinding."</string>
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
+ <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
<skip />
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
@@ -1262,7 +1267,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -1303,7 +1308,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-bewerking het misluk"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-bewerking het misluk"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1413,8 +1418,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Kon nie USB-berging uitvee nie."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Kon nie SD-kaart uitvee nie."</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="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>
@@ -1441,22 +1446,14 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"gekontroleer"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"nie gekontroleer nie"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"gekies"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"nie gekies nie"</string>
+ <string name="switch_on" msgid="551417728476977311">"aan"</string>
+ <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>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1481,15 +1478,15 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (2182247539226163759) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
@@ -1527,4 +1524,6 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 32fa00f16d71..651f7c65cef2 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -155,8 +155,7 @@
<string name="fcError" msgid="3327560126588500777">"የተያያዥ ችግር ወይም ትክከል ያልሆነኮድ ባህሪ።"</string>
<!-- no translation found for httpErrorOk (1191919378083472204) -->
<skip />
- <!-- no translation found for httpError (6603022914760066338) -->
- <skip />
+ <string name="httpError" msgid="6603022914760066338">"የአውታረ መረብ ስህተት ተከስቷል።"</string>
<!-- no translation found for httpErrorLookup (4517085806977851374) -->
<skip />
<!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
@@ -167,7 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (5047872902739125260) -->
+ <!-- no translation found for httpErrorIO (4270874999047767599) -->
<skip />
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
@@ -292,6 +291,10 @@
<!-- 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 />
<!-- no translation found for permlab_readSms (4085333708122372256) -->
<skip />
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"ትግበራ በጡባዊዎ ወይም SIM ካርድዎ ላይ SMS መልዕክቶችን ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ሚስጥራዊ መልዕክቶችዎን ሊያነቡ ይችላሉ።"</string>
@@ -389,6 +392,8 @@
<skip />
<!-- no translation found for permdesc_bindTextService (172508880651909350) -->
<skip />
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"ለVPN አገልግሎት ተገዛ"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"በልጣፍ ጠርዝ"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
@@ -467,19 +472,19 @@
<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 (2211941946684590103) -->
+ <!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
- <!-- no translation found for permdesc_readProfile (4732942280141331352) -->
+ <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
<skip />
- <!-- no translation found for permlab_writeProfile (6561668046361989220) -->
+ <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
<skip />
- <!-- no translation found for permdesc_writeProfile (8040643023682531996) -->
+ <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
- <string name="permlab_readCalendar" msgid="6898987798303840534">"የቀን መቁጠሪያ ክስተቶችን አንበብ"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"ትግበራ በጡባዊዎ ላይ የተከማቹትንሁሉ ንም የቀን መቁጠሪያ ክስተቶች ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለሌላ ሰው ለመላክ ይህን መጠቀም ይችላሉ።"</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"ትግበራ በስልክዎ ላይ የተከማቹትን የቀን መቁጠሪያ ክስተቶች ሁሉ ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለሌላ ሰው ለመላክ ይህን መጠቀም ይችላሉ።"</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"አክል ወይም የቀን መቁጠሪያ ክስተቶችን ቀይር እና ለ እንግዶች ኢሜይል ላክ"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"ትግበራ በቀን መቁጠሪያዎ ላይ ያለን ክስተት፣ ለተጋባዦች ኢሜይል ሊልክ ይችላል፣ ለማከል እና ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ይህን በመጠቀም የካላንደርዎን ክስተቶች ለማጥፋት ወይም ለመቀየር ይጠቀማሉ ወይም ለተጋባዦች ኢመይል ይልካሉ።"</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>
<!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
<skip />
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"ለሙከራ አስቂኝ ሥፍራፍጠር። ተንኮል አዘል ትግበራዎች ሥፍራውን ለማገድ እና/ወይም በGPS ወይም የአውታረ መረብ አቅራቢዎች የእውነተኛውን ሥፍራ ሁኔታ ይዘው ከተመለሱ መጠቀም ይችላሉ።"</string>
@@ -616,9 +621,9 @@
<!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
<skip />
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"የአውታረመረብ ሶኬቶችን ለመፍጠር ትግበራይፈቅዳል።"</string>
- <!-- no translation found for permlab_writeApnSettings (7823599210086622545) -->
+ <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
<skip />
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"ትግበራ እንደAPN ማንኛውም ወደቦች እና የእጅ አዙርለቀይር የAPN ቅንብሮችን ይፈቅዳል።"</string>
+ <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"ትግበራ እንደAPN ማንኛውም ወደቦች እና የእጅ አዙርለቀይር የAPN ቅንብሮችን ይፈቅዳል።"</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"ትግበራ የአውታረ መረብ ተያያዥነት ሁኔታ ለመለወጥ ይፈቅዳል።"</string>
@@ -962,12 +967,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"ትግበራ በስልክዎ ላይ የተከማቹትንታሪኮች እና ዕልባቶች ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለማጥፋት ወይም ለመቀየር ይህን መጠቀም ይችላሉ።"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"በማንቂያ ሰዓት ውስጥ ማንቂያ አዘጋጅ"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"ትግበራ በተጫነ የማንቂያ ሰዓት ትግበራ ማንቂያ ለማዘጋጀትይፈቅዳል። አንዳንድ የማንቂያ ሰዓት ትግበራዎች ይህን ገፅታ ላይተገብሩ ይችላሉ።"</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"የድምፅ መልዕክት አክል"</string>
+ <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 />
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -992,6 +1003,16 @@
<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 />
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string>
@@ -1113,9 +1134,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"ምንም የሚለጠፍ የለም"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"ተካ"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
@@ -1152,22 +1171,17 @@
<skip />
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
- <!-- no translation found for aerr_title (653922989522758100) -->
- <skip />
- <string name="aerr_application" msgid="4683614104336409186">"የትግበራው <xliff:g id="APPLICATION">%1$s</xliff:g>( ሂደት<xliff:g id="PROCESS">%2$s</xliff:g>) ሳይጠበቅ ቆሟል። እባክዎ እንደገና ይሞክሩ።"</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> ሂደቱ ሳይጠበቅ ቆምዋል። እባክዎ እንደገና ይሞክሩ።"</string>
- <!-- no translation found for anr_title (3100070910664756057) -->
- <skip />
- <!-- no translation found for anr_activity_application (3538242413112507636) -->
- <skip />
- <!-- no translation found for anr_activity_process (5420826626009561014) -->
- <skip />
- <!-- no translation found for anr_application_process (4185842666452210193) -->
- <skip />
- <!-- no translation found for anr_process (1246866008169975783) -->
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <!-- no translation found for aerr_application (932628488013092776) -->
<skip />
- <!-- no translation found for force_close (3653416315450806396) -->
+ <!-- no translation found for aerr_process (4507058997035697579) -->
<skip />
+ <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="force_close" msgid="8346072094521265605">"ይሁን"</string>
<string name="report" msgid="4060218260984795706">"ሪፖርት"</string>
<!-- no translation found for wait (7147118217226317732) -->
<skip />
@@ -1205,18 +1219,11 @@
<string name="volume_notification" msgid="2422265656744276715">"ማሳወቂያ ክፍልፍል"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1234,15 +1241,13 @@
<item quantity="one" msgid="1634101450343277345">"አውታረ መረብ ሲኖር Wi-Fi ክፈት"</item>
<item quantity="other" msgid="7915895323644292768">"አውታረ መረቦች ሲኖሩ Wi-Fi ክፈት"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ወደ Wi-Fi ለማያያዝ አልተቻለም"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ደካማ የበይነ መረብ ተያያዥ አለው።"</string>
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
+ <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
<skip />
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
@@ -1262,7 +1267,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -1303,7 +1308,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB ክንውን አልተሳካም"</string>
+ <!-- outdated translation 8048999973837339174 --> <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 />
@@ -1413,8 +1418,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB ማከማቻ ለማጥፋት ተስኗል።"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"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="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>
@@ -1441,22 +1446,14 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1481,15 +1478,15 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (2182247539226163759) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
@@ -1527,4 +1524,6 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 5b72e489b5a3..52f51af47728 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"اكتمل كود الميزة."</string>
<string name="fcError" msgid="3327560126588500777">"حدثت مشكلة بالاتصال أو أن كود الميزة غير صحيح."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"موافق"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"تحتوي صفحة الويب على خطأ."</string>
+ <string name="httpError" msgid="6603022914760066338">"حدث خطأ في الشبكة."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"تعذر العثور على عنوان URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"نظام مصادقة الموقع غير معتمد."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"لم تتم المصادقة بنجاح."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"لم تتم المصادقة عبر الخادم الوكيل بنجاح."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"لم ينجح الاتصال بالخادم."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"أخفق الخادم في الاتصال. الرجاء المحاولة مرة أخرى لاحقًا."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الشبكة الظاهرية الخاصة (Vpn). لن يلزم تقديمه على الإطلاق مع التطبيقات العادية."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"الالتزام بخلفية ما"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للخلفية. لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"الالتزام بخدمة أداة"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"قراءة بيانات الملف الشخصي"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"للسماح لتطبيق بقراءة جميع معلوماتك الشخصية في الملف الشخصي. ويمكن أن تستخدم التطبيقات الضارة هذه الإمكانية للتعرف على هويتك وإرسال معلوماتك الشخصية إلى أشخاص آخرين."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"كتابة بيانات الملف الشخصي"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"للسماح لتطبيق بتعديل معلوماتك الشخصية في الملف الشخصي. يمكن للتطبيقات الضارة استخدام هذه الإمكانية لمسح أو تعديل بيانات ملفك الشخصي."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"قراءة أحداث التقويم"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"للسماح لتطبيق ما بقراءة كل أحداث التقويم المخزنة على الجهاز اللوحي. ويمكن للتطبيقات الضارة استخدام ذلك لإرسال أحداث التقويم إلى أشخاص آخرين."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"للسماح لتطبيق ما بقراءة جميع أحداث التقويم المخزّنة في هاتفك. يمكن أن تستخدم التطبيقات الضارة هذا لإرسال أحداث تقويمك إلى أشخاص آخرين."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"إضافة أحداث تقويم أو تعديلها وإرسال رسالة إلكترونية إلى الضيوف"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"للسماح لتطبيق ما بإضافة أحداث أو تغييرها في تقويمك، مما قد يؤدي إلى إرسال رسائل إلكترونية إلى الضيوف. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح أحداث تقويمك أو تعديلها أو لإرسال رسائل إلكترونية إلى الضيوف."</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_accessMockLocation" msgid="8688334974036823330">"مصادر مواقع وهمية للاختبار"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"إنشاء مصادر مواقع وهمية للاختبار. قد تستخدم التطبيقات الضارة هذا لتجاوز الموقع و/أو الحالة المُرجَعة بواسطة مصادر مواقع حقيقية مثل موفري خدمة الشبكة أو GPS."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"الدخول إلى المزيد من أوامر موفر الموقع"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"للسماح لتطبيق ما بعرض حالة جميع الشبكات."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"دخول كامل إلى الإنترنت"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"للسماح لتطبيق ما بإنشاء مقابس للشبكة."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"كتابة إعدادات اسم نقطة الدخول"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"للسماح لتطبيق ما بتعديل إعدادات APN، مثل الخادم الوكيل ومنفذ أي APN."</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_changeNetworkState" msgid="958884291454327309">"تغيير اتصال الشبكة"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"للسماح لتطبيق ما بتغيير حالة اتصال الشبكة."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"تغيير الاتصال المقيد"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"للسماح لتطبيق ما بتعديل سجل المتصفح أو الإشارات في هاتفك. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح بيانات المتصفح أو تعديلها."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"تعيين المنبه في ساعة المنبه"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"للسماح للتطبيق بضبط المنبه في تطبيق ساعة منبه مثبّت. ربما لا تنفذ بعض تطبيقات المنبه هذه الميزة."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"إضافة بريد صوتي"</string>
+ <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="save_password_message" msgid="767344687139195790">"هل تريد من المتصفح تذكر كلمة المرور هذه؟"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"ليس الآن"</string>
<string name="save_password_remember" msgid="6491879678996749466">"تذكّر"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"قبل شهر واحد"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل شهر واحد"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"قص"</string>
<string name="copy" msgid="2681946229533511987">"نسخ"</string>
<string name="paste" msgid="5629880836805036433">"لصق"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"ليس هناك شيء للصقه"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"استبدال"</string>
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"تحديد إجراء"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"تحديد تطبيق لجهاز USB"</string>
<string name="noApplications" msgid="1691104391758345586">"ليس هناك تطبيقات يمكنها تنفيذ هذا الإجراء."</string>
- <string name="aerr_title" msgid="653922989522758100">"عذرًا!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"توقف التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (العملية <xliff:g id="PROCESS">%2$s</xliff:g>) على نحو غير متوقع. الرجاء المحاولة مرة أخرى."</string>
- <string name="aerr_process" msgid="1551785535966089511">"توقفت العملية <xliff:g id="PROCESS">%1$s</xliff:g> على نحو غير متوقع. الرجاء المحاولة مرة أخرى."</string>
- <string name="anr_title" msgid="3100070910664756057">"عذرًا!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"النشاط <xliff:g id="ACTIVITY">%1$s</xliff:g> (في التطبيق <xliff:g id="APPLICATION">%2$s</xliff:g>) لا يستجيب."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"النشاط <xliff:g id="ACTIVITY">%1$s</xliff:g> (في العملية <xliff:g id="PROCESS">%2$s</xliff:g>) غير مستجيب."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (في العملية <xliff:g id="PROCESS">%2$s</xliff:g>) غير مستجيب."</string>
- <string name="anr_process" msgid="1246866008169975783">"العملية <xliff:g id="PROCESS">%1$s</xliff:g> غير مستجيبة."</string>
- <string name="force_close" msgid="3653416315450806396">"فرض الإغلاق"</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="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="force_close" msgid="8346072094521265605">"موافق"</string>
<string name="report" msgid="4060218260984795706">"إرسال تقرير"</string>
<string name="wait" msgid="7147118217226317732">"انتظار"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"تمت إعادة توجيه التطبيق"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"مستوى صوت المنبّه"</string>
<string name="volume_notification" msgid="2422265656744276715">"مستوى صوت التنبيه"</string>
<string name="volume_unknown" msgid="1400219669770445902">"مستوى الصوت"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,12 +941,12 @@
<item quantity="one" msgid="1634101450343277345">"هناك شبكة Wi-Fi مفتوحة متاحة"</item>
<item quantity="other" msgid="7915895323644292768">"هناك شبكات Wi-Fi مفتوحة متاحة"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"تم تعطيل شبكة Wi-Fi."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"تم تعطيل شبكة Wi-Fi مؤقتًا بسبب اتصال خاطئ."</string>
+ <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 مباشر"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"ابدأ تشغيل اتصالWi-Fi المباشر. يؤدي ذلك إلى إيقاف تشغيل عميل/نقطة اتصال Wi-Fi."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"أخفق بدء اتصال Wi-Fi مباشر."</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"هناك طلب اتصال Wi-Fi مباشر من <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. انقر على موافق للقبول."</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"ابدأ تشغيل اتصال Wi-Fi المباشر. يؤدي ذلك إلى إيقاف تشغيل عميل/نقطة اتصال Wi-Fi."</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"أخفق بدء اتصال Wi-Fi مباشر."</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"هناك طلب إعداد اتصال Wi-Fi مباشر من <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. انقر على \"موافق\" للقبول."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"هناك طلب إعداد اتصال Wi-Fi مباشر من <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. أدخل رقم التعريف الشخصي للبدء."</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>
<string name="select_character" msgid="3365550120617701745">"إدراج حرف"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"لن تكون شبكة الجوال متاحة حتى يتم تركيب بطاقة SIM."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"أخفقت عملية USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"أخفق محو وحدة تخزين USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"أخفق محو بطاقة 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"انقر للتمكين."</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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_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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"شهادة الأمان"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"هذه الشهادة صالحة."</string>
@@ -1150,5 +1157,7 @@
<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="status_bar_device_locked" msgid="3092703448690669768">"تم تأمين الجهاز."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5d3cd5613dd4..90b84a821a1b 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Кодът за функцията се изпълни."</string>
<string name="fcError" msgid="3327560126588500777">"Има проблем с връзката или кодът за функцията е невалиден."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Уеб страницата съдържа грешка."</string>
+ <string name="httpError" msgid="6603022914760066338">"Възникна грешка в мрежата."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL адресът не можа да бъде намерен."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Схемата за удостоверяване на сайта не се поддържа."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Удостоверяването не бе успешно."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Удостоверяването през прокси сървъра не бе успешно."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Връзката със сървъра не бе успешна."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Комуникацията със сървъра не бе успешна. Опитайте отново по-късно."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за VPN. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"обвързване с тапет"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на тапет. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обвързване с услуга за приспособления"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"четене на данните"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Разрешава на приложението да чете цялата информацията от личния ви потребителски профил. Злонамерените приложения могат да използват това, за да ви идентифицират и да изпращат тази информация на други хора."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"запис на данните"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Разрешава на приложението да променя информацията от личния ви потребителски профил. Злонамерените приложения могат да използват това, за да изтрият или да променят данните ви."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"четене на събития от календара"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Разрешава на приложението да чете всички съхранени в таблета събития в календара ви. Злонамерените приложения могат да използват това, за да изпращат тези събития на други хора."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Разрешава на приложението да чете всички съхранени в телефона събития в календара ви. Злонамерените приложения могат да използват това, за да изпратят тези събития на други хора."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"добавяне или промяна на събития в календара и изпращане на имейл до гостите"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Разрешава на приложението да добавя или променя събитията в календара ви, при което може да се изпрати имейл до гостите. Злонамерените приложения могат да използват това, за да изтрият или променят тези събития или да изпратят имейл до гостите."</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_accessMockLocation" msgid="8688334974036823330">"имитиране на източници на местоположение за тестване"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Създаване на мними източници на местоположение за тестване. Злонамерените приложения могат да използват това, за да заменят местоположението и/или състоянието, връщано от истинските източници, като GPS или мрежовите доставчици."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"достъп до допълнителни команди на доставчика на местоположение"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Разрешава на приложението да вижда състоянието на всички мрежи."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"пълен достъп до интернет"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Разрешава на приложението да създава мрежови сокети."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"запис на настройки на име на точка за достъп"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Разрешава на приложението да променя настройките на всяко име на точка за достъп, като например прокси сървър и порт."</string>
+ <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"запис на настройки на име на точка за достъп"</string>
+ <!-- outdated translation 7443433457842966680 --> <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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Разрешава на приложението да променя историята или отметките на браузъра, съхранени на телефона ви. Злонамерените приложения могат да използват това, за да изтрият или променят данните на браузъра ви."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"навиване на будилника"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Разрешава на приложението да навие инсталирано приложение будилник. Някои будилници може да не изпълнят тази функция."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"добавяне на гласова поща"</string>
+ <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="save_password_message" msgid="767344687139195790">"Искате ли браузърът да запомни тази парола?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сега"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запомняне"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Преди 1 месец"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Преди повече от месец"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Изрязване"</string>
<string name="copy" msgid="2681946229533511987">"Копиране"</string>
<string name="paste" msgid="5629880836805036433">"Поставяне"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Нищо за поставяне"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Замяна"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копиране на URL адреса"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Избиране на текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избиране на текст"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Избиране на действие"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Избор на приложение за USB устройството"</string>
<string name="noApplications" msgid="1691104391758345586">"Това действие не може да се изпълни от нито едно приложение."</string>
- <string name="aerr_title" msgid="653922989522758100">"Съжаляваме!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Приложението „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (процес „<xliff:g id="PROCESS">%2$s</xliff:g>“) спря неочаквано. Моля, опитайте отново."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Процесът „<xliff:g id="PROCESS">%1$s</xliff:g>“ спря неочаквано. Моля, опитайте отново."</string>
- <string name="anr_title" msgid="3100070910664756057">"Съжаляваме!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Дейността „<xliff:g id="ACTIVITY">%1$s</xliff:g>“ (в приложението „<xliff:g id="APPLICATION">%2$s</xliff:g>“) не реагира."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Дейността „<xliff:g id="ACTIVITY">%1$s</xliff:g>“ (в процеса „<xliff:g id="PROCESS">%2$s</xliff:g>“) не реагира."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Приложението „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (в процеса „<xliff:g id="PROCESS">%2$s</xliff:g>“) не реагира."</string>
- <string name="anr_process" msgid="1246866008169975783">"Процесът „<xliff:g id="PROCESS">%1$s</xliff:g>“ не реагира."</string>
- <string name="force_close" msgid="3653416315450806396">"Принудително затваряне"</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="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="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Подаване на сигнал"</string>
<string name="wait" msgid="7147118217226317732">"Изчакване"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Приложението се пренасочи"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Сила на звука на будилника"</string>
<string name="volume_notification" msgid="2422265656744276715">"Сила на звука при известие"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Сила на звука"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Има достъпна отворена Wi-Fi мрежа"</item>
<item quantity="other" msgid="7915895323644292768">"Има достъпни отворени Wi-Fi мрежи"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi мрежа бе деактивирана"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi мрежа бе временно деактивирана поради лоша връзка."</string>
+ <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_failed_message" msgid="6467545523417622335">"Стартирането на Wi-Fi Direct не бе успешно"</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>
<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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Тази мобилна мрежа няма да е налице, докато не замените SIM картата."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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 устройство за съхранение, някои използвани от вас приложения ще спрат и може да бъдат недостъпни, докато не я изключите."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"Операцията през USB не бе успешна"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Изтриването на USB хранилището не бе успешно."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Изтриването на 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"докоснете за активиране"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертификат за сигурност"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Този сертификат е валиден."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index b66b7ff19f10..ca9aeda1077c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Codi de funció completat."</string>
<string name="fcError" msgid="3327560126588500777">"Problema de connexió o codi de funció no vàlid."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"D\'acord"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La pàgina web conté un error."</string>
+ <string name="httpError" msgid="6603022914760066338">"S\'ha produït un error de xarxa."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"No s\'ha trobat l\'URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"L\'esquema d\'autenticació de llocs no és compatible."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"El servidor no s\'ha pogut comunicar. Torneu-ho a provar més tard."</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="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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vincular a un mètode d\'entrada"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permet al titular vincular amb la interfície de nivell superior d\'un mètode d\'entrada. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"vincula a un servei de text"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Permet al titular vincular amb la interfície de nivell superior d\'un servei de text (per exemple, SpellCheckerService). Les aplicacions normal mai no ho haurien de necessitar."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Permet al titular vincular amb la interfície de nivell superior d\'un servei de text (per exemple, SpellCheckerService). Les aplicacions normals mai no ho haurien de necessitar."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincula a un servei de VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de VPN. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un empaperat"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permet al titular vincular amb la interfície de nivell superior d\'un empaperat. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincula a un servei de widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"lectura de dades del perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"escriptura de dades del perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"llegir els esdeveniments del calendari"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permet que una aplicació llegeixi tots els esdeveniments del calendari emmagatzemats a la tauleta. Les aplicacions malicioses poden utilitzar aquesta funció per enviar els teus esdeveniments del calendari a altres persones."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permet a una aplicació llegir tots els esdeveniments del calendari emmagatzemats al telèfon. Les aplicacions malicioses poden utilitzar-ho per enviar els vostres esdeveniments del calendari a altres persones."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"afegir o modificar esdeveniments del calendari i enviar correu electrònic als convidats"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permet a una aplicació afegir o canviar els esdeveniments del calendari, cosa que pot fer que s\'enviï correu electrònic als convidats. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar els esdeveniments del calendari o per enviar correu electrònic als convidats."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"afegeix o modifica els esdeveniments del calendari i envia correus electrònics als clients sense el coneixement dels propietaris"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permet que una aplicació enviï invitacions a esdeveniments com a propietari del calendari i que afegeixi, que tregui i que canviï els esdeveniments que es poden modificar al dispositiu, inclosos els dels seus amics o els seus companys de feina. Una aplicació maliciosa amb aquest permís pot enviar correu brossa que sembli que prové dels propietaris de calendari, modificar els esdeveniments sense el coneixement dels propietaris, o afegir esdeveniments falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"crear orígens d\'ubicacions fictícies per fer proves"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Crea orígens d\'ubicacions ficticis per fer proves. Les aplicacions malicioses poden utilitzar-ho per substituir la ubicació i/o l\'estat que retornen els orígens d\'ubicacions reals, com ara proveïdors de xarxa o GPS."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accedir a ordres del proveïdor d\'ubicació addicionals"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"escriure la configuració del nom del punt d\'accés (APN)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Permet a una aplicació modificar la configuració d\'APN, com ara el servidor intermediari i el port de qualsevol APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permet a una aplicació modificar l\'historial o les adreces d\'interès del navegador emmagatzemats al telèfon. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar les dades del navegador."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"defineix l\'alarma com a despertador"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permet que l\'aplicació defineixi una alarma en una aplicació de despertador instal·lada. És possible que algunes aplicacions de despertador no incorporin aquesta funció."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"afegeix bústia de veu"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Fa 1 mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa menys d\'1 mes"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Retalla"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Enganxa"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Cap elem. per engan."</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Seleccioneu una acció"</string>
<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="653922989522758100">"Ho sentim."</string>
- <string name="aerr_application" msgid="4683614104336409186">"L\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> (procés <xliff:g id="PROCESS">%2$s</xliff:g>) s\'ha aturat inesperadament. Torneu-ho a provar."</string>
- <string name="aerr_process" msgid="1551785535966089511">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> s\'ha aturat inesperadament. Torneu-ho a provar."</string>
- <string name="anr_title" msgid="3100070910664756057">"Ho sentim."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"L\'activitat <xliff:g id="ACTIVITY">%1$s</xliff:g> (a l\'aplicació <xliff:g id="APPLICATION">%2$s</xliff:g>) no respon."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"L\'activitat <xliff:g id="ACTIVITY">%1$s</xliff:g> (al procés <xliff:g id="PROCESS">%2$s</xliff:g>) no respon."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"L\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> (al procés <xliff:g id="PROCESS">%2$s</xliff:g>) no respon."</string>
- <string name="anr_process" msgid="1246866008169975783">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> no respon."</string>
- <string name="force_close" msgid="3653416315450806396">"Força el tancament"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> no respon. Vols tancar-la?"</string>
+ <string name="anr_process" msgid="306819947562555821">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> no respon."\n\n"Vols tancar-lo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"D\'acord"</string>
<string name="report" msgid="4060218260984795706">"Informe"</string>
<string name="wait" msgid="7147118217226317732">"Espera"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicació redirigida"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Xarxa Wi-fi oberta disponible"</item>
<item quantity="other" msgid="7915895323644292768">"Xarxes Wi-fi obertes disponibles"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"S\'ha desactivat una xarxa Wi-Fi"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"S\'ha desactivat la connexió a una xarxa Wi-Fi a causa de la mala connectivitat."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No s\'ha pogut connectar a la Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"No s\'ha pogut iniciar el Wi-Fi Direct"</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_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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"La xarxa de telefonia mòbil no estarà disponible fins que no canviïs 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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Error de l\'operació d\'USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Error de l\'operació d\'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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"S\'ha produït un error en esborrar l\'emmagatzematge USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"S\'ha produït un error en esborrar 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecciona un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminueix"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"marcat"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"no marcat"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"seleccionat"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"no seleccionat"</string>
+ <string name="switch_on" msgid="551417728476977311">"activat"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"pica per activar-lo"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"pica per activar-lo"</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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de seguretat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Aquest certificat és vàlid."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index ef080f667813..f3c45be4cd2c 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Požadavek zadaný pomocí kódu funkce byl úspěšně dokončen."</string>
<string name="fcError" msgid="3327560126588500777">"Problém s připojením nebo neplatný kód funkce."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Webová stránka obsahuje chybu."</string>
+ <string name="httpError" msgid="6603022914760066338">"Došlo k chybě sítě."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Adresu URL nelze najít."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Schéma ověření webu není podporováno."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Komunikace se serverem se nezdařila. Opakujte akci později."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<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 vázat se na 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šší úroveň 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>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní tapety. Běžné aplikace by toto oprávnění nikdy neměly potřebovat."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"navázat se na službu widgetu"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"číst údaje o profilu"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"zapisovat údaje o profilu"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Umožňuje aplikaci upravovat osobní údaje v profilu. Škodlivé aplikace mohou pomocí tohoto nastavení mazat nebo upravovat údaje v profilu."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"Čtení událostí v kalendáři"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Umožňuje aplikaci číst všechny události kalendáře uložené v tabletu. Škodlivé aplikace toho mohou zneužít a odeslat události z vašeho kalendáře jiným lidem."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Umožňuje aplikaci načíst všechny události kalendáře uložené ve vašem telefonu. Škodlivé aplikace poté mohou dalším lidem odeslat události z vašeho kalendáře."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"Přidávání nebo úprava událostí v kalendáři a odesílání e-mailů hostům"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Umožňuje aplikaci přidávat nebo měnit události v kalendáři, které budou odesílat e-maily hostům. Škodlivé aplikace mohou pomocí tohoto oprávnění mazat nebo upravovat události v kalendáři a odesílat e-maily hostům."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"přidávat a upravovat události kalendáře a odesílat e-maily bez vědomí vlastníka"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Povolí aplikaci odesílat pozvánky na události jménem vlastníka kalendáře a přidávat, odebírat a měnit události, které můžete ve svém zařízení upravovat, včetně událostí přátel a spolupracovníků. Škodlivá aplikace s tímto oprávněním může odesílat spamové e-maily, které vypadají, jako kdyby je odeslal vlastník kalendáře, upravovat události bez vědomí vlastníka a přidávat do kalendáře falešné události."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"simulace zdrojů polohy pro účely testování"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Vytváří simulované zdroje polohy pro účely testování. Škodlivé aplikace mohou pomocí tohoto nastavení změnit polohu či stav vrácený zdroji skutečné polohy, jako je např. jednotka GPS či poskytovatelé sítě."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"přístup k dalším příkazům poskytovatele polohy"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"zápis nastavení názvu přístupového bodu (APN)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Umožňuje aplikaci změnit nastavení APN, jako je například proxy či port APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Umožní aplikaci změnit historii či záložky prohlížeče uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit data Prohlížeče."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"nastavit budík v budíku"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Dovoluje aplikaci nastavit budík v nainstalované aplikaci budíku. Některé budíkové aplikace nemusí tuto funkci implementovat."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"přidat hlasovou zprávu"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Není co vložit"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Vyberte akci"</string>
<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="653922989522758100">"Omlouváme se"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) byla neočekávaně ukončena. Zkuste to znovu."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> byl neočekávaně ukončen. Opakujte prosím akci."</string>
- <string name="anr_title" msgid="3100070910664756057">"Omlouváme se"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Činnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>) neodpovídá."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Služba <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Služba <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovídá."</string>
- <string name="force_close" msgid="3653416315450806396">"Ukončit aplikaci"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> nereaguje. Chcete ji ukončit?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nereaguje."\n\n"Chcete jej ukončit?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Nahlásit"</string>
<string name="wait" msgid="7147118217226317732">"Počkat"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikace přesměrována"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"K dispozici je veřejná síť WiFi"</item>
<item quantity="other" msgid="7915895323644292768">"Jsou k dispozici veřejné sítě WiFi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Síť Wi-Fi byla zakázána"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Síť Wi-Fi byla dočasně zakázána kvůli problémům s připojením."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Připojení k síti Wi-Fi se nezdařilo"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Přímé připojení sítě Wi-Fi se nepodařilo spustit"</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_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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilní síť bude nedostupná, dokud nevyměníte kartu SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Chyba operace na rozhraní USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Chyba operace na rozhraní USB"</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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Smazání úložiště USB se nezdařilo."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Smazání karty SD se nezdařilo."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vybrat účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšení"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"klepnutím povolíte"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<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>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 78c474d7b940..4b1966d9fde0 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funktionskoden er komplet."</string>
<string name="fcError" msgid="3327560126588500777">"Forbindelsesproblemer eller ugyldig funktionskode."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Websiden indeholder en fejl."</string>
+ <string name="httpError" msgid="6603022914760066338">"Der opstod en netværksfejl."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Webadressen kunne ikke findes."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Planen for webstedsgodkendelse er ikke understøttet."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Serveren kunne ikke kommunikere. Prøv igen senere."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="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>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Tillader, at brugeren forpligter sig til et tapets grænseflade på øverste niveau. Bør aldrig være nødvendig til normale applikationer."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"forpligt til en widgettjeneste"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"læs profildata"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"skrive profildata"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"læs kalenderbegivenheder"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Tillader, at en applikation læser alle kalenderbegivenheder, der er gemt på din tabletcomputer. Ondsindede applikationer kan bruge dette til at sende dine kalenderbegivenheder til andre mennesker."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Tillader, at en applikation læser alle kalenderbegivenheder, der er gemt på din telefon. Ondsindede applikationer kan bruge dette til at sende dine kalenderbegivenheder til andre mennesker."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"tilføj eller rediger kalenderbegivenheder, og send e-mail til gæster"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Tillader, at en applikation tilføjer eller ændrer begivenhederne i din kalender, hvilket kan sende e-mail til gæster. Ondsindede applikationer kan bruge dette til at slette eller ændre dine kalenderbegivenheder eller til at sende e-mail til gæster."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"tilføje eller ændre kalenderbegivenheder og sende e-mail til gæster uden ejerens viden"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Tillader, at en applikation kan sende invitationer som ejeren af kalenderen og tilføje, fjerne og ændre begivenheder, som du kan ændre på din enhed, herunder venners eller kollegers. En ondsindet applikation med denne tilladelse kan sende spam-e-mails, der synes at komme fra ejeren af kalenderen, ændre begivenheder uden ejerens viden eller tilføje falske begivenheder."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"imiterede placeringskilder til test"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Opret imiterede placeringskilder til testning. Ondsindede applikationer kan bruge dette til at tilsidesætte den returnerede placering og/eller status fra rigtige placeringskilder som f.eks. GPS eller netværksudbydere."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"få adgang til yderligere kommandoer for placeringsudbyder"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"skriv indstillinger for adgangspunktnavn"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Tillader, at en applikation ændrer APN-indstillingerne, f.eks. enhver APNs Proxy og Port."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Tillader, at en applikation ændrer browseroversigten eller bogmærker, der er gemt på din telefon. Ondsindede applikationer kan bruge dette til at slette eller ændre din browsers data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"angiv alarm i alarmprogram"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Tillader, at applikationen angiver en alarm i et installeret alarmprogram. Nogle alarmprogrammer kan ikke implementere denne funktion."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"tilføj telefonsvarer"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Intet at indsætte"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Vælg en handling"</string>
<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="653922989522758100">"Beklager!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) er standset uventet. Prøv igen."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> er standset uventet. Prøv igen."</string>
- <string name="anr_title" msgid="3100070910664756057">"Beklager!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktivitet <xliff:g id="ACTIVITY">%1$s</xliff:g> (i applikationen <xliff:g id="APPLICATION">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktivitet <xliff:g id="ACTIVITY">%1$s</xliff:g> (igangværende <xliff:g id="PROCESS">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (igangværende <xliff:g id="PROCESS">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_process" msgid="1246866008169975783">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> svarer ikke."</string>
- <string name="force_close" msgid="3653416315450806396">"Tving til at lukke"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> svarer ikke. Vil du lukke den?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> svarer ikke."\n\n"Vil du lukke den?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapporter"</string>
<string name="wait" msgid="7147118217226317732">"Vent"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Programmet er omdirigeret"</string>
@@ -880,7 +902,7 @@
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> blev oprindeligt åbnet."</string>
<string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skaler"</string>
<string name="screen_compat_mode_show" msgid="4013878876486655892">"Vis altid"</string>
- <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Genaktivere det med Indstillinger &gt; Applikationer &gt; Administrer appliaktioner."</string>
+ <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="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> er i gang"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Åbent Wi-Fi-netværk tilgængeligt"</item>
<item quantity="other" msgid="7915895323644292768">"Der er åbne Wi-Fi-netværk tilgængelige"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Et Wi-Fi-netværk blev deaktiveret"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Et Wi-Fi-netværk blev midlertidigt deaktiveret på grund af dårlig forbindelse."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kunne ikke oprette forbindelse til Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kunne ikke starte Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Det mobile netværk vil være utilgængeligt, indtil du udskifter SIM-kortet."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-handlingen mislykkedes"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB-lager kunne ikke slettes."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"SD-kortet kunne ikke slettes."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vælg en konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Optælling"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tryk for at aktivere"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhedscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dette certifikat er gyldigt."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 1bca98a22abf..214e1f4dd006 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funktionscode abgeschlossen"</string>
<string name="fcError" msgid="3327560126588500777">"Verbindungsproblem oder ungültiger Funktionscode"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Auf der Webseite ist ein Fehler aufgetreten."</string>
+ <string name="httpError" msgid="6603022914760066338">"Es ist ein Netzwerkfehler aufgetreten."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Die URL konnte nicht gefunden werden."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Das Authentifizierungsschema für die Site wird nicht unterstützt."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Die Server-Kommunikation ist fehlgeschlagen. Versuchen Sie es später erneut."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Ermöglicht dem Halter, sich an die Oberfläche einer Eingabemethode auf oberster Ebene zu binden. Sollte nie für normale Anwendungen benötigt werden."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"An einen Textdienst binden"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Berechtigt den Inhaber zum Binden an die Oberfläche der obersten Ebene eines Textdienstes, beispielsweise eines Rechtschreibprüfungsdienstes. Sollte für normale Apps nicht benötigt werden."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"An einen VPN-Dienst binden"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Ermöglicht dem Halter, sich an die Oberfläche eines VPN-Dienstes auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"An einen Hintergrund binden"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Ermöglicht dem Halter, sich an die Oberfläche einer Eingabemethode auf oberster Ebene zu binden. Sollte nie für normale Anwendungen benötigt werden."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"An einen Widget-Dienst binden"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"Profildaten lesen"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"Profildaten schreiben"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"Kalendereinträge lesen"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Ermöglicht einer App, alle auf Ihrem Tablet gespeicherten Kalenderereignisse zu lesen. Schädliche Anwendungen können so Ihre Kalenderereignisse an andere Personen senden."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Ermöglicht einer App, alle auf Ihrem Telefon gespeicherten Kalenderereignisse zu lesen. Schädliche Anwendungen können so Ihre Kalenderereignisse an andere Personen senden."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"Kalendereinträge hinzufügen oder ändern und E-Mails an Gäste senden"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Ermöglicht einer App, Einträge in Ihrem Kalender hinzuzufügen oder zu ändern, wodurch E-Mails an Gäste gesendet werden können. Schädliche Anwendungen können so Ihre Kalenderdaten löschen oder verändern oder E-Mails versenden."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"Ohne das Wissen der Eigentümer Kalendertermine hinzufügen oder ändern und E-Mails an Gäste senden"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Ermöglicht einer App das Senden von Termineinladungen als Kalendereigentümer und das Hinzufügen, Entfernen und Ändern von Terminen, die Sie auf Ihrem Gerät bearbeiten können, einschließlich der Termine von Freunden oder Kollegen. Schädliche Apps mit dieser Berechtigung können Spam-E-Mails senden, die von Kalendereigentümern zu kommen scheinen, Termine ohne das Wissen der Eigentümer ändern oder falsche Termine hinzufügen."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"Simulierte Standortquellen für Testzwecke"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Erstellt falsche Standortquellen für Testzwecke. Schädliche Anwendungen können so den von den echten Standortquellen wie GPS oder Netzwerkanbieter zurückgegebenen Standort und/oder Status überschreiben."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"Auf zusätzliche Dienstanbieterbefehle für Standort zugreifen"</string>
@@ -439,8 +445,8 @@
<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="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ermöglicht einer App, Netzwerk-Sockets einzurichten"</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"Einstellungen für Zugriffspunktname schreiben"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Ermöglicht einer App, die APN-Einstellungen wie Proxy und Port eines Zugriffspunkts zu ändern"</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Ermöglicht einer App, den auf Ihrem Telefon gespeicherten Browserverlauf und die Lesezeichen zu ändern. Schädliche Anwendungen können so Ihre Browserdaten löschen oder ändern."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"Alarm im Wecker festlegen"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Ermöglicht dieser Anwendung, einen Alarm mithilfe eines installierten Weckers festzulegen. Einige Weckeranwendungen verfügen möglicherweise nicht über diese Funktion."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"Mailbox-Nachrichten hinzufügen"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Vor 1 Monat"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vor mehr als 1 Monat"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nichts zum Einfügen"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Aktion auswählen"</string>
<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="653922989522758100">"Tut uns leid!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Die Anwendung <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) wurde unerwartet beendet. Versuchen Sie es erneut."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> wurde unerwartet beendet. Versuchen Sie es erneut."</string>
- <string name="anr_title" msgid="3100070910664756057">"Tut uns leid!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktivität <xliff:g id="ACTIVITY">%1$s</xliff:g> (in Anwendung <xliff:g id="APPLICATION">%2$s</xliff:g>) reagiert nicht."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktivität <xliff:g id="ACTIVITY">%1$s</xliff:g> (in Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) reagiert nicht."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Anwendung <xliff:g id="APPLICATION">%1$s</xliff:g> (in Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) reagiert nicht."</string>
- <string name="anr_process" msgid="1246866008169975783">"Prozess <xliff:g id="PROCESS">%1$s</xliff:g> reagiert nicht."</string>
- <string name="force_close" msgid="3653416315450806396">"Schließen erzwingen"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> reagiert nicht. Möchten Sie sie schließen?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Prozess <xliff:g id="PROCESS">%1$s</xliff:g> reagiert nicht."\n\n"Möchten Sie ihn beenden?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Bericht"</string>
<string name="wait" msgid="7147118217226317732">"Warten"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Anwendung umgeleitet"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Verfügbares WLAN-Netzwerk öffnen"</item>
<item quantity="other" msgid="7915895323644292768">"Verfügbare WLAN-Netzwerke öffnen"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Ein WLAN-Netzwerk wurde deaktiviert."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Ein WLAN-Netzwerk wurde wegen einer mangelhaften Verbindung vorübergehend deaktiviert."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Es konnte keine WLAN-Verbindung hergestellt werden."</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Direct konnte nicht gestartet werden."</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct konnte nicht gestartet werden."</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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Das Mobilfunknetz ist erst wieder verfügbar, nachdem Sie die SIM-Karte ersetzt haben."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-Vorgang fehlgeschlagen"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB-Speicher konnte nicht gelöscht werden."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"SD-Karte konnte nicht gelöscht werden."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Konto auswählen"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Erhöhen"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Verringern"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"Aktiviert"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"Nicht aktiviert"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"Ausgewählt"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"Nicht ausgewählt"</string>
+ <string name="switch_on" msgid="551417728476977311">"Ein"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"Zum Aktivieren klicken"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Zum Aktivieren klicken"</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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sicherheitszertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dies ist ein gültiges Zertifikat."</string>
@@ -1149,6 +1156,8 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1-Fingerabdruck:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Alle anzeigen..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Aktion auswählen"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Teilen mit..."</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 />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index bde2b44ab6f2..3581d889d3f1 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Ο κωδικός λειτουργίας ολοκληρώθηκε."</string>
<string name="fcError" msgid="3327560126588500777">"Πρόβλημα σύνδεσης ή μη έγκυρος κώδικας δυνατότητας."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Η ιστοσελίδα περιέχει ένα σφάλμα."</string>
+ <string name="httpError" msgid="6603022914760066338">"Παρουσιάστηκε σφάλμα δικτύου."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Δεν ήταν δυνατή η εύρεση της διεύθυνσης URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Το πλάνο ελέγχου ταυτότητας ιστοτόπου δεν υποστηρίζεται."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Ο έλεγχος ταυτότητας δεν ήταν επιτυχής."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Ο έλεγχος ταυτότητας μέσω του διακομιστή μεσολάβησης δεν ήταν επιτυχής."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Η σύνδεση στον διακομιστή δεν ήταν επιτυχής."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Η επικοινωνία με τον διακομιστή απέτυχε. Προσπαθήστε ξανά αργότερα."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας Vpn. Δεν απαιτείται ποτέ για κανονικές εφαρμογές."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"δέσμευση σε ταπετσαρία"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας ταπετσαρίας. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"δέσμευση σε υπηρεσία γραφικών στοιχείων"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"ανάγνωση δεδομένων προφίλ"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Επιτρέπει σε μια εφαρμογή την ανάγνωση όλων των προσωπικών στοιχείων προφίλ. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να εξακριβώσουν την ταυτότητά σας και για να στείλουν τα προσωπικά σας στοιχεία σε άλλους χρήστες."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"εγγραφή δεδομένων προφίλ"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Επιτρέπει σε μια εφαρμογή την τροποποίηση των προσωπικών στοιχείων προφίλ. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα προσωπικά σας δεδομένα."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"ανάγνωση συμβάντων ημερολογίου"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Επιτρέπει σε μια εφαρμογή να αναγνώσει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο tablet σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να αποστείλουν συμβάντα ημερολογίου σε άλλους χρήστες."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Επιτρέπει σε μια εφαρμογή να αναγνώσει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να αποστείλουν συμβάντα ημερολογίου σε άλλους χρήστες."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"προσθήκη ή τροποποίηση συμβάντων του ημερολογίου και αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου στους προσκεκλημένους"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Επιτρέπει σε μια εφαρμογή την προσθήκη ή την αλλαγή συμβάντων στο ημερολόγιο σας, και την ενδεχόμενη αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου στους προσκεκλημένους. Οι κακόβουλες εφαρμογές μπορούν να χρησιμοποιήσουν αυτή τη λειτουργία για να διαγράψουν ή να τροποποιήσουν τα συμβάντα του ημερολογίου σας ή για να στείλουν μηνύματα ηλεκτρονικού ταχυδρομείου στους προσκεκλημένους."</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">"Επιτρέπει σε μια εφαρμογή να διαβάζει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο tablet σας, συμπεριλαμβανομένων των συμβάντων φίλων ή συναδέλφων. Μια κακόβουλη εφαρμογή με αυτήν την άδεια μπορεί να εξαγάγει προσωπικά στοιχεία από αυτά τα ημερολόγια χωρίς να το γνωρίζουν οι κάτοχοί τους."</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_accessMockLocation" msgid="8688334974036823330">"δημιουργία ψευδών πηγών τοποθεσίας για δοκιμή"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Δημιουργία εικονικών πηγών τοποθεσίας για δοκιμή. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να παρακάμψουν την τοποθεσία και/ή την κατάσταση που βρίσκουν πραγματικές πηγές τοποθεσίας, όπως πάροχοι GPS ή πάροχοι δικτύου."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"πρόσβαση σε επιπλέον εντολές παρόχου τοποθεσίας"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Επιτρέπει σε μια εφαρμογή την προβολή της κατάστασης όλων των δικτύων."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"πλήρης πρόσβαση στο Διαδίκτυο"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Επιτρέπει σε μια εφαρμογή τη δημιουργία υποδοχών δικτύου (sockets)."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"εγγραφή ρυθμίσεων Ονόματος σημείου πρόσβασης (APN)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει τις ρυθμίσεις APN, όπως Διακομιστής μεσολάβησης και Θύρα για ένα APN."</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_changeNetworkState" msgid="958884291454327309">"αλλαγή συνδεσιμότητας δικτύου"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Επιτρέπει σε μια εφαρμογή την αλλαγή της κατάστασης συνδεσιμότητας δικτύου."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"αλλαγή συνδεσιμότητας της σύνδεσης μέσω κινητής συσκευής"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει το ιστορικό ή τους σελιδοδείκτες του προγράμματος περιήγησης που βρίσκονται αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα του προγράμματος περιήγησης."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ρύθμιση ειδοποίησης σε ξυπνητήρι"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Επιτρέπει στην εφαρμογή να ρυθμίσει μια ειδοποίηση σε μια εγκατεστημένη εφαρμογή ξυπνητηριού. Κάποιες εφαρμογές ξυπνητηριού ενδέχεται να μην περιλαμβάνουν αυτή τη λειτουργία."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"προσθήκη τηλεφωνητή"</string>
+ <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="save_password_message" msgid="767344687139195790">"Θέλετε το πρόγραμμα περιήγησης να διατηρήσει αυτόν τον κωδικό πρόσβασης;"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Να μην γίνει τώρα"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Διατήρηση"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"πριν από 1 μήνα"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Παλαιότερα από 1 μήνα"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Αποκοπή"</string>
<string name="copy" msgid="2681946229533511987">"Αντιγραφή"</string>
<string name="paste" msgid="5629880836805036433">"Επικόλληση"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Καν. στοιχ. για επικ."</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Αντικατάσταση"</string>
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Επιλογή κειμένου"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Επιλέξτε μια ενέργεια"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Επιλέξτε μια εφαρμογή για τη συσκευή USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Δεν υπάρχουν εφαρμογές, οι οποίες μπορούν να εκτελέσουν αυτήν την ενέργεια."</string>
- <string name="aerr_title" msgid="653922989522758100">"Λυπούμαστε!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Υπήρξε μη αναμενόμενη διακοπή της εφαρμογής <xliff:g id="APPLICATION">%1$s</xliff:g> (διαδικασία <xliff:g id="PROCESS">%2$s</xliff:g>). Προσπαθήστε ξανά."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Υπήρξε μη αναμενόμενη διακοπή της διαδικασίας <xliff:g id="PROCESS">%1$s</xliff:g>. Προσπαθήστε αργότερα."</string>
- <string name="anr_title" msgid="3100070910664756057">"Λυπούμαστε!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Η δραστηριότητα <xliff:g id="ACTIVITY">%1$s</xliff:g> (στην εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g>) δεν αποκρίνεται."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Η δραστηριότητα <xliff:g id="ACTIVITY">%1$s</xliff:g> (στη διαδικασία <xliff:g id="PROCESS">%2$s</xliff:g>) δεν αποκρίνεται."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> (στη διαδικασία <xliff:g id="PROCESS">%2$s</xliff:g>) δεν αποκρίνεται."</string>
- <string name="anr_process" msgid="1246866008169975783">"Η διαδικασία <xliff:g id="PROCESS">%1$s</xliff:g> δεν αποκρίνεται."</string>
- <string name="force_close" msgid="3653416315450806396">"Αναγκαστικό κλείσιμο"</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="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="force_close" msgid="8346072094521265605">"ΟΚ"</string>
<string name="report" msgid="4060218260984795706">"Αναφορά"</string>
<string name="wait" msgid="7147118217226317732">"Αναμονή"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Ανακατεύθυνση εφαρμογής"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Ένταση ήχου ξυπνητηριού"</string>
<string name="volume_notification" msgid="2422265656744276715">"Ένταση ήχου ειδοποίησης"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Ένταση ήχου"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Υπάρχει διαθέσιμο ανοικτό δίκτυο Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Υπάρχουν διαθέσιμα ανοικτά δίκτυα Wi-Fi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Ένα δίκτυο Wi-Fi ήταν απενεργοποιημένο."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Ένα δίκτυο Wi-Fi ήταν προσωρινά απενεργοποιημένο λόγω κακής σύνδεσης."</string>
+ <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_failed_message" msgid="6467545523417622335">"Αποτυχία έναρξης Wi-Fi Direct"</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>. Καταχωρίστε το 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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Το δίκτυο κινητής τηλεφωνίας δεν θα είναι διαθέσιμο έως ότου αντικαταστήσετε την κάρτα SIM."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Απέτυχε η λειτουργία USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Αποτυχία διαγραφής αποθηκευτικού χώρου USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Αποτυχία διαγραφής κάρτας 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"πατήστε για ενεργοποίηση"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Πιστοποιητικό ασφαλείας"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Αυτό το πιστοποιητικό είναι έγκυρο."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index a2c5835a0755..f7577ad30676 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Feature code complete."</string>
<string name="fcError" msgid="3327560126588500777">"Connection problem or invalid feature code."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"The web page contains an error."</string>
+ <string name="httpError" msgid="6603022914760066338">"A network error occurred."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"The URL could not be found."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"The site authentication scheme is not supported."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"The server failed to communicate. Try again later."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"The server failed to 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>
@@ -195,6 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Allows application to receive and process emergency broadcast messages. This permission is only available to system applications."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"send SMS messages"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Allows application to send SMS messages. Malicious applications may cost you money by sending messages without your confirmation."</string>
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"send SMS messages with no confirmation"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Allows application to send SMS messages. Malicious applications may cost you money by sending messages without your confirmation."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"read SMS or MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Allows application to read SMS messages stored on your tablet or SIM card. Malicious applications may read your confidential messages."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Allows application to read SMS messages stored on your phone or SIM card. Malicious applications may read your confidential messages."</string>
@@ -264,6 +266,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Allows the holder to bind to the top-level interface of an input method. Should never be needed for normal applications."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"bind to a text service"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Allows the holder to bind to the top-level interface of a text service (e.g. SpellCheckerService). Should never be needed for normal applications."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind to a VPN service"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Allows the holder to bind to the top-level interface of a VPN service. Should never be needed for normal applications."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string>
@@ -321,15 +325,15 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"write contact data"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Allows an application to modify the contact (address) data stored on your tablet. Malicious applications can use this to erase or modify your contact data."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Allows an application to modify the contact (address) data stored on your phone. Malicious applications can use this to erase or modify your contact data."</string>
- <string name="permlab_readProfile" msgid="2211941946684590103">"read profile data"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Allows an application to read all of your personal profile information. Malicious applications can use this to identify you and send your personal information to other people."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"write profile data"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Allows an application to modify your personal profile information. Malicious applications can use this to erase or modify your profile data."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"read calendar events"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Allows an application to read all of the calendar events stored on your tablet. Malicious applications can use this to send your calendar events to other people."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Allows an application to read all of the calendar events stored on your phone. Malicious applications can use this to send your calendar events to other people."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"add or modify calendar events and send emails to guests"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Allows an application to add or change the events on your calendar, which may send emails to guests. Malicious applications can use this to erase or modify your calendar events or to send emails to guests."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"read your profile data"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Allows the application to read personal profile information stored on your device, such as your name and contact information. This means that the application can identify you and send your profile information to others."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"write to your profile data"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Allows the application to change or add to personal profile information stored on your device, such as your name and contact information. This means that other applications can identify you and send your profile information to others."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"read calendar events plus confidential information"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Allows an application to read all calendar events stored on your tablet, including those of friends or colleagues. A malicious application with this permission can extract personal information from these calendars without the owners\' knowledge."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Allows an application to read all calendar events stored on your phone, including those of friends or colleagues. A malicious application with this permission can extract personal information from these calendars without the owners\' knowledge."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"add or modify calendar events and send emails to guests without owners\' knowledge"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Allows an application to send event invitations as the calendar owner and add, remove or change events that you can modify on your device, including those of friends or colleagues. A malicious application with this permission can send spam emails that appear to come from calendar owners, modify events without the owners\' knowledge or add fake events."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"mock location sources for testing"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Create mock location sources for testing. Malicious applications can use this to override the location and/or status returned by real-location sources such as GPS or Network providers."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"access extra location provider commands"</string>
@@ -439,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Allows an application to view the status of all networks."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"full Internet access"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Allows an application to create network sockets."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"write Access Point Name settings"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Allows an application to modify the APN settings, such as Proxy and Port of any APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"change/intercept network settings and traffic"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Allows an application to change network settings and to intercept and inspect all network traffic, for example to change the proxy and port of any APN. Malicious applications could monitor, redirect or modify network packets without your knowledge."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"change network connectivity"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Allows an application to change the state of network connectivity."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Change tethered connectivity"</string>
@@ -720,12 +724,14 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Allows an application to modify the browser\'s history or bookmarks stored on your phone. Malicious applications can use this to erase or modify your browser\'s data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"set alarm in alarm clock"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Allows the application to set an alarm in an installed alarm clock application. Some alarm clock applications may not implement this feature."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"add voicemail"</string>
+ <string name="permdesc_addVoicemail" msgid="4828507394878206682">"Allows the application to add messages to your voicemail inbox."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modify Browser geo-location permissions"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Allows an application to modify the browser\'s geo-location permissions. Malicious applications can use this to allow the sending of location information to arbitrary websites."</string>
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"verify packages"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Allows the application to verify if a package is installable."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bind to a package verifier"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Allows the holder to make requests of package verifiers. Should never be needed for normal applications."</string>
<string name="save_password_message" msgid="767344687139195790">"Do you want the browser to remember this password?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Not now"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Remember"</string>
@@ -738,6 +744,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">"Search"</string>
+ <string name="searchview_description_search" msgid="6749826639098512120">"Search"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Search query"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Clear query"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Submit query"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Voice search"</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"1 month ago"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Before 1 month ago"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +850,7 @@
<string name="cut" msgid="3092569408438626261">"Cut"</string>
<string name="copy" msgid="2681946229533511987">"Copy"</string>
<string name="paste" msgid="5629880836805036433">"Paste"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nothing to paste"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +873,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Select an action"</string>
<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="653922989522758100">"Sorry!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"The application <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has stopped unexpectedly. Please try again."</string>
- <string name="aerr_process" msgid="1551785535966089511">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has stopped unexpectedly. Please try again."</string>
- <string name="anr_title" msgid="3100070910664756057">"Sorry!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Activity <xliff:g id="ACTIVITY">%1$s</xliff:g> (in application <xliff:g id="APPLICATION">%2$s</xliff:g>) is not responding."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Activity <xliff:g id="ACTIVITY">%1$s</xliff:g> (in process <xliff:g id="PROCESS">%2$s</xliff:g>) is not responding."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Application <xliff:g id="APPLICATION">%1$s</xliff:g> (in process <xliff:g id="PROCESS">%2$s</xliff:g>) is not responding."</string>
- <string name="anr_process" msgid="1246866008169975783">"Process <xliff:g id="PROCESS">%1$s</xliff:g> is not responding."</string>
- <string name="force_close" msgid="3653416315450806396">"Force close"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> is not responding. Would you like to close it?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Process <xliff:g id="PROCESS">%1$s</xliff:g> is not responding."\n\n"Would you like to close it?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Report"</string>
<string name="wait" msgid="7147118217226317732">"Wait"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Application redirected"</string>
@@ -901,18 +912,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Alarm volume"</string>
<string name="volume_notification" msgid="2422265656744276715">"Notification volume"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth volume"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ringtone volume"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Call volume"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Media volume"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Notification volume"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Default ringtone"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Default ringtone (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silent"</string>
@@ -926,11 +930,11 @@
<item quantity="one" msgid="1634101450343277345">"Open available Wi-Fi network"</item>
<item quantity="other" msgid="7915895323644292768">"Open Wi-Fi networks available"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"A Wi-Fi network was disabled"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"A Wi-Fi network was temporarily disabled due to bad connectivity."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
+ <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/hotspot operation."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Failed to start 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_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>
@@ -941,7 +945,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancel"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM card removed"</string>
- <string name="sim_removed_message" msgid="2064255102770489459">"The mobile network will be unavailable until you replace the SIM card."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"The mobile network will be unavailable until you restart with a valid SIM card inserted."</string>
<string name="sim_done_button" msgid="827949989369963775">"Done"</string>
<string name="sim_added_title" msgid="3719670512889674693">"SIM card added"</string>
<string name="sim_added_message" msgid="1209265974048554242">"You must restart your device to access the mobile network."</string>
@@ -971,7 +975,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB operation failed"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB operation failed"</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>
@@ -1071,8 +1075,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Failed to erase USB storage."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Failed to erase 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="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>
@@ -1096,22 +1100,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Select an account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Increment"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"ticked"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"not ticked"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"selected"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"not selected"</string>
+ <string name="switch_on" msgid="551417728476977311">"on"</string>
+ <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="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>
@@ -1124,14 +1120,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"Tap to enable"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"Tap 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_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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Security certificate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"This certificate is valid."</string>
@@ -1151,4 +1147,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 3814f963e362..0e9f6054e469 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Código de función completo."</string>
<string name="fcError" msgid="3327560126588500777">"Problema de conexión o código de función no válido."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Aceptar"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La página web contiene un error."</string>
+ <string name="httpError" msgid="6603022914760066338">"Se ha producido un error en la red."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"No se ha podido encontrar la dirección URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"No se admite el programa de autenticación del sitio."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"El servidor no envía comunicaciones. Vuelve a intentarlo más tarde."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"El servidor no envía comunicaciones. Vuelve a intentarlo más tarde."</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>
@@ -195,6 +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">"Admite que la aplicación envíe mensajes SMS. Las aplicaciones maliciosas te pueden costar dinero si envías mensajes sin su confirmación."</string>
+ <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 si las aplicaciones maliciosas envían mensajes 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 los mensajes SMS almacenados en tu tablet o tarjeta SIM. Las aplicaciones maliciosas pueden leer tus mensajes confidenciales."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Admite que la aplicación lea los mensajes SMS almacenados en tu teléfono o tarjeta SIM. Las aplicaciones maliciosas pueden leer tus mensajes confidenciales."</string>
@@ -263,7 +265,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vincular a un método de entrada"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite al propietario vincularse a la interfaz de nivel superior de un método de entrada. Se debe evitar utilizarlo en aplicaciones normales."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a un servicio de texto"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de texto (por ejemplo, SpellCheckerService). Nunca debe ser necesario para las aplicaciones normales."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de texto (por ejemplo, SpellCheckerService). Las aplicaciones normales no deberían necesitar este permiso."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincular con un servicio de VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permite al titular vincularse a la interfaz de nivel superior del servicio de VPN. Se debe evitar utilizarlo en aplicaciones normales."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un fondo de pantalla"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite al propietario vincularse a la interfaz de nivel superior de un fondo de pantalla. Se debe evitar utilizarlo en aplicaciones normales."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a un servicio de widget"</string>
@@ -321,15 +325,15 @@
<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 (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="2211941946684590103">"leer los datos del perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Permite que una aplicación lea toda la información de tu perfil personal. Las aplicaciones maliciosas pueden utilizar esto para identificarte y enviar tu información personal a otras personas."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"escribir datos del perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Permite que una aplicación modifique la información de tu perfil personal. Las aplicaciones maliciosas pueden utilizar esto para borrar o modificar los datos de tu perfil."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"Leer eventos del calendario"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permite que una aplicación lea todos los eventos de calendario almacenados en tu tablet. Las aplicaciones maliciosas pueden utilizarlo para enviar tus eventos de calendario a otras personas."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Admite que una aplicación lea todos los eventos de calendario almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para enviar tus eventos de calendario a otras personas."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"Agregar o cambiar eventos del calendario y enviar un correo electrónico a los invitados"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permite a una aplicación agregar o cambiar eventos en tu calendario, los cuales pueden enviar un correo electrónico a los invitados. Las aplicaciones malintencionadas pueden usar esto para borrar o modificar tus eventos del calendario o para enviar un correo electrónico a los invitados."</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="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="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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"Agregar o modificar los eventos de calendario y enviar un correo electrónico a los invitados sin que los propietarios lo sepan"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permite que una aplicación envíe invitaciones a eventos como si fuera el propietario del calendario, además de agregar, eliminar o cambiar los eventos que puedes modificar en tu dispositivo, incluidos los eventos de tus amigos o compañeros de trabajo. Una aplicación maliciosa con este permiso puede enviar correos electrónicos de spam que parezcan provenir de los propietarios del calendario, modificar eventos sin que los propietarios lo sepan o agregar eventos falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"crear fuentes de ubicación de prueba"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Crea fuentes de ubicación de prueba. Las aplicaciones maliciosas pueden utilizarlo para invalidar la ubicación o el estado que arrojen las fuentes de ubicación real, como GPS o proveedores de red."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"acceder a comandos adicionales del proveedor del lugar"</string>
@@ -439,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Admite una aplicación que ve el estado de todas las redes."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"acceso total a Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Admite una aplicación que crea conectores de red."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"escribir configuración del Nombre del punto de acceso"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Admite una aplicación que modifica la configuración de APN, como 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 cambie 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 maliciosas pueden controlar, redirigir o modificar los paquetes de red sin que lo sepas."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"cambiar la conectividad de la 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 la conectividad de anclaje a red"</string>
@@ -720,12 +724,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite a una aplicación modificar el historial y los marcadores del navegador almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar tus datos."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"configurar alarma en reloj alarma"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que la aplicación configure una alarma en una aplicación instalada de reloj alarma. Es posible que algunas aplicaciones de reloj alarma no implementen esta función."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"agregar correo de voz"</string>
+ <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="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>
@@ -738,6 +748,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"hace 1 mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Anterior a 1 mes atrás"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +859,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada que pegar"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +882,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Seleccionar una acción"</string>
<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="653922989522758100">"¡Lo sentimos!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) se ha detenido de forma imprevista. Vuelve a intentarlo."</string>
- <string name="aerr_process" msgid="1551785535966089511">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> se ha detenido de forma imprevista. Vuelve a intentarlo."</string>
- <string name="anr_title" msgid="3100070910664756057">"¡Lo sentimos!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> (en la aplicación <xliff:g id="APPLICATION">%2$s</xliff:g>) no responde."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> (en proceso <xliff:g id="PROCESS">%2$s</xliff:g>) no responde."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (en proceso <xliff:g id="PROCESS">%2$s</xliff:g>) no responde."</string>
- <string name="anr_process" msgid="1246866008169975783">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no responde."</string>
- <string name="force_close" msgid="3653416315450806396">"Forzar cierre"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> no responde. ¿Quieres cerrarla?"</string>
+ <string name="anr_process" msgid="306819947562555821">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no responde."\n\n"¿Quieres cerrarlo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"Aceptar"</string>
<string name="report" msgid="4060218260984795706">"Notificar"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Se redirigió la aplicación"</string>
@@ -901,18 +921,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volumen de la alarma"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volumen de notificación"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volumen"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volumen de Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volumen del tono de llamada"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volumen de la llamada"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volumen de los medios"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volumen de notificación"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Tono de llamada predeterminado"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Tono de llamada predeterminado (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silencioso"</string>
@@ -926,14 +939,14 @@
<item quantity="one" msgid="1634101450343277345">"Abrir red disponible de Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Abrir redes disponibles de Wi-Fi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Una red Wi-Fi se ha inhabilitado."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Una red Wi-Fi ha sido temporalmente inhabilitada debido a mala conectividad."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No se pudo conectar a la red Wi-Fi."</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Error al iniciar el Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Error al 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 llamado para continuar."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"El llamado a WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> necesita ser ingresado en el dispositivo de pares <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para que la configuración de la conexión continúe."</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>
<string name="select_character" msgid="3365550120617701745">"Insertar caracteres"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicación desconocida"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Enviando mensajes SMS"</string>
@@ -941,7 +954,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"La red para celulares no estará disponible hasta que cambies la tarjeta SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"La red para celulares no estará disponible hasta que reinicies, luego de insertar una tarjeta SIM válida."</string>
<string name="sim_done_button" msgid="827949989369963775">"Finalizado"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Tarjeta SIM agregada"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Debes reiniciar tu dispositivo para acceder a la red para celulares."</string>
@@ -971,7 +984,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Error en el funcionamiento del USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Error en el funcionamiento 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>
@@ -1071,8 +1084,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"No pudo borrar el almacenamiento USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"No se pudo borrar la 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="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>
@@ -1096,22 +1109,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decremento"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"marcado"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"no marcado"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"seleccionado"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"No se ha seleccionado."</string>
+ <string name="switch_on" msgid="551417728476977311">"Activado"</string>
+ <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="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>
@@ -1124,14 +1129,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"pulsa para habilitarla"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"pulsa para habilitarla"</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_4g_limit_snoozed_title (1106562779311209039) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
@@ -1151,4 +1156,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index b8516e4cb004..2375f0192ef9 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Código de función completo"</string>
<string name="fcError" msgid="3327560126588500777">"Se ha producido un problema de conexión o el código de la función no es válido."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Aceptar"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La página web contiene un error."</string>
+ <string name="httpError" msgid="6603022914760066338">"Se ha producido un error de red."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"No se ha podido encontrar la URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"No se admite el esquema de autenticación del sitio."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"El servidor no ha podido establecer la comunicación. Vuelve a intentarlo más tarde."</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="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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite enlazar con la interfaz de nivel superior de un método de introducción de texto. No debe ser necesario para las aplicaciones normales."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"enlazar con un servicio de texto"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Permite enlazar con la interfaz de nivel superior de un servicio de texto (por ejemplo, SpellCheckerService). Las aplicaciones normales no deberían necesitar este permiso."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"enlazar con un servicio VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permite enlazar con la interfaz de nivel superior de un servicio de VPN. Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"enlazar con un fondo de pantalla"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite enlazar con la interfaz de nivel superior de un fondo de pantalla. No debe ser necesario para las aplicaciones normales."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"enlazar con un servicio de widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"leer datos de perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"escribir datos de perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"leer eventos de calendario"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permite que una aplicación lea todos los eventos de calendario almacenados en el tablet. Las aplicaciones malintencionadas pueden utilizar este permiso para enviar tus eventos de calendario a otras personas."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permite que una aplicación lea todos los eventos de calendario almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para enviar tus eventos de calendario a otras personas."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"añadir o modificar eventos de calendario y enviar mensajes de correo electrónico a los invitados"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permite que una aplicación añada o modifique los eventos de tu calendario, que puede enviar mensajes de correo electrónico a los invitados. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar tus eventos de calendario o para enviar mensajes a los invitados."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"añadir o modificar eventos de calendario y enviar mensajes a los invitados sin el consentimiento de los propietarios"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permite que una aplicación envíe invitaciones a eventos como el propietario del calendario y que añada, elimine o modifique los eventos que el usuario puede modificar en su dispositivo, incluidos los eventos de amigos y de compañeros de trabajo. Las aplicaciones malintencionadas con este permiso pueden enviar mensajes de spam procedentes de los propietarios de los calendarios, así como modificar eventos sin el consentimiento de los propietarios o añadir eventos falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"simular fuentes de ubicación para prueba"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Crear fuentes de origen simuladas para realizar pruebas. Las aplicaciones malintencionadas pueden utilizar este permiso para sobrescribir la ubicación o el estado devueltos por orígenes de ubicación reales, tales como los proveedores de red o GPS."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"acceder a comandos de proveedor de ubicación adicional"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"escribir la configuración de nombre de punto de acceso"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"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>
+ <!-- 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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite que una aplicación modifique la información de los marcadores o del historial del navegador almacenada en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar los datos del navegador."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"establecer alarma en un reloj"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite a la aplicación establecer una alarma en una aplicación de reloj instalada. Es posible que algunas aplicaciones de reloj no incluyan esta función."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"añadir buzón de voz"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Hace un mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Hace más de un mes"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Portapapeles vacío"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Seleccionar una acción"</string>
<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="653922989522758100">"Lo sentimos."</string>
- <string name="aerr_application" msgid="4683614104336409186">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) se ha interrumpido inesperadamente. Inténtalo de nuevo."</string>
- <string name="aerr_process" msgid="1551785535966089511">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> se ha interrumpido inesperadamente. Inténtalo de nuevo."</string>
- <string name="anr_title" msgid="3100070910664756057">"Lo sentimos."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="APPLICATION">%2$s</xliff:g> en aplicación) no está respondiendo."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> en curso) no está respondiendo."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> en curso) no está respondiendo."</string>
- <string name="anr_process" msgid="1246866008169975783">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no está respondiendo."</string>
- <string name="force_close" msgid="3653416315450806396">"Forzar cierre"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> no responde. ¿Quieres cerrarla?"</string>
+ <string name="anr_process" msgid="306819947562555821">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no responde."\n\n"¿Quieres cerrarlo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"ACEPTAR"</string>
<string name="report" msgid="4060218260984795706">"Informe"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicación redireccionada"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Red Wi-Fi abierta disponible"</item>
<item quantity="other" msgid="7915895323644292768">"Redes Wi-Fi abiertas disponibles"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Se ha inhabilitado una red Wi-Fi."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Se ha inhabilitado temporalmente una red Wi-Fi por mala conectividad."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No se ha podido establecer conexión con la red Wi-Fi."</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Error al iniciar Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Error al 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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"La red móvil volverá a estar disponible cuando sustituyas la tarjeta SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"No se ha podido realizar la operación USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"No se ha podido realizar la operación 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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Error al borrar almacenamiento USB"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Error al borrar la 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminuir"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"seleccionado"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"no seleccionado"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"seleccionado"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"no seleccionado"</string>
+ <string name="switch_on" msgid="551417728476977311">"activado"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tocar para habilitar"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index a9c1926caae8..3eba12967cec 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"کد ویژگی کامل شد."</string>
<string name="fcError" msgid="3327560126588500777">"مشکل در اتصال یا کد ویژگی نامعتبر."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"تأیید"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"این صفحه وب دارای یک خطاست."</string>
+ <string name="httpError" msgid="6603022914760066338">"یک خطای شبکه روی داد."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"آدر س اینترنتی یافت نشد."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"طرح کلی تأیید اعتبار سایت پشتیبانی نمی شود."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"تأیید اعتبار ناموفق بود."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"تأیید اعتبار از طریق سرور پروکسی انجام نشد."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"اتصال به سرور برقرار نشد."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"سرور نتوانست ارتباط برقرار کند. بعداً دوباره امتحان کنید."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_readSms" msgid="4085333708122372256">"خواندن پیامک یا MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"به برنامه اجازه می دهد پیامک های ذخیره شده در رایانه لوحی شما یا سیم کارت را بخواند. برنامه های مضر می توانند پیام های محرمانه شما را بخوانند."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"به برنامه کاربردی اجازه می دهد پیامک های ذخیره شده در گوشی شما یا سیم کارت را بخواند. برنامه های مضر می توانند پیام های محرمانه شما را بخوانند."</string>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"پیوند شده به روش ورودی"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"به نگهدارنده اجازه می دهد به رابط سطح بالای یک روش ورودی متصل شود. هرگز برای برنامه های معمولی مورد نیاز نیست."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"اتصال به یک سرویس متنی"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"به دارنده اجازه می دهد خود را به یک رابط سطح بالای خدمات متنی بچسباند (برای مثال SpellCheckerService). برای برنامه های عادی نیاز نیست."</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>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"پیوند شده به تصویر زمینه"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"به نگهدارنده اجازه می دهد که به رابط سطح بالای تصویر زمینه متصل شود. هرگز برای برنامه های معمولی مورد نیاز نیست."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"اتصال به یک سرویس ابزارک"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"خواندن داده های نمایه"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"به برنامه امکان می دهد تا تمام اطلاعات نمایه شخصی شما را بخواند. برنامه های مضر می توانند از این حالت برای شناسایی شما و ارسال اطلاعات شخصی شما به سایر افراد استفاده کنند."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"نوشتن داده های نمایه"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"به یک برنامه امکان می دهد تا اطلاعات نمایه شخصی شما را تغییر دهد. برنامه های مضر می توانند از این حالت برای پاک کردن یا تغییر داده های نمایه شما استفاده کنند."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"خواندن رویدادهای تقویم"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"به یک برنامه کاربردی اجازه می دهد که تمام رویدادهای تقویم ذخیره شده در رایانه لوحی شما را بخواند. برنامه های مضر می توانند از این ویژگی برای ارسال رویدادهای تقویم شما به سایر افراد استفاده کنند."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"به یک برنامه کاربردی اجازه می دهد که تمام رویدادهای تقویم ذخیره شده در گوشی شما را بخواند. برنامه های کاربردی مضر می توانند از این ویژگی برای ارسال رویدادهای تقویم شما به سایر افراد استفاده کنند."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"افزودن یا اصلاح رویدادهای تقویم و ارسال ایمیل به مهمانان"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"به یک برنامه کاربردی اجازه می دهد که رویدادهای تقویم شما را، که ممکن است برای مهمانان ایمیل ارسال کند، اضافه کرده یا حذف کند. برنامه های مضر می توانند از این امکان برای پاک کردن یا تغییر رویدادهای تقویم و یا ارسال ایمیل به مهمانان استفاده کنند."</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_accessMockLocation" msgid="8688334974036823330">"منابع مکان کاذب برای تست"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"منابع مکان کاذب را برای تست ایجاد کنید. برنامه های مضر می توانند از این امکان برای لغو مکان و وضعیت بازگردانده شده توسط منابع مکان واقعی مانند GPS یا ارائه دهندگان شبکه استفاده کنند."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"دسترسی به فرمان های بیشتر ارائه دهنده مکان"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"به یک برنامه کاربردی اجازه می دهد وضعیت مربوط به تمام شبکه ها را مشاهده کند."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"دسترسی کامل به اینترنت"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"به یک برنامه کاربردی اجازه می دهد سوکت های شبکه را ایجاد کند."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"نوشتن تنظیمات نام نقطه دستیابی"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"به یک برنامه کاربردی اجازه می دهد تنظیمات APN، از قبیل پروکسی و درگاه APN، را تغییر دهد."</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_changeNetworkState" msgid="958884291454327309">"تغییر قابلیت اتصال شبکه"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"به یک برنامه کاربردی اجازه می دهد وضعیت اتصال شبکه را تغییر دهد."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"تغییر قابلیت اتصال داده با سیم"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"به یک برنامه کاربردی اجازه می دهد سابقه مرورگر یا نشانک ذخیره شده در گوشی شما را تغییر دهد. برنامه های مضر می توانند از این امکان برای حذف یا تغییر داده های مرورگر شما استفاده کنند."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"تنظیم هشدار در ساعت زنگ دار"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"به برنامه کاربردی برای تنظیم یک هشدار در یک برنامه ساعت زنگ دار نصب شده اجازه می دهد. در برخی از برنامه های ساعت زنگ دار ممکن است این ویژگی اجرا نشود."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"افزودن پست صوتی"</string>
+ <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="save_password_message" msgid="767344687139195790">"می خواهید مرورگر این رمز ورود را به خاطر داشته باشد؟"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"اکنون خیر"</string>
<string name="save_password_remember" msgid="6491879678996749466">"به خاطر سپردن"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 ماه قبل"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل از 1 ماه گذشته"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"برش"</string>
<string name="copy" msgid="2681946229533511987">"کپی"</string>
<string name="paste" msgid="5629880836805036433">"جای گذاری"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"چیزی برای جای گذاری نیست"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"جایگزینی"</string>
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"انتخاب یک عملکرد"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"انتخاب یک برنامه کاربردی برای دستگاه USB"</string>
<string name="noApplications" msgid="1691104391758345586">"هیچ برنامه ای نمی تواند این عملکرد را اجرا کند."</string>
- <string name="aerr_title" msgid="653922989522758100">"متأسفیم!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"برنامه کاربردی <xliff:g id="APPLICATION">%1$s</xliff:g> ( فرآیند <xliff:g id="PROCESS">%2$s</xliff:g>) به طور غیر منتظره ای متوقف شد. لطفاً دوباره امتحان کنید."</string>
- <string name="aerr_process" msgid="1551785535966089511">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> به طور غیرمنتظره ای متوقف شده است. لطفاً دوباره امتحان کنید."</string>
- <string name="anr_title" msgid="3100070910664756057">"متأسفیم!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"فعالیت <xliff:g id="ACTIVITY">%1$s</xliff:g> (در برنامه <xliff:g id="APPLICATION">%2$s</xliff:g>) پاسخ نمی دهد."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"فعالیت <xliff:g id="ACTIVITY">%1$s</xliff:g> (در فرآیند <xliff:g id="PROCESS">%2$s</xliff:g>) پاسخ نمی دهد."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"برنامه کاربردی <xliff:g id="APPLICATION">%1$s</xliff:g> (در فرآیند <xliff:g id="PROCESS">%2$s</xliff:g>) پاسخ نمی دهد."</string>
- <string name="anr_process" msgid="1246866008169975783">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> پاسخ نمی دهد."</string>
- <string name="force_close" msgid="3653416315450806396">"بستن اجباری"</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="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="force_close" msgid="8346072094521265605">"تأیید"</string>
<string name="report" msgid="4060218260984795706">"گزارش"</string>
<string name="wait" msgid="7147118217226317732">"منتظر بمانید"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"برنامه هدایت مجدد شد"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"میزان صدای هشدار"</string>
<string name="volume_notification" msgid="2422265656744276715">"میزان صدای اعلان"</string>
<string name="volume_unknown" msgid="1400219669770445902">"میزان صدا"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"شبکه Wi-Fi موجود را باز کنید"</item>
<item quantity="other" msgid="7915895323644292768">"شبکه های Wi-Fi موجود را باز کنید"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"یک شبکه Wi-Fi غیرفعال شده بود"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"یک شبکه Wi-Fi به علت اتصال بد به طور موقت غیرفعال شده است."</string>
+ <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_failed_message" msgid="6467545523417622335">"شروع 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> دریافت شد. برای ادامه پین را وارد کنید."</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>
+ <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> دریافت شد. برای قبول کردن، تأیید را کلیک کنید."</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>
+ <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>
<string name="select_character" msgid="3365550120617701745">"درج نویسه"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"برنامه ناشناس"</string>
<string name="sms_control_title" msgid="7296612781128917719">"ارسال پیامک ها"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"تا زمانی که سیم کارت را عوض نکنید شبکه تلفن همراه در دسترس نخواهد بود."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"عملکرد USB انجام نشد"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"حافظه USB پاک نشد."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"کارت 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"برای فعال کردن ضربه بزنید"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"گواهی امنیتی"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"این گواهی معتبر است."</string>
@@ -1149,6 +1156,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="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 aaf170141394..144160f22189 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Ominaisuuskoodi valmis."</string>
<string name="fcError" msgid="3327560126588500777">"Yhteysongelma tai virheellinen ominaisuuskoodi."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Verkkosivulla on virhe."</string>
+ <string name="httpError" msgid="6603022914760066338">"Tapahtui verkkovirhe."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL-osoitetta ei löydy."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Sivuston todennusmallia ei tueta."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Ei vastausta palvelimelta. Yritä myöhemmin uudelleen."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -262,8 +266,10 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Antaa sovelluksien tarkkailla painamiasi näppäimiä jopa toisten sovellusten käytön yhteydessä (kuten salasanoja syötettäessä). Ei tavallisten sovelluksien käyttöön."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"sitoudu syöttötapaan"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Antaa sovelluksen sitoutua syöttötavan ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
- <string name="permlab_bindTextService" msgid="7358378401915287938">"sitoudu tekstipalveluun"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Sovellus voi sitoutua tekstipalvelun (esim. SpellCheckerService) korkeimman tason käyttöliittymään. Ei pitäisi tarvita tavallisissa sovelluksissa."</string>
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"tekstipalveluun sitoutuminen"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Antaa sovelluksen sitoutua tekstipalvelun (kuten SpellCheckerServicen) ylätason liittymään. Tavallisten sovellusten ei pitäisi koskaan tarvita tätä."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"sitoudu VPN-palveluun"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Antaa sovelluksen sitoutua VPN-palvelun ylemmän tason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sido taustakuvaan"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Antaa sovelluksen sitoutua taustakuvan ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sitoudu widget-palveluun"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"profiilitietojen lukeminen"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Sallii sovelluksen lukea yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä käyttäjien tunnistamiseen ja henkilötietojen levittämiseen muille."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"profiilitietojen kirjoittaminen"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Sallii sovelluksen muokata yksityisiä profiilitietoja. Haittaohjelmat voivat käyttää tätä profiilitietojen poistamiseen tai muokkaamiseen."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"lue kalenteritapahtumia"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Antaa sovelluksen tarkastella kaikkia tablet-laitteellesi tallennettuja kalenteritapahtumia. Haittasovellukset voivat käyttää tätä tietojesi lähettämiseen muille ihmisille."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Antaa sovelluksen lukea kaikki puhelimeesi tallennetut kalenteritapahtumat. Haittasovellukset voivat käyttää tätä ominaisuutta kalenteritapahtumiesi lähettämiseen muille."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"lisää tai muokkaa kalenteritapahtumia ja lähetä sähköpostia vierailijoille"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Antaa sovelluksen lisätä tapahtumia kalenteriin tai muuttaa tapahtumia, jolloin vierailijoillesi saatetaan lähettää sähköpostia. Haitalliset sovellukset saattavat käyttää tätä kalenteritapahtumiesi poistamiseen tai muokkaamiseen tai sähköpostien lähettämiseen vierailijoille."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"lisää tai muokkaa kalenteritapahtumia ja lähetä sähköpostia vieraille ilman omistajien lupaa"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Antaa sovelluksen lähettää tapahtumakutsuja kalenterin omistajana ja lisätä, poistaa ja muuttaa tapahtumia, joita voit muokata laitteellasi (myös kavereiden ja työkavereiden lisäämiä). Haitalliset sovellukset voivat lähettää sähköposteja, jotka näyttävät tulevan kalenterin omistajilta, muokata tapahtumia ilman omistajien lupaa tai lisätä väärennettyjä tapahtumia."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"imitoi sijaintilähteitä testaustarkoituksissa"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Luo imitoituja sijaintilähteitä testaustarkoituksissa. Haitalliset sovellukset voivat käyttää tätä oikeiden sijaintilähteiden kuten GPS:n tai verkko-operaattoreiden palauttamien sijaintien ja/tai tilojen ohittamiseen."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"käytä lisää sijainnintarjoajakomentoja"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"kirjoita tukiaseman nimiasetuksia"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Antaa sovelluksen muokata APN-asetuksia, kuten APN:n välityspalvelinta tai porttia."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Antaa sovelluksen muokata puhelimeen tallennettuja selaimen historia- ja kirjanmerkkitietoja. Haitalliset sovellukset voivat käyttää tätä pyyhkiäkseen tai muokatakseen selaimen tietoja."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"aseta herätys herätyskelloon"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Antaa sovelluksen asettaa herätyksen asennettuun herätyskellosovellukseen. Kaikki herätyskellosovellukset eivät välttämättä käytä tätä ominaisuutta."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"lisää vastaajaviesti"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"kuukausi sitten"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Yli kuukausi sitten"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Leikkaa"</string>
<string name="copy" msgid="2681946229533511987">"Kopioi"</string>
<string name="paste" msgid="5629880836805036433">"Liitä"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ei mitään liitettävää"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,26 +884,25 @@
<string name="chooseActivity" msgid="1009246475582238425">"Valitse toiminto"</string>
<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="653922989522758100">"Pahoittelemme!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Sovellus <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessi <xliff:g id="PROCESS">%2$s</xliff:g>) pysähtyi yllättäen. Yritä uudelleen."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> pysähtyi yllättäen. Yritä uudelleen."</string>
- <string name="anr_title" msgid="3100070910664756057">"Pahoittelemme!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Toiminto <xliff:g id="ACTIVITY">%1$s</xliff:g> (sovelluksessa <xliff:g id="APPLICATION">%2$s</xliff:g>) ei vastaa."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Toiminto <xliff:g id="ACTIVITY">%1$s</xliff:g> (prosessissa <xliff:g id="PROCESS">%2$s</xliff:g>) ei vastaa."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Sovellus <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessissa <xliff:g id="PROCESS">%2$s</xliff:g>) ei vastaa."</string>
- <string name="anr_process" msgid="1246866008169975783">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> ei vastaa."</string>
- <string name="force_close" msgid="3653416315450806396">"Pakota sulkeutumaan"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> ei vastaa. Haluatko sulkea sen?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Prosessi <xliff:g id="PROCESS">%1$s</xliff:g> ei vastaa."\n\n"Haluatko sulkea sen?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Ilmoita"</string>
<string name="wait" msgid="7147118217226317732">"Odota"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Sovellus uudelleenohjasi"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> on nyt käynnissä."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> käynnistettiin alun perin."</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">"Asteikko"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Näytä aina"</string>
+ <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="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> käynnissä"</string>
@@ -904,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -929,32 +941,26 @@
<item quantity="one" msgid="1634101450343277345">"Avoin wifi-verkko käytettävissä"</item>
<item quantity="other" msgid="7915895323644292768">"Avoimia wifi-verkkoja käytettävissä"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wifi-verkko poistettu käytöstä"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wifi-verkko oli tilapäisesti pois käytöstä huonon yhteyden vuoksi."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wifi-yhteyden muodostaminen epäonnistui"</string>
+ <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-yhteyspistetoiminto poistetaan käytöstä."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Suoran wifi-yhteyden käynnistäminen epäonnistui"</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_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 <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>
+ <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>
<string name="select_character" msgid="3365550120617701745">"Lisää merkki"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Tuntematon sovellus"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Tekstiviestien lähettäminen"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Olet lähettämässä suurta määrää tekstiviestejä. Jatka valitsemalla OK tai peruuta lähetys valitsemalla Peruuta."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Peruuta"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <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">"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_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>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Käynnistä uudelleen"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Aseta aika"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Aseta päivämäärä"</string>
<string name="date_time_set" msgid="5777075614321087758">"Aseta"</string>
@@ -980,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-toiminto epäonnistui"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1080,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">" USB-tallennustilan tyhjentäminen epäonnistui."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"SD-kortin tyhjentäminen epäonnistui."</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="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>
@@ -1105,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Valitse tili"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Lisää"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähennä"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"valittu"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"ei valittu"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"valittu"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"ei valittu"</string>
+ <string name="switch_on" msgid="551417728476977311">"käytössä"</string>
+ <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="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>
@@ -1133,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"ota käyttöön napauttamalla"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ota käyttöön napauttamalla"</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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Suojausvarmenne"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Varmenne on voimassa."</string>
@@ -1160,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 526b16bcacc2..b72c9b4d008f 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Code de service terminé"</string>
<string name="fcError" msgid="3327560126588500777">"Problème de connexion ou code de service non valide"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La page Web contient une erreur."</string>
+ <string name="httpError" msgid="6603022914760066338">"Une erreur réseau s\'est produite."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL introuvable."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Le modèle d\'authentification du site n\'est pas pris en charge."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Échec de la communication avec le serveur. Veuillez réessayer ultérieurement."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Échec de la communication 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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"Association à un mode de saisie"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permet au support de se connecter à l\'interface de plus haut niveau d\'un mode de saisie. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
<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 normales."</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="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>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"lire les données de profil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"modifier les données de profil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"lire des événements de l\'agenda"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permet à une application de lire tous les événements de l\'agenda enregistrés sur votre tablette. Des applications malveillantes peuvent exploiter cette fonctionnalité pour envoyer les événements de votre agenda à d\'autres personnes."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permet à une application de lire tous les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent exploiter cette fonctionnalité pour envoyer les événements de votre agenda à d\'autres personnes."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"ajouter ou modifier des événements d\'agenda et envoyer des e-mails aux invités"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permet aux applications d\'ajouter ou de modifier des événements dans votre agenda, qui est susceptible d\'envoyer des e-mails aux invités. Des applications malveillantes peuvent exploiter cette fonctionnalité pour supprimer ou modifier des événements de l\'agenda ou envoyer des e-mails aux invités."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"ajouter ou modifier des événements d\'agenda et envoyer des e-mails aux invités à l\'insu des propriétaires"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permet à une application d\'envoyer des invitations à des événements au nom du propriétaire de l\'agenda et d\'ajouter, supprimer et modifier les événements que vous pouvez modifier sur votre appareil, y compris ceux de vos amis ou de vos collègues. Une application malveillante disposant de cette autorisation peut envoyer des e-mails indésirables en se faisant passer pour un propriétaire d\'agenda, modifier les événements à l\'insu du propriétaire ou ajouter des événements fictifs."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"Création de sources de localisation fictives à des fins de test"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Permet de créer des sources de localisation fictives à des fins de test. Des applications malveillantes peuvent utiliser cette fonctionnalité pour remplacer la position géographique et/ou l\'état fournis par des sources réelles comme le GPS ou les fournisseurs d\'accès."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"Accès aux commandes de fournisseur de position géographique supplémentaires"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"Écriture des paramètres \"Nom des points d\'accès\""</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"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>
+ <!-- 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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permet à une application de modifier l\'historique du navigateur ou les favoris enregistrés sur votre téléphone. Des applications malveillantes peuvent exploiter cette fonction pour effacer ou modifier les données de votre navigateur."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"régler le réveil"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permet à l\'application de définir une alarme dans un utilitaire faisant office de réveil. Certains réveils risquent ne pas prendre en charge cette fonctionnalité."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"ajouter un message vocal"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Couper"</string>
<string name="copy" msgid="2681946229533511987">"Copier"</string>
<string name="paste" msgid="5629880836805036433">"Coller"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Presse-papiers vide"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Sélectionner une action"</string>
<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="653922989522758100">"Désolé !"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Fermeture soudaine de l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>). Merci de réessayer."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> s\'est interrompu de façon inopinée. Merci de réessayer."</string>
- <string name="anr_title" msgid="3100070910664756057">"Désolé !"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"L\'activité <xliff:g id="ACTIVITY">%1$s</xliff:g> (de l\'application <xliff:g id="APPLICATION">%2$s</xliff:g>) ne répond pas."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"L\'activité <xliff:g id="ACTIVITY">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) ne répond pas."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) ne répond pas."</string>
- <string name="anr_process" msgid="1246866008169975783">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> ne répond pas."</string>
- <string name="force_close" msgid="3653416315450806396">"Forcer la fermeture"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> ne répond pas. Voulez-vous la fermer ?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> ne répond pas."\n\n"Voulez-vous le fermer ?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Attendre"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Application redirigée"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Réseau Wi-Fi ouvert disponible"</item>
<item quantity="other" msgid="7915895323644292768">"Réseaux Wi-Fi ouverts disponibles"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Un réseau Wi-Fi a été désactivé"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Un réseau Wi-Fi a été temporairement désactivé en raison d\'une mauvaise connectivité."</string>
- <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi en commande directe"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Lancer le Wi-Fi en commande directe. Cela désactive le fonctionnement du Wi-Fi client ou via un point d\'accès."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Impossible de démarrer le Wi-Fi en commande directe."</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Demande de configuration du Wi-Fi en commande directe 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 en commande directe 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">"Pour 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>
+ <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_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_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>
<string name="select_character" msgid="3365550120617701745">"Insérer un caractère"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Application inconnue"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Envoi de messages SMS"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Le réseau mobile sera indisponible tant que vous n\'aurez pas remplacé la carte SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Échec du fonctionnement USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Échec du fonctionnement 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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Impossible d\'effacer la mémoire de stockage USB"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Impossible d\'effacer 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Sélectionner un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"coché"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"non coché"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"sélectionné"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"non sélectionné"</string>
+ <string name="switch_on" msgid="551417728476977311">"activé"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"appuyer pour activer"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"appuyer pour 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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de sécurité"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Ce certificat est valide."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-h720dp/dimens.xml b/core/res/res/values-h720dp/dimens.xml
index 37dee8e9a903..7efe32262fcc 100644
--- a/core/res/res/values-h720dp/dimens.xml
+++ b/core/res/res/values-h720dp/dimens.xml
@@ -25,4 +25,10 @@
<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>
+
+ <integer name="preference_screen_header_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
+ <integer name="preference_fragment_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
+
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index a61d472e8afd..e1e54fd15825 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Kôd značajke je potpun."</string>
<string name="fcError" msgid="3327560126588500777">"Problem s vezom ili nevažeći kôd značajke."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"U redu"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Web-stranica sadrži pogrešku."</string>
+ <string name="httpError" msgid="6603022914760066338">"Došlo je do pogreške mreže."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL nije bilo moguće pronaći."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Shema provjere autentičnosti nije podržana."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Uspješna provjera autentičnosti."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Provjera autentičnosti preko proxy poslužitelja nije bila uspješna."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Veza s poslužiteljem nije bila uspješna."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Nije uspjela komunikacija s poslužiteljem. Pokušajte ponovo kasnije."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Nije uspjela komunikacija s poslužiteljem. Pokušajte ponovo kasnije."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Veza s poslužiteljem privremeno je zaustavljena."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Stranica sadrži previše poslužiteljskih preusmjeravanja."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol nije podržan."</string>
@@ -195,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Nositelju omogućuje da se veže uz sučelje najviše razine za metodu unosa. Nikad ne bi trebalo koristiti za uobičajene aplikacije."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"vezanje na tekstualnu uslugu"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Omogućuje korisniku povezivanje s najvišom razinom sučelja tekstualne usluge (npr. SpellCheckerService). Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"vezanje na VPN uslugu"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Nositelju omogućuje vezanje uz sučelje najviše razine Vpn usluge. Nije nikad potrebno za uobičajene aplikacije."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezano s pozadinskom slikom"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Nositelju omogućuje da se veže uz sučelje najviše razine za pozadinsku sliku. Nikad ne bi trebalo koristiti za uobičajene aplikacije."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vezanje na uslugu widgeta"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"Pročitaj podatke profila"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"zapisivanje podataka profila"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Aplikaciji omogućuje izmjenu informacija o osobnom profilu. Zlonamjerne aplikacije mogu to upotrijebiti za brisanje ili izmjenu podataka o profilu."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"čitanje kalendarskih događaja"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Aplikaciji omogućuje čitanje svih događaja na kalendaru koji su pohranjeni na tabletnom uređaju. Zlonamjerne aplikacije to mogu upotrijebiti za slanje događaja na kalendaru drugim ljudima."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Aplikaciji omogućuje čitanje svih kalendarskih događaja pohranjenih na računalu. Zlonamjerne aplikacije to mogu koristiti za slanje kalendarskih događaja drugim ljudima."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"dodavanje ili izmjena kalendarskih događaja i slanje e-pošte gostima"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Aplikaciji omogućuje dodavanje i promjenu događaja na kalendaru, čime se mogu slati poruke e-pošte gostima. Zlonamjerne aplikacije to mogu koristiti za brisanje ili izmjenu kalendarskih događaja ili za slanje poruka e-pošte gostima."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"dodajte ili izmijenite kalendarske događaje i pošaljite e-poštu gostima bez znanja vlasnika"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Aplikaciji omogućuje slanje pozivnica za događaje u ulozi vlasnika kalendara i dodavanje, uklanjanje, promjenu događaja koje možete izmijeniti na uređaju, uključujući događaje od prijatelja ili suradnika. Zlonamjerna aplikacija s tim dopuštenjem može slati neželjene poruke koje izgledaju kao da ih šalju vlasnici kalendara, mogu mijenjati događaje bez znanja vlasnika ili dodavati lažne događaje."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"omogući testiranje izvora lokacije"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Stvorite probne lokacije za testiranje. Zlonamjerne lokacije to mogu koristiti za poništavanje lokacije i/ili statusa pravog izvora lokacija, primjerice s GPS-a ili iz mrežnih izvora."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"pristup dodatnim naredbama davatelja lokacije"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"pisanje postavki naziva pristupne točke"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Aplikaciji omogućuje izmjenu postavki za APN, kao što je Proxy i Port bilo kojeg APN-a."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Aplikaciji omogućuje izmjenu povijesti ili oznaka preglednika koji su pohranjeni na vašem telefonu. Zlonamjerne aplikacije to mogu koristiti za brisanje ili izmjenu podataka o pregledniku."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"namjesti alarm na budilici"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Omogućuje aplikaciji da namjesti alarm u instaliranoj aplikaciji budilice. Neke aplikacije budilice možda neće primijeniti ovu značajku."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"dodaj govornu poštu"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Prije 1 mjesec"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Prije 1 mjesec"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Ništa za lijepljenje"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Odaberite radnju"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Odaberite aplikaciju za USB uređaj"</string>
<string name="noApplications" msgid="1691104391758345586">"Tu radnju ne može izvesti nijedna aplikacija."</string>
- <string name="aerr_title" msgid="653922989522758100">"Žao nam je."</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (postupak <xliff:g id="PROCESS">%2$s</xliff:g>) neočekivano je zaustavljen. Pokušajte ponovo."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Postupak <xliff:g id="PROCESS">%1$s</xliff:g> neočekivano je zaustavljen. Pokušajte ponovo."</string>
- <string name="anr_title" msgid="3100070910664756057">"Žao nam je."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktivnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (u aplikaciji <xliff:g id="APPLICATION">%2$s</xliff:g>) ne reagira."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktivnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (u postupku <xliff:g id="PROCESS">%2$s</xliff:g>) ne reagira."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (u postupku <xliff:g id="PROCESS">%2$s</xliff:g>) ne reagira."</string>
- <string name="anr_process" msgid="1246866008169975783">"Postupak <xliff:g id="PROCESS">%1$s</xliff:g> ne reagira."</string>
- <string name="force_close" msgid="3653416315450806396">"Prisilno zatvori"</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="anr_title" msgid="4351948481459135709"></string>
+ <string name="anr_activity_application" msgid="8339738283149696827">"Aplikacija <xliff:g id="APPLICATION">%2$s</xliff:g> ne reagira. "\n\n" Želite li je zatvoriti?"</string>
+ <string name="anr_activity_process" msgid="7018289416670457797">"Aktivnost <xliff:g id="ACTIVITY">%1$s</xliff:g> ne reagira. "\n\n"Želite li je zatvoriti?"</string>
+ <string name="anr_application_process" msgid="7208175830253210526">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> ne reagira. Želite li je zatvoriti?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Postupak <xliff:g id="PROCESS">%1$s</xliff:g> ne reagira."\n\n"Želite li ga zatvoriti?"</string>
+ <string name="force_close" msgid="8346072094521265605">"U redu"</string>
<string name="report" msgid="4060218260984795706">"Izvješće"</string>
<string name="wait" msgid="7147118217226317732">"Pričekaj"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikacija preusmjerena"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Omogućavanje otvaranja Wi-Fi mreže"</item>
<item quantity="other" msgid="7915895323644292768">"Omogućavanje otvaranja Wi-Fi mreža"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi mreža onemogućena"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi mreža privremeno onemogućena zbog loše povezanosti."</string>
+ <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/žarišnom točkom."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Neuspjelo pokretanje izravne Wi-Fi veze"</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>
+ <!-- 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 od <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Unesite PIN da biste nastavili."</string>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> treba biti unesen na paralelni uređaj <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> da bi se uspostavljanje veze nastavilo"</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>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> treba unijeti na paralelni uređaj <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> da bi se uspostavljanje veze nastavilo"</string>
<string name="select_character" msgid="3365550120617701745">"Umetni znak"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Nepoznata aplikacija"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Slanje SMS poruka"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilna mreža neće biti dostupna sve dok ne vratite SIM karticu."</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_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>
@@ -971,7 +986,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Došlo je do problema kod isključivanja USB pohranjivanja. Provjerite jeste li odspojili USB host, a zatim pokušajte ponovo."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Uključi USB pohranjivanje"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ako uključite USB pohranjivanje, neke aplikacije koje koristite zaustavit će se i možda neće biti dostupne sve dok ne isključite USB pohranjivanje."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"Rad USB-a nije uspio"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Rad USB-a nije uspio"</string>
<string name="dlg_ok" msgid="7376953167039865701">"U redu"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Spojen kao medijski uređaj"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Spojen kao fotoaparat"</string>
@@ -1071,8 +1086,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Isključivanje SD kartice..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Brisanje memorije USB..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Brisanje SD kartice..."</string>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Brisanje memorije USB nije uspjelo."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Brisanje SD kartice nije uspjelo."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Brisanje memorije USB nije uspjelo."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Brisanje memorije USB nije uspjelo."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Kartica SD uklonjena je prije isključivanja."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Memorija USB trenutačno se provjerava."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Kartica SD trenutno se provjerava."</string>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Odaberite račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povećaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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_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>
<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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"Dotaknite za omogućivanje"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sigurnosni certifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Ovaj je certifikat valjan."</string>
@@ -1149,6 +1156,8 @@
<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 sa..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Dijeli s..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Uređaj zaključan."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index b610f4567085..5673aab88989 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"A funkciókód kész."</string>
<string name="fcError" msgid="3327560126588500777">"Kapcsolódási probléma vagy érvénytelen funkciókód."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Hiba van a weboldalon."</string>
+ <string name="httpError" msgid="6603022914760066338">"Hálózati hiba történt."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Az URL nem található."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"A webhely azonosítási sémája nem támogatott."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Nem sikerült kommunikálni a szerverrel. Próbálja újra később."</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="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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Lehetővé teszi a használó számára a beviteli módszer legfelső szintű kezelőfelületéhez való csatlakozást. A normál alkalmazások soha nem használják ezt."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"csatlakozás szövegszolgáltatáshoz"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Lehetővé teszi, hogy a tulajdonos egy szöveges szolgáltatás felső szintjéhez kapcsolódjon (pl. SpellCheckerService). A szokásos alkalmazásokhoz szinte soha nincs szükség rá."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"csatlakozás egy VPN-szolgáltatáshoz"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Lehetővé teszi a használó számára, hogy csatlakozzon egy VPN-szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"összekapcsolás háttérképpel"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Lehetővé teszi a használó számára, hogy csatlakozzon egy háttérkép legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"csatlakozás modulszolgáltatáshoz"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"profiladatok beolvasása"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"profiladatok írása"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"naptári események olvasása"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Lehetővé teszi az alkalmazások számára, hogy elolvassák a telefon naptárában lévő összes eseményt. A rosszindulatú alkalmazások ezt felhasználhatják arra, hogy elküldjék az eseményeket másoknak."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Lehetővé teszi az alkalmazás számára, hogy elolvassa a telefon naptárában lévő összes eseményt. A rosszindulatú alkalmazások ezt az események mások részére való elküldésére használhatják fel."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"naptári események hozzáadása vagy módosítása és e-mailek küldése vendégeknek"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Lehetővé teszi egy alkalmazás számára a naptári események hozzáadását és módosítását, valamint e-mailek küldését a vendégeknek. A rosszindulatú alkalmazások felhasználhatják ezt a naptárban levő események törlésére vagy módosítására, illetve e-mailek küldésére."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"naptári események hozzáadása vagy módosítása, e-mailek küldése a vendégeknek a tulajdonosok tudomása nélkül"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Lehetővé teszi, hogy egy alkalmazás a naptár tulajdonosaként eseménymeghívásokat küldjön el, illetve eltávolítsa vagy módosítsa az eszközén található eseményeket, beleértve az ismerősei és munkatársai eseményeit is. Ha egy rosszindulatú alkalmazás megkapja ezt az engedélyt, akkor olyan spam e-maileket küldhet, amelyek úgy tűnnek, mintha a naptár tulajdonosa küldené, illetve módosíthat eseményeket a tulajdonos tudomása nélkül, vagy hamis eseményeket is megadhat."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"helyforrások utánzása tesztelés céljából"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Helyforrás-utánzatok létrehozása tesztelés céljából. A rosszindulatú alkalmazások kihasználhatják ezt az olyan valódi helyforrások által megadott hely- és/vagy állapotadatok felülírására, mint a GPS vagy a mobilszolgáltatók."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"további helyszolgáltatói parancsok elérése"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"hozzáférési pont nevével kapcsolatos beállítások írása"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"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>
+ <!-- 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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a telefonon tárolt böngészési előzményeket és könyvjelzőket. A rosszindulatú alkalmazások felhasználhatják ezt a böngésző adatainak törlésére vagy módosítására."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ébresztő beállítása az ébresztőórában"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Lehetővé teszi az alkalmazások számára, hogy beállítsanak egy ébresztőt egy telepített ébresztőóra alkalmazásban. Egyes ilyen alkalmazásokban lehet, hogy nem működik ez a funkció."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"hangposta hozzáadása"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 hónapja"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Több mint 1 hónapja"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nincs mit bemásolni"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Válasszon műveletet"</string>
<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="653922989522758100">"Sajnáljuk!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"A(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás <xliff:g id="PROCESS">%2$s</xliff:g> folyamata váratlanul leállt. Kérjük, próbálja újra."</string>
- <string name="aerr_process" msgid="1551785535966089511">"A(z) <xliff:g id="PROCESS">%1$s</xliff:g> folyamat váratlanul leállt. Kérjük, próbálja újra."</string>
- <string name="anr_title" msgid="3100070910664756057">"Sajnáljuk!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"A(z) <xliff:g id="APPLICATION">%2$s</xliff:g> alkalmazásban levő <xliff:g id="ACTIVITY">%1$s</xliff:g> tevékenység nem válaszol."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"A(z) <xliff:g id="PROCESS">%2$s</xliff:g> folyamatban levő <xliff:g id="ACTIVITY">%1$s</xliff:g> tevékenység nem válaszol."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"A(z) <xliff:g id="PROCESS">%2$s</xliff:g> folyamatban levő <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás nem válaszol."</string>
- <string name="anr_process" msgid="1246866008169975783">"A(z) <xliff:g id="PROCESS">%1$s</xliff:g> folyamat nem válaszol."</string>
- <string name="force_close" msgid="3653416315450806396">"Bezárás most"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"A(z) <xliff:g id="APPLICATION">%1$s</xliff:g> nem válaszol. Be szeretné zárni?"</string>
+ <string name="anr_process" msgid="306819947562555821">"A(z) <xliff:g id="PROCESS">%1$s</xliff:g> eljárás nem válaszol. "\n\n"Be szeretné zárni?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Jelentés"</string>
<string name="wait" msgid="7147118217226317732">"Várakozás"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Alk. átirányítva"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Nyílt Wi-Fi hálózat elérhető"</item>
<item quantity="other" msgid="7915895323644292768">"Nyílt Wi-Fi hálózatok elérhetők"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Egy Wi-Fi hálózat le lett tiltva"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"A Wi-Fi hálózat átmenetileg letiltásra került a gyenge kapcsolat miatt."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nem sikerült csatlakozni a Wi-Fi hálózathoz"</string>
+ <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 indítása. A Wi-Fi kliens/hotspot kikapcsol."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nem sikerült elindítani a Wi-Fi Direct kapcsolatot"</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_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(z) <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> WPS PIN kódot kell beírni a partnereszközön (<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>) a csatlakoztatás folytatásához"</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>
<string name="select_character" msgid="3365550120617701745">"Karakter beszúrása"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ismeretlen alkalmazás"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS-ek küldése"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"A mobilhálózat addig nem lesz elérhető, amíg nem cseréli ki a SIM-kártyát."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Az USB művelet sikertelen"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Nem sikerült törölni az USB-tárat."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Nem sikerült törölni az SD-kártyát."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Fiók kiválasztása"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Növelés"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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_not_selected" msgid="2908760184307722393">"nincs kiválasztva"</string>
+ <string name="switch_on" msgid="551417728476977311">"bekapcsolva"</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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"koppintson az engedélyezéshez"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<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>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index ef4b08c88920..24f642943d19 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Kode fitur selesai."</string>
<string name="fcError" msgid="3327560126588500777">"Masalah sambungan atau kode fitur tidak valid."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Laman web berisi galat."</string>
+ <string name="httpError" msgid="6603022914760066338">"Terjadi galat jaringan."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL tidak ditemukan."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Skema autentikasi situs tidak didukung."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Server gagal berkomunikasi. Coba lagi."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Server gagal berkomunikasi. Coba lagi."</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,6 +195,10 @@
<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_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>
@@ -262,8 +266,10 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Mengizinkan aplikasi melihat tombol yang Anda tekan bahkan ketika berinteraksi dengan aplikasi lain (seperti memasukkan sandi). Tidak pernah diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"mengikat ke metode masukan"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi pada suatu metode masukan. Tidak diperlukan untuk aplikasi normal."</string>
- <string name="permlab_bindTextService" msgid="7358378401915287938">"mengikat ke layanan teks"</string>
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"mengikat ke layanan SMS"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi pada suatu layanan teks (mis. SpellCheckerService). Tidak diperlukan untuk aplikasi normal."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"mengikat ke layanan VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan Vpn. Tidak diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"mengikat ke wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu wallpaper. Tidak diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"mengikat ke layanan widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"baca data profil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Memungkinkan aplikasi membaca semua informasi profil pribadi Anda. Aplikasi berbahaya dapat menggunakannya untuk mengidentifikasi Anda dan mengirimkan informasi pribadi Anda kepada orang lain."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"tulis data profil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Memungkinkan aplikasi mengubah informasi profil pribadi Anda. Aplikasi berbahaya dapat menggunakannya untuk menghapus atau mengubah data profil Anda."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"membaca acara kalender."</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Mengizinkan aplikasi membaca semua acara kalender yang disimpan pada tablet Anda. Aplikasi berbahaya dapat menggunakan ini untuk mengirim acara kalender ke orang lain."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Mengizinkan aplikasi membaca semua acara kalender yang tersimpan pada ponsel. Aplikasi hasad dapat menggunakan ini untuk mengirimkan acara kalender ke orang lain."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"Tambahkan atau modifikasi acara kalender dan kirimkan email ke tamu"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Mengizinkan aplikasi menambahkan atau mengubah acara pada kalender Anda, yang dapat mengirikan email ke tamu. Aplikasi hasad dapat menggunakan ini untuk menghapus atau mengubah acara kalender Anda atau mengirim email ke tamu."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"menambah atau mengubah acara kalender dan mengirim email kepada tamu tanpa sepengetahuan pemilik"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Memungkinkan aplikasi mengirim undangan acara sebagai pemilik kalender dan menambahkan, menghapus, mengubah acara yang dapat Anda ubah pada perangkat Anda, termasuk acara teman atau rekan kerja. Aplikasi berbahaya dengan izin ini dapat mengirim email spam yang seolah-olah berasal dari pemilik kalender, mengubah acara tanpa sepengetahuan pemilik, atau menambahkan acara palsu."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"sumber lokasi palsu untuk menguji"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Buat sumber lokasi tiruan untuk menguji. Aplikasi hasad dapat menggunakan ini untuk mengganti lokasi dan/atau status yang dikembalikan oleh sumber lokasi asli seperti GPS atau penyedia Jaringan."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"akses perintah penyedia lokasi ekstra"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"tuliskan setelan Nama Poin Akses (APN)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Mengizinkan aplikasi mengubah setelan APN, seperti Proxy dan Port APN mana saja."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Mengizinkan aplikasi mengubah riwayat atau bookmark Peramban yang tersimpan pada ponsel. Aplikasi hasad dapat menggunakan ini untuk menghapus atau mengubah data Peramban."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"setel alarm di jam alarm"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Perbolehkan aplikasi untuk menyetel alarm di aplikasi jam alarm yang terpasang. Beberapa aplikasi jam alarm tidak dapat menerapkan fitur ini."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"tambahkan kotak pesan"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tempel"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Tidak ada yang disalin"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Pilih tindakan"</string>
<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="653922989522758100">"Maaf!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikasi (<xliff:g id="PROCESS">%2$s</xliff:g> proses) berhenti tiba-tiba. Harap coba lagi."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Proses tersebut <xliff:g id="PROCESS">%1$s</xliff:g> berhenti tiba-tiba. Harap coba lagi."</string>
- <string name="anr_title" msgid="3100070910664756057">"Maaf!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="ACTIVITY">%1$s</xliff:g> aktivitas (dalam <xliff:g id="APPLICATION">%2$s</xliff:g> aplikasi) tidak menanggapi."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g> aktivitas (dalam <xliff:g id="PROCESS">%2$s</xliff:g> proses) tidak menanggapi."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikasi (dalam <xliff:g id="PROCESS">%2$s</xliff:g> proses) tidak merespons."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tidak merespons."</string>
- <string name="force_close" msgid="3653416315450806396">"Tutup paksa"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> tidak merespons. Apakah Anda ingin menutupnya?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tidak merespons."\n\n"Apakah Anda ingin menutupnya?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Laporkan sebagai"</string>
<string name="wait" msgid="7147118217226317732">"Tunggu"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikasi dialihkan"</string>
@@ -904,18 +926,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -929,11 +944,11 @@
<item quantity="one" msgid="1634101450343277345">"Jaringan Wi-Fi terbuka tersedia"</item>
<item quantity="other" msgid="7915895323644292768">"Jaringan Wi-Fi terbuka tersedia"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Jaringan Wi-Fi sedang dinonaktifkan"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Untuk sementara jaringan Wi-Fi dinonaktifkan karena sambungan buruk."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak dapat tersambung ke Wi-Fi"</string>
+ <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">"Mulai operasi Wi-Fi Langsung. Opsi ini akan mematikan operasi hotspot/klien WiFi."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Gagal memulai 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_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>
@@ -945,7 +960,7 @@
<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 (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -980,7 +995,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operasi USB gagal"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1080,8 +1095,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Gagal menghapus penyimpanan USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Gagal 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="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>
@@ -1105,22 +1120,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"diperiksa"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"tidak dicentang"</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="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>
@@ -1133,14 +1140,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"ketuk untuk mengaktifkan"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ketuk 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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sertifikat keamanan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikat ini valid."</string>
@@ -1158,6 +1165,8 @@
<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">"Berbagi dengan..."</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Perangkat terkunci."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Bagikan dengan..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Perangkat tergembok."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index bcded352c84e..7c108bc9592b 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Codice funzione completo."</string>
<string name="fcError" msgid="3327560126588500777">"Problema di connessione o codice funzione non valido."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"La pagina web contiene un errore."</string>
+ <string name="httpError" msgid="6603022914760066338">"Si è verificato un errore di rete."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Impossibile trovare l\'URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Schema di autenticazione del sito non supportato."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Impossibile comunicare con il server. Riprova più tardi."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Impossibile comunicare con il 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>
@@ -195,6 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Consente all\'applicazione di ricevere ed elaborare messaggi di trasmissioni di emergenza. Tale autorizzazione è disponibile solo per applicazioni di sistema."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"invio SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Consente all\'applicazione di inviare messaggi SMS. Le applicazioni dannose potrebbero inviare messaggi a tua insaputa facendoti sostenere dei costi."</string>
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"invio di messaggi SMS senza conferma"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Consente all\'applicazione di inviare messaggi SMS. Le applicazioni dannose potrebbero inviare messaggi a tua insaputa facendoti sostenere dei costi."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"lettura SMS o MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Consente all\'applicazione di leggere SMS memorizzati sul tablet o sulla scheda SIM. Le applicazioni dannose potrebbero leggere messaggi riservati."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Consente all\'applicazione di leggere SMS memorizzati sul telefono o sulla SIM. Le applicazioni dannose potrebbero leggere messaggi riservati."</string>
@@ -264,6 +266,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Consente l\'associazione all\'interfaccia principale di un metodo di inserimento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"associazione a un servizio di testo"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di testo (ad esempio SpellCheckerService). Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"associazione a un servizio VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Consente l\'associazione all\'interfaccia principale di un servizio VPN. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"associazione a sfondo"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Consente l\'associazione di uno sfondo all\'interfaccia principale. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associazione a un servizio widget"</string>
@@ -321,15 +325,15 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"scrittura dati di contatto"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Consente a un\'applicazione di modificare i dati (gli indirizzi) di contatto memorizzati sul tablet. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati di contatto."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Consente a un\'applicazione di modificare i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati di contatto."</string>
- <string name="permlab_readProfile" msgid="2211941946684590103">"lettura dati del profilo"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Consente a un\'applicazione di leggere tutte le informazioni personali del tuo profilo. Le applicazioni dannose possono sfruttare questa possibilità per identificarti e inviare le tue informazioni personali ad altre persone."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"scrittura dati profilo"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Consente a un\'applicazione di modificare le informazioni personali del tuo profilo. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del tuo profilo."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"leggere eventi di calendario"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Consente la lettura da parte di un\'applicazione di tutti gli eventi di calendario memorizzati sul tablet. Le applicazioni dannose possono sfruttare questa possibilità per inviare i tuoi eventi di calendario ad altre persone."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Consente la lettura da parte di un\'applicazione di tutti gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i tuoi eventi di calendario ad altre persone."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"aggiungere o modificare eventi di calendario e inviare email agli invitati"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Consente a un\'applicazione di aggiungere o modificare gli eventi nel tuo calendario, eventualmente inviando email agli invitati. Le applicazioni dannose possono utilizzare questa autorizzazione per cancellare o modificare i tuoi eventi di calendario per inviare email agli invitati."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"lettura dei tuoi dati profilo"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Consente all\'applicazione di leggere le informazioni del profilo personale memorizzato sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che l\'applicazione è in grado di identificarti e di inviare le tue informazioni di profilo ad altri."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"scrittura dati del profilo"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Consente all\'applicazione di modificare o aggiungere informazioni al profilo personale memorizzato sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che altre applicazioni sono in grado di identificarti e di inviare le tue informazioni di profilo ad altri."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"lettura di eventi di calendario e di informazioni riservate"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Consente a un\'applicazione di leggere tutti gli eventi di calendario memorizzati sul tablet, compresi quelli di amici o colleghi. Un\'applicazione dannosa con questa autorizzazione può estrarre informazioni personali dai calendari a insaputa dei proprietari."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Consente a un\'applicazione di leggere tutti gli eventi di calendario memorizzati sul telefono, compresi quelli di amici o colleghi. Un\'applicazione dannosa con questa autorizzazione può estrarre informazioni personali dai calendari a insaputa dei proprietari."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"aggiunta o modifica di eventi di calendario e invio di email agli ospiti a insaputa dei proprietari"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Consente a un\'applicazione di inviare inviti a eventi in qualità di proprietario del calendario e di aggiungere, rimuovere e modificare gli eventi che è possibile modificare sul dispositivo, compresi quelli di amici o colleghi. Un\'applicazione dannosa con questa autorizzazione può inviare email di spam che sembrano provenire dai proprietari dei calendari, modificare eventi a insaputa dei proprietari o aggiungere eventi non reali."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"fonti di localizzazione fittizie per test"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Creare fonti di localizzazione fittizie per test. Le applicazioni dannose possono sfruttare questa possibilità per sostituire la posizione e/o lo stato restituito da reali fonti di localizzazione come GPS o provider di rete."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accesso a comandi aggiuntivi del provider di localizz."</string>
@@ -439,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Consente a un\'applicazione di visualizzare lo stato di tutte le reti."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"accesso completo a Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Consente a un\'applicazione di creare socket di rete."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"scrittura impostazioni APN"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Consente a un\'applicazione di modificare le impostazioni APN, come proxy e porta di qualsiasi APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"modifica/intercettazione delle impostazioni di rete e del traffico"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Consente a un\'applicazione di modificare le impostazioni di rete e di intercettare e monitorare tutto il traffico di rete, ad esempio per cambiare il proxy e la porta di qualsiasi APN. Le applicazioni dannose potrebbero monitorare, reindirizzare o modificare i pacchetti di rete a tua insaputa."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"modifica connettività di rete"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Consente a un\'applicazione di modificare lo stato di connettività di rete."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"modificare la connettività tethering"</string>
@@ -720,12 +724,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Consente a un\'applicazione di modificare la cronologia o i segnalibri del browser memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"impostazione allarmi nella sveglia"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Consente all\'applicazione di impostare un allarme in un\'applicazione sveglia installata. Alcune applicazioni sveglia potrebbero non supportare questa funzione."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"aggiunta di un messaggio vocale"</string>
+ <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="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>
@@ -738,6 +748,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 mese fa"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Oltre 1 mese fa"</string>
<plurals name="num_seconds_ago">
@@ -839,7 +859,6 @@
<string name="cut" msgid="3092569408438626261">"Taglia"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Incolla"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Niente da incollare"</string>
<string name="replace" msgid="8333608224471746584">"Sostituisci"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copia URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleziona testo..."</string>
@@ -863,15 +882,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Seleziona un\'azione"</string>
<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="653922989522758100">"Spiacenti."</string>
- <string name="aerr_application" msgid="4683614104336409186">"Interruzione imprevista dell\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>). Riprova."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Interruzione imprevista del processo <xliff:g id="PROCESS">%1$s</xliff:g>. Riprova."</string>
- <string name="anr_title" msgid="3100070910664756057">"Spiacenti."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"L\'attività <xliff:g id="ACTIVITY">%1$s</xliff:g> (nell\'applicazione <xliff:g id="APPLICATION">%2$s</xliff:g>) non risponde."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"L\'attività <xliff:g id="ACTIVITY">%1$s</xliff:g> (nel processo <xliff:g id="PROCESS">%2$s</xliff:g>) non risponde."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (nel processo <xliff:g id="PROCESS">%2$s</xliff:g>) non risponde."</string>
- <string name="anr_process" msgid="1246866008169975783">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> non risponde."</string>
- <string name="force_close" msgid="3653416315450806396">"Termina"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> non risponde. Vuoi chiuderla?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> non risponde."\n\n"Vuoi chiuderlo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Segnala"</string>
<string name="wait" msgid="7147118217226317732">"Attendi"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Applicazione reindirizzata"</string>
@@ -900,18 +921,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volume allarme"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volume notifiche"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volume Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volume suoneria"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume chiamate"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume contenuti multimediali"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume notifiche"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Suoneria predefinita"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Suoneria predefinita (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Silenzioso"</string>
@@ -925,11 +939,11 @@
<item quantity="one" msgid="1634101450343277345">"Rete Wi-Fi aperta disponibile"</item>
<item quantity="other" msgid="7915895323644292768">"Reti Wi-Fi aperte disponibili"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"È stata disattivata una rete Wi-Fi"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Una rete Wi-Fi è stata temporaneamente disattivata a causa di una pessima connessione."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossibile connettersi alla rete Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Impossibile avviare Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Impossibile avviare Wi-Fi Direct"</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>
@@ -940,7 +954,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annulla"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Scheda SIM rimossa"</string>
- <string name="sim_removed_message" msgid="2064255102770489459">"La rete mobile sarà disponibile dopo la sostituzione della scheda SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"La rete mobile non sarà disponibile finché non eseguirai il riavvio con una scheda SIM valida inserita."</string>
<string name="sim_done_button" msgid="827949989369963775">"Fine"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Scheda SIM aggiunta"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Devi riavviare il dispositivo per poter accedere alla rete mobile."</string>
@@ -970,7 +984,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operazione USB non riuscita"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1070,8 +1084,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Cancellazione dell\'archivio USB non riuscita."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Cancellazione della scheda SD non riuscita."</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="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>
@@ -1096,11 +1110,11 @@
<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 selezionato"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"non selezionata"</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">"disattivo"</string>
+ <string name="switch_off" msgid="7249798614327155088">"disattivato"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"premuto"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"non premuto"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
@@ -1115,11 +1129,15 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tocca per attivare"</string>
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tocca per attivare"</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 cellulare superato"</string>
- <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_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) -->
+ <skip />
<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>
@@ -1138,4 +1156,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 5fccb07eaa21..7e7f63ef574e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -23,31 +23,31 @@
<string name="byteShort" msgid="8340973892742019101">"B"</string>
<string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
<string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
- <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+ <string name="gigabyteShort" msgid="3259882455212193214">"GB‏‏"</string>
<string name="terabyteShort" msgid="231613018159186962">"TB"</string>
<string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"&lt;ללא כותרת&gt;"</string>
- <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"???"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(אין מספר טלפון)"</string>
<string name="unknownName" msgid="2277556546742746522">"(לא ידוע)"</string>
<string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"דואר קולי"</string>
<string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
- <string name="mmiError" msgid="5154499457739052907">"בעיה בחיבור או קוד MMI לא תקין."</string>
+ <string name="mmiError" msgid="5154499457739052907">"בעיה בחיבור או קוד MMI לא חוקי."</string>
<string name="mmiFdnError" msgid="5224398216385316471">"הפעולה מוגבלת למספרי חיוג קבועים בלבד."</string>
<string name="serviceEnabled" msgid="8147278346414714315">"השירות הופעל."</string>
<string name="serviceEnabledFor" msgid="6856228140453471041">"השירות הופעל עבור:"</string>
<string name="serviceDisabled" msgid="1937553226592516411">"השירות הושבת."</string>
- <string name="serviceRegistered" msgid="6275019082598102493">"הרשמה בוצעה בהצלחה."</string>
+ <string name="serviceRegistered" msgid="6275019082598102493">"ההרשמה בוצעה בהצלחה."</string>
<string name="serviceErased" msgid="1288584695297200972">"המחיקה בוצעה בהצלחה."</string>
<string name="passwordIncorrect" msgid="7612208839450128715">"סיסמה שגויה."</string>
<string name="mmiComplete" msgid="8232527495411698359">"MMI הושלם."</string>
<string name="badPin" msgid="5085454289896032547">"ה-PIN הישן שהקלדת שגוי."</string>
<string name="badPuk" msgid="5702522162746042460">"ה-PUK שהקלדת שגוי."</string>
- <string name="mismatchPin" msgid="3695902225843339274">"קודי ה-PIN שהזנת לא מתאימים."</string>
+ <string name="mismatchPin" msgid="3695902225843339274">"קודי ה-PIN שהזנת לא תואמים."</string>
<string name="invalidPin" msgid="3850018445187475377">"הקלד PIN שאורכו 4 עד 8 ספרות."</string>
<string name="invalidPuk" msgid="8761456210898036513">"הקלד PUK באורך 8 מספרים או יותר."</string>
- <string name="needPuk" msgid="919668385956251611">"כרטיס ה-SIM נעול באמצעות PUK. הקלד את קוד ה-PUK כדי לבטל את נעילתו."</string>
+ <string name="needPuk" msgid="919668385956251611">"כרטיס ה-SIM נעול באמצעות PUK. הקלד את קוד PUK כדי לבטל את נעילתו."</string>
<string name="needPuk2" msgid="4526033371987193070">"הקלד PUK2 כדי לבטל את חסימת כרטיס ה-SIM."</string>
<string name="ClipMmi" msgid="6952821216480289285">"זיהוי מתקשר של שיחה נכנסת"</string>
<string name="ClirMmi" msgid="7784673673446833091">"זיהוי מתקשר בשיחה יוצאת"</string>
@@ -57,15 +57,15 @@
<string name="PwdMmi" msgid="7043715687905254199">"שינוי סיסמה"</string>
<string name="PinMmi" msgid="3113117780361190304">"שנה את ה-PIN"</string>
<string name="CnipMmi" msgid="3110534680557857162">"מספר מתקשר נמצא"</string>
- <string name="CnirMmi" msgid="3062102121430548731">"מספר מתקשר מוגבל"</string>
+ <string name="CnirMmi" msgid="3062102121430548731">"מספר מתקשר חסוי"</string>
<string name="ThreeWCMmi" msgid="9051047170321190368">"שיחה עם שלושה משתתפים"</string>
<string name="RuacMmi" msgid="7827887459138308886">"דחייה של שיחות מטרידות לא רצויות"</string>
<string name="CndMmi" msgid="3116446237081575808">"מסירת מספר מתקשר"</string>
<string name="DndMmi" msgid="1265478932418334331">"נא לא להפריע"</string>
- <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"זיהוי מתקשר עובר כברירת מחדל למוגבל. השיחה הבאה: מוגבלת"</string>
- <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"זיהוי מתקשר עובר כברירת מחדל למוגבל. השיחה הבאה: לא מוגבלת"</string>
- <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"זיהוי מתקשר עובר כברירת מחדל ללא מוגבל. השיחה הבאה: מוגבלת"</string>
- <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"זיהוי מתקשר עובר כברירת מחדל ללא מוגבל. השיחה הבאה: לא מוגבלת"</string>
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"זיהוי מתקשר עובר כברירת מחדל למצב מוגבל. השיחה הבאה: מוגבלת"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"זיהוי מתקשר עובר כברירת מחדל למצב מוגבל. השיחה הבאה: לא מוגבלת"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: מוגבלת"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: לא מוגבלת"</string>
<string name="serviceNotProvisioned" msgid="8614830180508686666">"השירות לא הוקצה."</string>
<string name="CLIRPermanent" msgid="5460892159398802465">"אין אפשרות לשנות את ההגדרה של זיהוי מתקשר."</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"גישה מוגבלת השתנתה"</string>
@@ -77,13 +77,13 @@
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"שירותי קול/נתונים חסומים."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"שירותי קול/SMS חסומים."</string>
<string name="RestrictedOnAll" msgid="2714924667937117304">"כל שירותי הקול/נתונים/SMS חסומים."</string>
- <string name="serviceClassVoice" msgid="1258393812335258019">"קול"</string>
- <string name="serviceClassData" msgid="872456782077937893">"נתונים"</string>
+ <string name="serviceClassVoice" msgid="1258393812335258019">"Google Voice"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"Google Data"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"פקס"</string>
<string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
<string name="serviceClassDataAsync" msgid="4523454783498551468">"אסינכרוני"</string>
- <string name="serviceClassDataSync" msgid="7530000519646054776">"סנכרון"</string>
- <string name="serviceClassPacket" msgid="6991006557993423453">"חפיסה"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"סינכרוני"</string>
+ <string name="serviceClassPacket" msgid="6991006557993423453">"מנה"</string>
<string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"נורית מצב נדידה מופעלת"</string>
<string name="roamingText1" msgid="5314861519752538922">"נורית מצב נדידה כבויה"</string>
@@ -94,38 +94,38 @@
<string name="roamingText6" msgid="2059440825782871513">"נדידה - מערכת זמינה"</string>
<string name="roamingText7" msgid="7112078724097233605">"נדידה - שותף התקשרות"</string>
<string name="roamingText8" msgid="5989569778604089291">"נדידה - שותף מועדף"</string>
- <string name="roamingText9" msgid="7969296811355152491">"נדידה - פונקציונליות מלאה של שירות"</string>
+ <string name="roamingText9" msgid="7969296811355152491">"נדידה - פונקציונליות שירות מלאה"</string>
<string name="roamingText10" msgid="3992906999815316417">"נדידה - פונקציונליות חלקית של שירות"</string>
<string name="roamingText11" msgid="4154476854426920970">"מודעת באנר נודדת מופעלת"</string>
<string name="roamingText12" msgid="1189071119992726320">"מודעת באנר נודדת כבויה"</string>
<string name="roamingTextSearching" msgid="8360141885972279963">"מחפש שירות"</string>
- <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: לא הועברה"</string>
+ <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ללא העברה"</string>
<string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
- <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> אחרי <xliff:g id="TIME_DELAY">{2}</xliff:g> שניות"</string>
- <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: לא הועברה"</string>
- <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: לא הועברה"</string>
+ <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> כעבור <xliff:g id="TIME_DELAY">{2}</xliff:g> שניות"</string>
+ <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ללא העברה"</string>
+ <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ללא העברה"</string>
<string name="fcComplete" msgid="3118848230966886575">"קוד תכונה הושלם."</string>
<string name="fcError" msgid="3327560126588500777">"בעיה בחיבור או קוד תכונה לא תקין."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"אישור"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"דף האינטרנט מכיל שגיאה."</string>
+ <string name="httpError" msgid="6603022914760066338">"אירעה שגיאת רשת."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"לא ניתן למצוא את כתובת האתר."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"סכימת אימות האתר אינה נתמכת."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"האימות נכשל."</string>
- <string name="httpErrorProxyAuth" msgid="1788207010559081331">"האימות דרך שרת ה-proxy נכשל."</string>
- <string name="httpErrorConnect" msgid="7623096283505770433">"החיבור לשרת נכשל."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"השרת נכשל בתקשורת. נסה שוב מאוחר יותר."</string>
- <string name="httpErrorTimeout" msgid="4743403703762883954">"פג תוקפו של החיבור לשרת."</string>
- <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"הדף מכיל הפניות שרת רבות מדי."</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"האימות דרך שרת ה-Proxy נכשל."</string>
+ <string name="httpErrorConnect" msgid="7623096283505770433">"ההתחברות לשרת נכשלה."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"השרת נכשל בתקשורת. נסה שוב מאוחר יותר."</string>
+ <string name="httpErrorTimeout" msgid="4743403703762883954">"חלף הזמן הקצוב של החיבור לשרת."</string>
+ <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"הדף מכיל יותר מדי כתובות אתר להפניה מחדש של השרת."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"הפרוטוקול אינו נתמך."</string>
- <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"לא הייתה אפשרות ליצור חיבור מאובטח."</string>
- <string name="httpErrorBadUrl" msgid="6088183159988619736">"לא הייתה אפשרות לפתוח את הדף כיוון שכתובת האתר לא חוקית."</string>
- <string name="httpErrorFile" msgid="8250549644091165175">"לא הייתה גישה לקובץ."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"לא היתה אפשרות ליצור חיבור מאובטח."</string>
+ <string name="httpErrorBadUrl" msgid="6088183159988619736">"לא היתה אפשרות לפתוח את הדף כיוון שכתובת האתר לא חוקית."</string>
+ <string name="httpErrorFile" msgid="8250549644091165175">"לא היתה גישה לקובץ."</string>
<string name="httpErrorFileNotFound" msgid="5588380756326017105">"הקובץ המבוקש לא נמצא."</string>
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"בקשות רבות מדי מעובדות. נסה שוב מאוחר יותר."</string>
- <string name="notification_title" msgid="1259940370369187045">"שגיאת כניסה עבור <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="contentServiceSync" msgid="8353523060269335667">"סנכרון"</string>
- <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"סנכרן"</string>
- <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"יש מחיקות <xliff:g id="CONTENT_TYPE">%s</xliff:g> רבות מדי."</string>
+ <string name="notification_title" msgid="1259940370369187045">"שגיאת כניסה של <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+ <string name="contentServiceSync" msgid="8353523060269335667">"סינכרון"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"סינכרון"</string>
+ <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"יש מחיקות רבות מדי של <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
<string name="low_memory" product="tablet" msgid="2292820184396262278">"שטח האחסון בטבלט מלא! מחק קבצים כדי לפנות שטח."</string>
<string name="low_memory" product="default" msgid="6632412458436461203">"שטח האחסון בטלפון מלא! מחק חלק מהקבצים כדי לפנות שטח."</string>
<string name="me" msgid="6545696007631404292">"אני"</string>
@@ -140,8 +140,8 @@
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"הטבלט שלך יכבה."</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"הטלפון שלך יכובה."</string>
<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="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="default" msgid="2406416831541615258">"אפשרויות טלפון"</string>
<string name="global_action_lock" msgid="2844945191792119712">"נעילת מסך"</string>
@@ -155,7 +155,7 @@
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
<string name="safeMode" msgid="2788228061547930246">"מצב בטוח"</string>
<string name="android_system_label" msgid="6577375335728551336">"מערכת Android"</string>
- <string name="permgrouplab_costMoney" msgid="5429808217861460401">"שירותים שעולים לך כסף"</string>
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"שירותים שעולים כסף"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"אפשר ליישומים לעשות דברים שעלולים לעלות כסף."</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"ההודעות שלך"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"קרא וכתוב SMS, דוא\"ל והודעות אחרות."</string>
@@ -168,190 +168,196 @@
<string name="permgroupdesc_network" msgid="5035763698958415998">"אפשר ליישומים לגשת לתכונות רשת שונות."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"החשבונות שלך"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"גישה לכל החשבונות הזמינים."</string>
- <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"בקרי חומרה"</string>
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"בקרת חומרה"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"גישה ישירה לחומרה במכשיר."</string>
<string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"שיחות טלפון"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"ניטור, הקלטה ועיבוד של שיחות טלפון."</string>
<string name="permgrouplab_systemTools" msgid="4652191644082714048">"כלי מערכת"</string>
- <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"גישה ברמה נמוכה ובשליטה במערכת."</string>
+ <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"גישה ושליטה במערכת ברמה נמוכה."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"כלי פיתוח"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"תכונות הדרושות למפתחי יישומים בלבד."</string>
- <string name="permgrouplab_storage" msgid="1971118770546336966">"שטח אחסון"</string>
+ <string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
- <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גישה לכרטיס ה-SD."</string>
+ <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"השבת או שנה את שורת המצב"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"מאפשר ליישום להשבית את שורת המצב או להוסיף ולהסיר סמלי מערכת."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"שורת מצב"</string>
<string name="permdesc_statusBarService" msgid="4097605867643520920">"מאפשר ליישום להיות שורת המצב."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"הרחב/כווץ את שורת המצב"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"מאפשר ליישום להרחיב או לכווץ את שורת המצב."</string>
- <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"עכב שיחות יוצאות"</string>
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"עיכוב שיחות יוצאות"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"מאפשר ליישום לעבד שיחות יוצאות ולשנות את המספר לחיוג. יישומים זדוניים עלולים לעקוב אחר שיחות יוצאות, לנתב אותן מחדש או למנוע אותן."</string>
<string name="permlab_receiveSms" msgid="2697628268086208535">"קבל SMS"</string>
- <string name="permdesc_receiveSms" msgid="6298292335965966117">"מאפשר ליישום לקבל ולעבד הודעות SMS. יישומים זדוניים עלולים לעקוב אחר ההודעות או למחוק אותן מבלי להציג אותם לך."</string>
+ <string name="permdesc_receiveSms" msgid="6298292335965966117">"מאפשר ליישום לקבל ולעבד הודעות SMS. יישומים זדוניים עלולים לעקוב אחר ההודעות שלך או למחוק אותן בלי להציג אותן."</string>
<string name="permlab_receiveMms" msgid="8894700916188083287">"קבל MMS"</string>
- <string name="permdesc_receiveMms" msgid="4563346832000174373">"מאפשר ליישום לקבל ולעבד הודעות MMS. יישומים זדוניים עלולים לעקוב אחר ההודעות או למחוק אותן מבלי להציג אותן לך."</string>
+ <string name="permdesc_receiveMms" msgid="4563346832000174373">"מאפשר ליישום לקבל ולעבד הודעות MMS. יישומים זדוניים עלולים לעקוב אחר ההודעות שלך או למחוק אותן מבלי להציג אותן."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"קבלת שידורי חירום"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"מאפשר ליישום לקבל ולעבד הודעות של שידורי חירום. הרשאה זו זמינה רק ליישומי מערכת."</string>
- <string name="permlab_sendSms" msgid="5600830612147671529">"שלח הודעות SMS"</string>
- <string name="permdesc_sendSms" msgid="1946540351763502120">"מאפשר ליישום לשלוח הודעות SMS. יישומים זדוניים עלולים לגרום לחיובים על ידי שליחת הודעות ללא אישורך."</string>
- <string name="permlab_readSms" msgid="4085333708122372256">"קריאת SMS או MMS"</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_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>
+ <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="default" msgid="6299398896177548095">"מאפשר ליישום לכתוב להודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM. יישומים זדוניים עלולים למחוק את ההודעות."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"קבל WAP"</string>
- <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"מאפשר ליישום לקבל ולעבד הודעות WAP. יישומים זדוניים עלולים לעקוב אחר ההודעות או למחוק אותן מבלי להציג אותן לך."</string>
- <string name="permlab_getTasks" msgid="5005277531132573353">"אחזור יישומים פועלים"</string>
+ <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"מאפשר ליישום לקבל ולעבד הודעות WAP. יישומים זדוניים עלולים לעקוב אחר ההודעות שלך או למחוק אותן מבלי להציג אותן."</string>
+ <string name="permlab_getTasks" msgid="5005277531132573353">"אחזר יישומים פועלים"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"מאפשר ליישום לאחזר מידע על משימות הפועלות כעת ושפעלו לאחרונה. עלול לאפשר ליישומים זדוניים לגלות מידע פרטי על יישומים אחרים."</string>
<string name="permlab_reorderTasks" msgid="5669588525059921549">"שנה את סדר היישומים הפועלים"</string>
- <string name="permdesc_reorderTasks" msgid="126252774270522835">"מאפשר ליישום להעביר משימות לחזית ולרקע. יישומים זדוניים עלולים לאלץ את עצמם לחזית מבלי שתוכל לשלוט בהם."</string>
+ <string name="permdesc_reorderTasks" msgid="126252774270522835">"מאפשר ליישום להעביר משימות לחזית ולרקע. יישומים זדוניים יכולים לכפות ולקדם את עצמם ללא שליטתך."</string>
<string name="permlab_removeTasks" msgid="4802740047161700683">"הפסקת יישומים פועלים"</string>
<string name="permdesc_removeTasks" msgid="2000332928514575461">"מאפשר ליישום להסיר משימות ולסיים את פעולת היישומים שלהן. יישומים זדוניים עלולים לשבש את פעולת היישומים האחרים."</string>
- <string name="permlab_setDebugApp" msgid="4339730312925176742">"הפוך איתור באגים ביישום לפעיל"</string>
- <string name="permdesc_setDebugApp" msgid="5584310661711990702">"מאפשר ליישום להפעיל איתור באגים עבור יישום אחר. יישומים זדוניים יכולים להשתמש ביכולת זו כדי להשמיד יישומים אחרים."</string>
- <string name="permlab_changeConfiguration" msgid="8214475779521218295">"שנה את הגדרות ממשק המשתמש"</string>
- <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"מאפשר ליישום לשנות את התצורה הנוכחית, כגון המקום או גודל הגופן הכללי."</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"אפשר איתור באגים ביישום"</string>
+ <string name="permdesc_setDebugApp" msgid="5584310661711990702">"מאפשר ליישום להפעיל איתור באגים ביישום אחר. יישומים זדוניים יכולים להשתמש באפשרות זו כדי להפסיק יישומים אחרים."</string>
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"שנה את הגדרות ממשק המשתמש שלך"</string>
+ <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"מאפשר ליישום לשנות את התצורה הנוכחית, כגון האזור או גודל הגופן הכללי."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"הפוך מצב מכונית לפעיל"</string>
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"מאפשר ליישום להפוך מצב מכונית לפעיל."</string>
- <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"סיים תהליכים ברקע"</string>
- <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"מאפשר ליישום לסיים תהליכים ברקע של יישומים אחרים, גם אם אין מחסור בזיכרון."</string>
- <string name="permlab_forceStopPackages" msgid="1447830113260156236">"אלץ יישומים אחרים לעצור"</string>
- <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"מאפשר ליישום לאלץ עצירה של יישומים אחרים."</string>
+ <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"הפסק תהליכים ברקע"</string>
+ <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"מאפשר ליישום להפסיק תהליכים של יישומים אחרים הפועלים ברקע, גם אם יש עוד מקום בזיכרון."</string>
+ <string name="permlab_forceStopPackages" msgid="1447830113260156236">"אלץ יישומים אחרים להפסיק"</string>
+ <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"מאפשר ליישום לכפות הפסקה של יישומים אחרים."</string>
<string name="permlab_forceBack" msgid="1804196839880393631">"אלץ יישום להיסגר"</string>
- <string name="permdesc_forceBack" msgid="6534109744159919013">"מאפשר ליישום לאלץ פעילות כלשהי בחזית להיסגר ולעבור לרקע. לעולם לא אמור להיות דרוש ליישומים רגילים."</string>
- <string name="permlab_dump" msgid="1681799862438954752">"אחזור מצב פנימי של המערכת"</string>
- <string name="permdesc_dump" msgid="2198776174276275220">"מאפשר ליישום לאחזר את המצב הפנימי של המערכת. יישומים זדוניים עלולים לאחזר מגוון רחב של מידע פרטי ומאובטח שלא אמור להיות להם צורך בו."</string>
+ <string name="permdesc_forceBack" msgid="6534109744159919013">"מאפשר ליישום לאלץ פעילויות בחזית להיסגר ולעבור לרקע. לעולם לא נחוץ ביישומים רגילים."</string>
+ <string name="permlab_dump" msgid="1681799862438954752">"אחזר את מצב המערכת הפנימי"</string>
+ <string name="permdesc_dump" msgid="2198776174276275220">"מאפשר ליישומים לאחזר מצב פנימי של המערכת. יישומים זדוניים יכולים לאחזר מגוון רחב של מידע פרטי ומאובטח שהם לא צריכים בדרך כלל."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"אחזור תוכן המסך"</string>
<string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"מאפשר ליישום לאחזר את התוכן של החלון הפעיל. יישומים זדוניים עשויים לאחזר את כל תוכן החלון ולבחון את כל הטקסט שהוא מכיל פרט לסיסמאות."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"כיבוי חלקי"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"מעביר את מנהל הפעילויות למצב כיבוי. לא מבצע כיבוי מלא."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"מנע החלפת יישומים"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"מונע מהמשתמש לעבור ליישום אחר."</string>
- <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"עקוב ושלוט בכל השקת היישומים"</string>
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"פקח ושלוט על כל הפעלה של יישום"</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_broadcastPackageRemoved" msgid="2576333434893532475">"שלח שידור שהוסר מחבילה"</string>
+ <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"מאפשר ליישום לשדר התראה המודיעה על הסרת חבילה של יישום. יישומים זדוניים עלולים להשתמש באפשרות זו כדי להפסיק יישומים פועלים אחרים."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"שלח שידור שהתקבל ב-SMS"</string>
- <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"מאפשר ליישום לשדר התראה שהודעת SMS התקבלה. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לזייף הודעות SMS נכנסות."</string>
+ <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"מאפשר ליישום לשדר התראה שהודעת SMS התקבלה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לזייף הודעות SMS נכנסות."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"שלח שידור שהתקבל באמצעות WAP-PUSH"</string>
- <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"מאפשר ליישום לשדר התראה שהודעת WAP PUSH התקבלה. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לזייף קבלה של הודעות MMS או כדי להחליף באופן שקט את התוכן של דף אינטרנט כלשהו בגרסאות זדוניות."</string>
- <string name="permlab_setProcessLimit" msgid="2451873664363662666">"הגבלת מספר היישומים הפועלים"</string>
- <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"מאפשר ליישום לשלוט במספר המרבי של תהליכים שיופעלו. לעולם לא דרוש ליישומים רגילים."</string>
- <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"גרום לכל היישומים ברקע להיסגר"</string>
- <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"מאפשר ליישום לשלוט אם פעילויות מסתיימות תמיד ברגע שהן עוברות לרקע. לעולם לא דרוש ליישומים רגילים."</string>
+ <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"מאפשר ליישום לשדר התראה שהודעת WAP PUSH התקבלה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לזייף קבלה של הודעות MMS או כדי להחליף בשקט את התוכן של דף אינטרנט בגרסאות זדוניות."</string>
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"הגבל את מספר התהליכים הפועלים"</string>
+ <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"מאפשר ליישום לקבוע את מספר התהליכים המרבי שיפעל. לעולם לא נחוץ ביישומים רגילים."</string>
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"גרום לכל יישומי הרקע להיסגר"</string>
+ <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"מאפשר ליישום לקבוע אם פעילויות מסתיימות תמיד ברגע שהן עוברות לרקע. לעולם לא נחוץ ביישומים רגילים."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"שנה את הנתונים הסטטיסטיים של הסוללה"</string>
- <string name="permdesc_batteryStats" msgid="5847319823772230560">"מאפשר שינוי של נתונים סטטיסטיים הנאספים על הסוללה. לא לשימוש של יישומים רגילים."</string>
+ <string name="permdesc_batteryStats" msgid="5847319823772230560">"מאפשר שינוי של נתונים סטטיסטיים שנאספו לגבי הסוללה. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_backup" msgid="470013022865453920">"שלוט בגיבוי ובשחזור של המערכת"</string>
- <string name="permdesc_backup" msgid="4837493065154256525">"מאפשר ליישום לשלוט במנגנון הגיבוי והשחזור של המערכת. לא לשימוש של יישומים רגילים."</string>
+ <string name="permdesc_backup" msgid="4837493065154256525">"מאפשר ליישום לשלוט במנגנון הגיבוי והשחזור של המערכת. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_confirm_full_backup" msgid="5557071325804469102">"אשר פעולה של גיבוי או שחזור מלא"</string>
<string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"מאפשר ליישום להפעיל את ממשק האישור של הגיבוי המלא. לא מיועד לשימוש באף יישום."</string>
- <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"הצג חלונות לא מורשים"</string>
- <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"מאפשר יצירת חלונות המיועדים לשימוש של ממשק המשתמש במערכת הפנימית. לא לשימוש של יישומים רגילים."</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"הצג חלונות ללא הרשאה"</string>
+ <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"מאפשר יצירת חלונות שנועדו לשמש את ממשק המשתמש של המערכת הפנימית. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_systemAlertWindow" msgid="3372321942941168324">"הצג התראות ברמת המערכת"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"מאפשר ליישום להציג חלונות של התראות מערכת. יישומים זדוניים עלולים להשתלט על המסך כולו."</string>
- <string name="permlab_setAnimationScale" msgid="2805103241153907174">"שנה את מהירות ההנפשה הכללית"</string>
- <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"מאפשר ליישום לשנות את מהירות ההנפשה הכללית (הנפשות מהירות או איטיות יותר) בכל עת."</string>
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"שנה את מהירות ההנפשה הגלובלית"</string>
+ <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"מאפשר ליישום לשנות בכל עת את מהירות ההנפשה הגלובלית (הנפשות מהירות או איטיות יותר)."</string>
<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_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="default" msgid="3946098050410874715">"מאפשר ליישום לספק אירועי קלט משלו (הקשות על מקשים וכדומה) ליישומים אחרים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשתלט על הטלפון."</string>
- <string name="permlab_readInputState" msgid="469428900041249234">"הקלט את מה שאתה מקליד ואת הפעולות שאתה מבצע"</string>
- <string name="permdesc_readInputState" msgid="5132879321450325445">"מאפשר ליישומים לצפות במקשים שעליהם אתה לוחץ בעת אינטראקציה עם יישום אחר (כגון הזנת סיסמה). לא אמור להיות דרוש לעולם ליישום רגילים."</string>
- <string name="permlab_bindInputMethod" msgid="3360064620230515776">"הכפפה לשיטת קלט"</string>
- <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"מאפשר למחזיק להכפיף לממשק ברמה עליונה של שיטת קלט. לא אמור להידרש לעולם ביישומים רגילים."</string>
+ <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"מאפשר ליישום לספק אירועי קלט משלו (לחיצות על מקשים וכדומה) ליישומים אחרים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להשתלט על הטלפון."</string>
+ <string name="permlab_readInputState" msgid="469428900041249234">"נהל רישום של ההקלדות והפעולות שלך"</string>
+ <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="permdesc_bindTextService" msgid="172508880651909350">"מאפשר לבעלים להיות כפוף לממשק ברמה העליונה של שירות טקסט (לדוגמה, SpellCheckerService). הרשאה זו לא מיועדת לשימוש אף פעם ביישומים רגילים."</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>
+ <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="permlab_bindDeviceAdmin" msgid="8704986163711455010">"קיים אינטראקציה עם מנהל מכשיר"</string>
- <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"מאפשר למשתמש לשלוח כוונות למנהל התקן. לא אמור להידרש לעולם ביישומים רגילים."</string>
+ <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"קיים אינטראקציה עם מנהל המכשיר"</string>
+ <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"מאפשר למשתמש לשלוח כוונות למנהל המכשיר. לעולם לא נחוץ ביישומים רגילים."</string>
<string name="permlab_setOrientation" msgid="3365947717163866844">"שנה את כיוון המסך"</string>
- <string name="permdesc_setOrientation" msgid="6335814461615851863">"מאפשר ליישום לשנות את סיבוב המסך בכל עת. לא אמור להידרש לעולם ביישומים רגילים."</string>
+ <string name="permdesc_setOrientation" msgid="6335814461615851863">"מאפשר ליישום לשנות את סיבוב המסך בכל עת. לא נחוץ ביישומים רגילים."</string>
<string name="permlab_setPointerSpeed" msgid="9175371613322562934">"שינוי מהירות המצביע"</string>
<string name="permdesc_setPointerSpeed" msgid="137436038503379864">"מאפשר ליישום לשנות את מהירות מצביע העכבר או משטח העקיבה בכל עת. הגדרה זו אף פעם לא נחוצה עבור יישומים רגילים."</string>
<string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"שלח אותות Linux ליישומים"</string>
- <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"מאפשר ליישום לבקש שהאות המסופק יישלח לכל התהליכים המתמשכים."</string>
- <string name="permlab_persistentActivity" msgid="8659652042401085862">"הגדר את היישום לפעול תמיד"</string>
- <string name="permdesc_persistentActivity" msgid="5037199778265006008">"מאפשר ליישום להפוך חלקים ממנו למתמשכים, כך שהמערכת לא יכולה להשתמש בהם ליישומים אחרים."</string>
+ <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"מאפשר ליישום לבקש שהאות שיסופק יישלח לכל התהליכים הנוכחיים."</string>
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"הגדר את היישום כך שיפעל תמיד"</string>
+ <string name="permdesc_persistentActivity" msgid="5037199778265006008">"מאפשר ליישום להפוך חלקים ממנו לקבועים, כך שהמערכת לא יכולה להשתמש בהם ליישומים אחרים."</string>
<string name="permlab_deletePackages" msgid="3343439331576348805">"מחק יישומים"</string>
- <string name="permdesc_deletePackages" msgid="3634943677518723314">"מאפשר ליישום למחוק חפיסות של Android. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק יישומים חשובים."</string>
+ <string name="permdesc_deletePackages" msgid="3634943677518723314">"מאפשר ליישום למחוק חבילות של Android. יישומים זדוניים עלולים להשתמש באפשרות זו כדי למחוק יישומים חשובים."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"מחק נתונים של יישומים אחרים"</string>
<string name="permdesc_clearAppUserData" msgid="7546345080434325456">"מאפשר ליישום לנקות נתוני משתמש."</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"מחק קבצים שמורים של יישומים אחרים"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"מאפשר ליישום למחוק קבצים של הקובץ השמור."</string>
- <string name="permlab_getPackageSize" msgid="4799785352306641460">"מדידת שטח אחסון של יישום"</string>
- <string name="permdesc_getPackageSize" msgid="5557253039670753437">"מאפשר ליישום לאחזר את הקוד, הנתונים והגדלים של הקובץ השמור שלו."</string>
- <string name="permlab_installPackages" msgid="335800214119051089">"התקן יישומים באופן ישיר"</string>
- <string name="permdesc_installPackages" msgid="526669220850066132">"מאפשר ליישום להתקין חבילות Android חדשות או מעודכנות. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להוסיף יישומים חדשים עם הרשאות חזקות אקראיות."</string>
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"מדוד את גודל שטח האחסון של היישום"</string>
+ <string name="permdesc_getPackageSize" msgid="5557253039670753437">"מאפשר ליישום לאחזר את הקוד, הנתונים וגודל הקבצים השמורים שלו"</string>
+ <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="default" msgid="7740465694193671402">"מאפשר ליישום לפנות שטח אחסון בטלפון על ידי מחיקת קבצים בספריית הקובץ השמור של היישום. הגישה מוגבלת מאוד בדרך כלל לתהליך מערכת."</string>
- <string name="permlab_movePackage" msgid="728454979946503926">"העבר משאבי יישום"</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="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_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="permlab_setPreferredApplications" msgid="3393305202145172005">"הגדר יישומים מועדפים"</string>
- <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"מאפשר ליישום לשנות את היישומים המועדפים. פעולה זו עלולה לאפשר ליישומים זדוניים לשנות באופן שקט את היישומים הפועלים, לזייף את היישומים הקיימים כדי לאסוף נתונים פרטיים ממך."</string>
- <string name="permlab_writeSettings" msgid="1365523497395143704">"שנה הגדרות מערכת כלליות"</string>
+ <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"מאפשר ליישום לשנות את היישומים המועדפים. פעולה זו עלולה לאפשר ליישומים זדוניים לשנות באופן שקט את היישומים הפועלים ולזייף את היישומים הקיימים כדי לאסוף ממך נתונים פרטיים."</string>
+ <string name="permlab_writeSettings" msgid="1365523497395143704">"שנה את הגדרות המערכת הכלליות"</string>
<string name="permdesc_writeSettings" msgid="838789419871034696">"מאפשר ליישום לשנות את נתוני ההגדרות של המערכת. יישומים זדוניים עלולים לפגום בתצורת המערכת."</string>
- <string name="permlab_writeSecureSettings" msgid="204676251876718288">"שנה הגדרות אבטחת מערכת"</string>
- <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"מאפשר ליישום לשנות את נתוני הגדרות האבטחה של המערכת. לא לשימוש של יישומים רגילים."</string>
- <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="permlab_writeSecureSettings" msgid="204676251876718288">"שנה את הגדרות המערכת המאובטחת"</string>
+ <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"מאפשר ליישום לשנות את נתוני ההגדרות המאובטחות של המערכת. לא לשימוש ביישומים רגילים."</string>
+ <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="default" msgid="698336728415008796">"מאפשר ליישום להפעיל את עצמו מחדש לאחר אתחול המערכת. פעולה זו עלולה להאריך את הפעלת הטלפון ומאפשר ליישום להאט את הפעולה הכוללת של הטלפון אם היא פועלת תמיד."</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="default" msgid="1920045289234052219">"מאפשר ליישום לשלוח שירותים דביקים, הנשארים לאחר סיום השידור. יישומים זדוניים עלולים להאט את פעולת הטלפון או להפוך אותו ללא יציג כיוון שהם גורמים לשימוש מופרז בזיכרון."</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="default" msgid="3371591512896545975">"מאפשר ליישום לקרוא את כל הנתונים של אנשי הקשר (כתובות) המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לשלוח את הנתונים שלך לאנשים אחרים."</string>
- <string name="permlab_writeContacts" msgid="644616215860933284">"כתוב נתוני איש קשר"</string>
+ <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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"קריאת נתוני פרופיל"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"מאפשר ליישום לקרוא את כל פרטי הפרופיל האישיים שלך. יישומים זדוניים יכולים להשתמש בהרשאה זו כדי לזהות אותך ולשלוח את המידע האישי שלך לאנשים אחרים."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"כתוב נתוני פרופיל"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"מאפשר ליישום לשנות את פרטי הפרופיל האישיים שלך. יישומים זדוניים יכולים להשתמש בהרשאה זו כדי למחוק או לשנות את נתוני הפרופיל שלך."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"קרא אירועי לוח שנה"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"מאפשר ליישום לקרוא את כל נתוני לוח השנה המאוחסנים בטבלט. יישומים זדוניים יכולים להשתמש ביכולת זו כדי לשלוח את אירועי לוח השנה לאנשים אחרים."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"מאפשר ליישום לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לשלוח את אירועי לוח השנה שלך לאנשים אחרים."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"הוסף או שנה אירועי לוח השנה ושלח דוא\"ל לאורחים"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"מאפשר ליישום להוסיף או לשנות את האירועים בלוח השנה, פעולה שעשויה לשלוח דוא\"ל לאורחים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את האירועים בלוח השנה או כדי לשלוח דוא\"ל לאורחים."</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_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string>
- <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לעקוף את המקום ו/או המצב שהוחזרו על ידי משאבי מיקום אמיתיים כגון GPS או ספקי רשת."</string>
- <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גש לפקודות ספק מיקום נוספות"</string>
- <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"קבל גישה לפקודות נוספות של ספק מיקום. יישומים זדוניים עלולים להשתמש ביכולת זו כדי להפריע לפעולת ה-GPS או לפעולתם של מקורות מיקום אחרים."</string>
+ <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות המיקום האמיתיים כגון GPS או ספקי רשת."</string>
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גישה לפקודות ספק מיקום נוספות"</string>
+ <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"קבל גישה לפקודות נוספות של ספק מיקום. יישומים זדוניים עלולים להשתמש באפשרות זו כדי להפריע לפעולת ה-GPS או לפעולתם של מקורות מיקום אחרים."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"הרשאה להתקין ספק מיקום"</string>
- <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לעקוף את המקום ו/או המצב המוחזרים על ידי מקורות המיקום האמיתיים כגון GPS או ספקי רשת או לעקוב ולדווח על המיקום שלך למקור חיצוני."</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="default" msgid="7411213317434337331">"קבל גישה למקורות מיקום מדויקים כגון מערכת מיקום גלובלית (GPS) בטלפון, כאשר הם זמינים. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע היכן אתה נמצא, ולגרום לצריכת סוללה נוספת."</string>
- <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"מיקום משוער (מבוסס רשת)"</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="default" msgid="8235655958070862293">"קבל גישה למשאבי מיקום משוער כגון מסד הנתונים של הרשת הסלולרית כדי לקבוע את המיקום המשוער של הטלפון, כאשר ניתן. יישומים זדוניים עלולים להשתמש ביכולת זו כדי לקבוע את מיקומך המשוער."</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>
+ <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"מאפשר ליישום להשתמש בתכונות SurfaceFlinger ברמה נמוכה."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"אחסון זמני של מסגרת קריאה"</string>
- <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"מאפשר ליישום לקרוא את התוכן של אחסון זמני של מסגרת."</string>
- <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"שנה את הגדרות האודיו"</string>
- <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"מאפשר ליישום לשנות הגדרות אודיו כלליות כגון עוצמת קול וניתוב."</string>
+ <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"מאפשר ליישום לקרוא את התוכן של מאגר התמונות."</string>
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"שנה את הגדרות האודיו שלך"</string>
+ <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"מאפשר ליישום לשנות הגדרות אודיו גלובליות כגון עוצמת קול וניתוב."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"הקלט אודיו"</string>
- <string name="permdesc_recordAudio" msgid="6493228261176552356">"מאפשר ליישום לגשת לנתיב הקלטת אודיו."</string>
+ <string name="permdesc_recordAudio" msgid="6493228261176552356">"מאפשר ליישום גישה לנתיב הקלטת אודיו."</string>
<string name="permlab_camera" msgid="3616391919559751192">"צלם תמונות וסרטונים"</string>
- <string name="permdesc_camera" msgid="6004878235852154239">"מאפשר ליישום לצלם תמונות וסרטוני וידאו באמצעות המצלמה. כך יכול היישום לאסוף בכל עת תמונות שהמצלמה רואה."</string>
+ <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>
@@ -361,9 +367,9 @@
<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>
+ <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"מאפשר ליישום לטעון ולבטל טעינה של מערכות קבצים עבור אמצעי אחסון נשלפים."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"פרמט אמצעי אחסון חיצוני"</string>
- <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"מאפשר ליישום לפרמט אחסון הניתן להסרה."</string>
+ <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"מאפשר ליישום לפרמט אחסון נשלף."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"קבל מידע על אחסון פנימי"</string>
<string name="permdesc_asec_access" msgid="8820326551687285439">"מאפשר ליישום לקבל מידע על אחסון פנימי."</string>
<string name="permlab_asec_create" msgid="6414757234789336327">"צור אחסון פנימי"</string>
@@ -374,7 +380,7 @@
<string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"מאפשר ליישום לטעון/לבטל טעינה של אחסון פנימי."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"שנה שם של אחסון פנימי"</string>
<string name="permdesc_asec_rename" msgid="2152829985238876790">"מאפשר ליישום לשנות שם של אחסון פנימי."</string>
- <string name="permlab_vibrate" msgid="7768356019980849603">"שליטה ברטט"</string>
+ <string name="permlab_vibrate" msgid="7768356019980849603">"שלוט ברטט"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"מאפשר ליישום לשלוט ברטט."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"שליטה בפנס"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"מאפשר ליישום לשלוט בפנס."</string>
@@ -385,39 +391,39 @@
<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_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="default" msgid="5604848095315421425">"הפעל ישירות התקנה של טלפון 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>
- <string name="permdesc_locationUpdates" msgid="2300018303720930256">"מאפשר הפעלה/השבתה של הודעות עדכון מיקום מהרדיו. לא לשימוש של יישומים רגילים."</string>
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"שלוט בהתראות על עדכון מיקום"</string>
+ <string name="permdesc_locationUpdates" msgid="2300018303720930256">"מאפשר הפעלה/השבתה של התראות על עדכון מיקום מהרדיו. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_checkinProperties" msgid="7855259461268734914">"גישה למאפייני כניסה"</string>
- <string name="permdesc_checkinProperties" msgid="7150307006141883832">"מאפשר גישת קריאה/כתיבה למאפיינים שהועלו על ידי שירות הכניסה. לא לשימוש של יישומים רגילים."</string>
- <string name="permlab_bindGadget" msgid="776905339015863471">"בחר רכיבי widget"</string>
- <string name="permdesc_bindGadget" msgid="2098697834497452046">"מאפשר ליישום לומר למערכת באילו רכיבי widget ניתן להשתמש באילו יישומים. עם הרשאה זו, יישומים יכולים להעניק ליישומים אחרים גישה לנתונים אישיים. לא לשימוש של יישומים רגילים."</string>
+ <string name="permdesc_checkinProperties" msgid="7150307006141883832">"מאפשר גישת קריאה/כתיבה למאפיינים שהועלו על ידי שירות הכניסה. לא לשימוש ביישומים רגילים."</string>
+ <string name="permlab_bindGadget" msgid="776905339015863471">"בחר רכיבי Widget"</string>
+ <string name="permdesc_bindGadget" msgid="2098697834497452046">"מאפשר ליישום לומר למערכת באילו רכיבי Widget יכול להשתמש כל יישום. עם הרשאה זו, יישומים יכולים להעניק ליישומים אחרים גישה לנתונים אישיים. לא לשימוש ביישומים רגילים."</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"שנה את מצב הטלפון"</string>
- <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"מאפשר ליישום לשלוט בתכונות הטלפון של המכשיר. יישום עם הרשאה זו יכול להחליף רשתות, להפעיל ולכבות את הרדיו בטלפון וכדומה מבלי להודיע לך כלל."</string>
- <string name="permlab_readPhoneState" msgid="2326172951448691631">"קרא את המצב והזהות של הטלפון"</string>
- <string name="permdesc_readPhoneState" msgid="188877305147626781">"מאפשר ליישום לגשת לתכונות טלפון של המכשיר.יישום עם הרשאה זו יכול לקבוע את מספר הטלפון והמספר הסידורי של טלפון זה, אם שיחה היא פעילה, המספר שאליו מחוברת שיחה זו וכדומה."</string>
+ <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"מאפשר ליישום לשלוט בתכונות הטלפון של המכשיר. יישום עם הרשאה זו יכול לעבור בין רשתות, להפעיל ולכבות את הרדיו בטלפון וכדומה מבלי להודיע לך כלל."</string>
+ <string name="permlab_readPhoneState" msgid="2326172951448691631">"קרא את המצב והזיהוי של הטלפון"</string>
+ <string name="permdesc_readPhoneState" msgid="188877305147626781">"מאפשר ליישום לגשת לתכונות טלפון של המכשיר. יישום עם הרשאה זו יכול להגדיר את מספר הטלפון והמספר הסידורי של טלפון זה, לקבוע אם שיחה היא פעילה, להגדיר את המספר שאליו מחוברת שיחה זו וכדומה."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"מנע מהטבלט לעבור למצב שינה"</string>
<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="default" msgid="4928622470980943206">"הדלק או כבה את הטלפון"</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_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="default" msgid="8136644990319244802">"הפעל כבדיקת יצרן ברמה נמוכה, המאפשרת גישה מלאה לחומרת הטלפון. זמינה רק כאשר טלפון פועל במצב בדיקת יצרן."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"הגדר טפט"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"מאפשר ליישום להגדיר את טפט המערכת."</string>
- <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"הגדר רמזים לגודל טפט"</string>
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"הגדר רמזים לגודל הטפט"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"מאפשר ליישום להגדיר את הרמזים של גודל טפט המערכת."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"אפס את המערכת לברירות המחדל של היצרן"</string>
- <string name="permdesc_masterClear" msgid="5033465107545174514">"מאפשר ליישום לאפס לחלוטין את המערכת להגדרות היצרן, תוך מחיקה של כל הנתונים, התצורה והיישומים שהותקנו."</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="default" msgid="667294309287080045">"מאפשר ליישום לשנות את שעת השעון של הטלפון."</string>
@@ -428,63 +434,63 @@
<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="default" msgid="6839262446413155394">"מאפשר ליישום להגיע לרשימת החשבונות הידועים לטלפון."</string>
+ <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"מאפשר ליישום לקבל את רשימת החשבונות המוכרים לטלפון."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"פעל כמאמת חשבון"</string>
<string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"מאפשר ליישום להשתמש ביכולות מאמת החשבון של מנהל החשבון, כולל יצירת חשבונות וקבלה והגדרה של הסיסמאות שלהם."</string>
<string name="permlab_manageAccounts" msgid="4440380488312204365">"נהל את רשימת החשבונות"</string>
- <string name="permdesc_manageAccounts" msgid="8804114016661104517">"מאפשר ליישום לבצע פעולות כגון הוספה והסרה של חשבונות ומחיקת הסיסמאות שלהם."</string>
+ <string name="permdesc_manageAccounts" msgid="8804114016661104517">"מאפשר ליישום לבצע פעולות כגון הוספה והסרה של חשבונות ומחיקת הסיסמה שלהם."</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"השתמש באישורי האימות של חשבון"</string>
<string name="permdesc_useCredentials" msgid="7416570544619546974">"מאפשר ליישום לבקש אסימוני אימות."</string>
- <string name="permlab_accessNetworkState" msgid="6865575199464405769">"הצג את מצב הרשת"</string>
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"הצג מצב רשת"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"מאפשר ליישום להציג את המצב של כל הרשתות."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"גישה מלאה לאינטרנט"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"מאפשר ליישום ליצור שקעי רשת."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"כתיבת הגדרות שם של נקודת גישה"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"מאפשר ליישום לשנות את הגדרות ה-APN, כגון Proxy ויציאה של APN."</string>
- <string name="permlab_changeNetworkState" msgid="958884291454327309">"שנה את חיבוריות הרשת"</string>
- <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"מאפשר ליישום לשנות את המצב של קישוריות הרשת."</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_changeNetworkState" msgid="958884291454327309">"שנה את קישוריות הרשת"</string>
+ <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"מאפשר ליישום לשנות את מצב הקישוריות של הרשת."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"שנה קישוריות קשורה"</string>
<string name="permdesc_changeTetherState" msgid="8905815579146349568">"מאפשר ליישום לשנות את המצב של קישוריות רשת קשורה."</string>
- <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"שנה את הגדרת השימוש בנתוני הרקע"</string>
- <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"מאפשר ליישום לשנות את הגדרת השימוש בנתונים ברקע."</string>
+ <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"שנה את הגדרות השימוש בנתוני הרקע"</string>
+ <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"מאפשר ליישום לשנות את הגדרות השימוש בנתוני הרקע."</string>
<string name="permlab_accessWifiState" msgid="8100926650211034400">"הצג מצב Wi-Fi"</string>
- <string name="permdesc_accessWifiState" msgid="485796529139236346">"מאפשר ליישום להציג את המידע על מצב ה-Wi-Fi."</string>
- <string name="permlab_changeWifiState" msgid="7280632711057112137">"שנה את המצב של Wi-Fi"</string>
- <string name="permdesc_changeWifiState" msgid="2950383153656873267">"מאפשר ליישום להתחבר ולהתנתק מנקודות גישה של Wi-Fi, ולבצע שינויים ברשתות Wi-Fi מוגדרות."</string>
+ <string name="permdesc_accessWifiState" msgid="485796529139236346">"מאפשר ליישום להציג את המידע על המצב של Wi-Fi."</string>
+ <string name="permlab_changeWifiState" msgid="7280632711057112137">"שנה מצב Wi-Fi"</string>
+ <string name="permdesc_changeWifiState" msgid="2950383153656873267">"מאפשר ליישום להתחבר לנקודות גישה מסוג Wi-Fi ולהתנתק מהן, ולבצע שינויים ברשתות Wi-Fi מוגדרות."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"אפשר קבלת שידורים מרובים ב-Wi-Fi"</string>
- <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"מאפשר ליישום לקבל חפיסות שלא ממוענות ישירות למכשיר שלך. יכולת זו שימושית בעת גילוי שירותים המוצעים בקרבת מקום. היא משתמשת במתח סוללה רב יותר לעומת מצב שאינו ריבוי שידורים."</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="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="default" msgid="762515380679392945">"מאפשר ליישום להציג תצורה של מכשיר 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>
+ <string name="permdesc_nfc" msgid="9171401851954407226">"מאפשר ליישום לקיים תקשורת עם תגיות, כרטיסים וקוראים מסוג Near Field Communication ‏‏(NFC)."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"השבת נעילת מקשים"</string>
- <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"מאפשר ליישום להשבית את נעילת המקשים ואבטחת סיסמה משויכת. דוגמה תקפה לכך היא טלפון המשבית את נעילת המקשים בעת קבלת שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה."</string>
- <string name="permlab_readSyncSettings" msgid="6201810008230503052">"קרא הגדרות סנכרון"</string>
- <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"מאפשר ליישום לקרוא את הגדרות הסנכרון, כגון אם סנכרון מופעל עבור אנשי קשר."</string>
- <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"כתוב הגדרות סנכרון"</string>
- <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"מאפשר ליישום לשנות את הגדרות הסנכרון, כגון אם סנכרון מופעל עבור אנשי קשר."</string>
- <string name="permlab_readSyncStats" msgid="7396577451360202448">"קרא נתונים סטטיסטיים של סנכרון"</string>
- <string name="permdesc_readSyncStats" msgid="7511448343374465000">"אפשר ליישום לקרוא את נתוני הסנכרון, לדוגמה, ההיסטוריה של סנכרון שהתרחשו."</string>
- <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"קריאת עדכונים של מנויים"</string>
+ <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"מאפשר ליישום להשבית את נעילת המקשים וכל אבטחת סיסמה משויכת. דוגמה טובה לכך היא טלפון המשבית את נעילת המקשים בעת קבלת שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה."</string>
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"קרא את הגדרות הסינכרון"</string>
+ <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"מאפשר ליישום לקרוא את הגדרות הסינכרון, כגון ההגדרה הקובעת אם הסינכרון זמין לאנשי הקשר."</string>
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"כתוב הגדרות סינכרון"</string>
+ <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"מאפשר ליישום לשנות את הגדרות הסינכרון, כגון ההגדרה הקובעת אם הסינכרון מופעל עבור אנשי קשר."</string>
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"קרא את הנתונים הסטטיסטיים של הסינכרון"</string>
+ <string name="permdesc_readSyncStats" msgid="7511448343374465000">"מאפשר ליישום לקרוא את הנתונים הסטטיסטיים של הסינכרון; למשל, את ההיסטוריה של סינכרונים שהתרחשו."</string>
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"קרא עדכוני מנויים"</string>
<string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"מאפשר ליישום לקבל פרטים על העדכונים המסונכרנים הנוכחיים."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"כתוב עדכונים מנויים"</string>
- <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"מאפשר ליישום לשנות את העדכונים המסונכרנים הנוכחיים שלך. יכולת זה מאפשרת ליישום זדוני לשנות את העדכונים המסונכרנים שלך."</string>
- <string name="permlab_readDictionary" msgid="432535716804748781">"קרא מילון בהגדרת המשתמש"</string>
+ <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"מאפשר ליישום לשנות את העדכונים המסונכרנים הנוכחיים שלך. אפשרות זו עשויה לאפשר ליישום זדוני לשנות את העדכונים המסונכרנים שלך."</string>
+ <string name="permlab_readDictionary" msgid="432535716804748781">"קרא במילון בהגדרת המשתמש"</string>
<string name="permdesc_readDictionary" msgid="1082972603576360690">"מאפשר ליישום לקרוא מילים, שמות וביטויים פרטיים שהמשתמש אחסן במילון המשתמש."</string>
- <string name="permlab_writeDictionary" msgid="6703109511836343341">"כתוב למילון בהגדרת המשתמש"</string>
- <string name="permdesc_writeDictionary" msgid="2241256206524082880">"מאפשר ליישום לכתוב מילים חדשות במילון המשתמש."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"שנה/מחק תכנים באמצעי אחסון מסוג USB"</string>
- <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_writeDictionary" msgid="6703109511836343341">"כתוב במילון בהגדרת המשתמש"</string>
+ <string name="permdesc_writeDictionary" msgid="2241256206524082880">"מאפשר ליישום לכתוב מילים חדשות בתוך מילון המשתמש."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"שנה/מחק תוכן באמצעי אחסון מסוג USB"</string>
+ <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_cache_filesystem" msgid="5656487264819669824">"גישה למערכת הקבצים של הקובץ השמור"</string>
- <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"מאפשר ליישום לקרוא ולכתוב במערכת הקבצים של הקובץ השמור."</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>
<string name="permdesc_use_sip" msgid="6320376185606661843">"מאפשר ליישום להשתמש בשירות SIP כדי לבצע/לקבל שיחות אינטרנט."</string>
<string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"קריאת נתוני שימוש היסטוריים ברשת"</string>
@@ -494,19 +500,19 @@
<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="policydesc_limitPassword" msgid="9083400080861728056">"שלוט באורך ובתווים המותרים בסיסמאות לביטול נעילת מסך"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"עקוב אחר ניסיונות לביטול נעילת מסך"</string>
<string name="policydesc_watchLogin" product="tablet" msgid="933601759466308092">"עקוב אחר מספר הסיסמאות השגויות שהוזנו בעת ביטול נעילת המסך, ונעל את הטבלט או מחק את כל נתוני הטבלט אם הוזנו סיסמאות שגויות רבות מדי"</string>
<string name="policydesc_watchLogin" product="default" msgid="7227578260165172673">"עקוב אחר מספר הסיסמאות השגויות שהוזנו בעת ביטול נעילת המסך, ונעל את הטלפון או מחק את כל נתוני הטלפון אם הוזנו סיסמאות שגויות רבות מדי"</string>
<string name="policylab_resetPassword" msgid="2620077191242688955">"שנה את הסיסמה לביטול נעילת המסך"</string>
<string name="policydesc_resetPassword" msgid="5391240616981297361">"שנה את הסיסמה לביטול נעילת המסך"</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"נעל את המסך"</string>
- <string name="policydesc_forceLock" msgid="5696964126226028442">"שלוט באופן ובמועד של נעילות מסך"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"שלוט באופן ובמועד של נעילת מסך"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"מחק את כל הנתונים"</string>
<string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"מחק את נתוני הטבלט ללא אזהרה על ידי ביצוע איפוס נתוני יצרן"</string>
- <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"מחק את נתוני הטלפון ללא אזהרה, על ידי ביצוע איפוס נתוני יצרן"</string>
- <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"הגדר את שרת ה-proxy הגלובלי של ההתקן"</string>
- <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"הגדר את שרת proxy הגלובלי של ההתקן לשימוש כאשר המדיניות מופעלת. רק מנהל ההתקן הראשון מגדיר את שרת ה-proxy הגלובלי הפעיל."</string>
+ <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"מחק את נתוני הטלפון ללא אזהרה על ידי ביצוע איפוס נתוני יצרן"</string>
+ <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"הגדר את שרת ה-Proxy הכללי של המכשיר"</string>
+ <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"הגדר שימוש בשרת ה-Proxy הגלובלי של המכשיר כאשר המדיניות מופעלת. רק מנהל המכשיר הראשון מגדיר את שרת ה-Proxy הגלובלי הפעיל."</string>
<string name="policylab_expirePassword" msgid="885279151847254056">"הגדר תאריך תפוגה לסיסמה של נעילת המסך"</string>
<string name="policydesc_expirePassword" msgid="4844430354224822074">"שלוט בתדירות שבה הסיסמה של נעילת המסך חייבת להשתנות"</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"הגדר הצפנת אחסון"</string>
@@ -518,33 +524,33 @@
<item msgid="869923650527136615">"נייד"</item>
<item msgid="7897544654242874543">"עבודה"</item>
<item msgid="1103601433382158155">"פקס בעבודה"</item>
- <item msgid="1735177144948329370">"מס\' פקס בבית"</item>
+ <item msgid="1735177144948329370">"פקס בבית"</item>
<item msgid="603878674477207394">"זימונית"</item>
<item msgid="1650824275177931637">"אחר"</item>
- <item msgid="9192514806975898961">"מותאם אישית"</item>
+ <item msgid="9192514806975898961">"בהתאמה אישית"</item>
</string-array>
<string-array name="emailAddressTypes">
<item msgid="8073994352956129127">"בית"</item>
<item msgid="7084237356602625604">"עבודה"</item>
<item msgid="1112044410659011023">"אחר"</item>
- <item msgid="2374913952870110618">"מותאם אישית"</item>
+ <item msgid="2374913952870110618">"בהתאמה אישית"</item>
</string-array>
<string-array name="postalAddressTypes">
<item msgid="6880257626740047286">"בית"</item>
<item msgid="5629153956045109251">"עבודה"</item>
<item msgid="4966604264500343469">"אחר"</item>
- <item msgid="4932682847595299369">"מותאם אישית"</item>
+ <item msgid="4932682847595299369">"בהתאמה אישית"</item>
</string-array>
<string-array name="imAddressTypes">
<item msgid="1738585194601476694">"בית"</item>
<item msgid="1359644565647383708">"עבודה"</item>
<item msgid="7868549401053615677">"אחר"</item>
- <item msgid="3145118944639869809">"מותאם אישית"</item>
+ <item msgid="3145118944639869809">"בהתאמה אישית"</item>
</string-array>
<string-array name="organizationTypes">
<item msgid="7546335612189115615">"עבודה"</item>
<item msgid="4378074129049520373">"אחר"</item>
- <item msgid="3455047468583965104">"מותאם אישית"</item>
+ <item msgid="3455047468583965104">"בהתאמה אישית"</item>
</string-array>
<string-array name="imProtocols">
<item msgid="8595261363518459565">"AIM"</item>
@@ -556,7 +562,7 @@
<item msgid="2506857312718630823">"ICQ"</item>
<item msgid="1648797903785279353">"Jabber"</item>
</string-array>
- <string name="phoneTypeCustom" msgid="1644738059053355820">"מותאם אישית"</string>
+ <string name="phoneTypeCustom" msgid="1644738059053355820">"בהתאמה אישית"</string>
<string name="phoneTypeHome" msgid="2570923463033985887">"בית"</string>
<string name="phoneTypeMobile" msgid="6501463557754751037">"נייד"</string>
<string name="phoneTypeWork" msgid="8863939667059911633">"עבודה"</string>
@@ -566,7 +572,7 @@
<string name="phoneTypeOther" msgid="1544425847868765990">"אחר"</string>
<string name="phoneTypeCallback" msgid="2712175203065678206">"התקשרות חזרה"</string>
<string name="phoneTypeCar" msgid="8738360689616716982">"מכונית"</string>
- <string name="phoneTypeCompanyMain" msgid="540434356461478916">"מספר טלפון ראשי של חברה"</string>
+ <string name="phoneTypeCompanyMain" msgid="540434356461478916">"חברה - ראשי"</string>
<string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
<string name="phoneTypeMain" msgid="6766137010628326916">"ראשי"</string>
<string name="phoneTypeOtherFax" msgid="8587657145072446565">"פקס נוסף"</string>
@@ -578,23 +584,23 @@
<string name="phoneTypeAssistant" msgid="5596772636128562884">"מסייע"</string>
<string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
<string name="eventTypeCustom" msgid="7837586198458073404">"מותאם אישית"</string>
- <string name="eventTypeBirthday" msgid="2813379844211390740">"יום הולדת"</string>
+ <string name="eventTypeBirthday" msgid="2813379844211390740">"תאריך לידה"</string>
<string name="eventTypeAnniversary" msgid="3876779744518284000">"יום השנה"</string>
<string name="eventTypeOther" msgid="7388178939010143077">"אחר"</string>
- <string name="emailTypeCustom" msgid="8525960257804213846">"מותאם אישית"</string>
+ <string name="emailTypeCustom" msgid="8525960257804213846">"בהתאמה אישית"</string>
<string name="emailTypeHome" msgid="449227236140433919">"בית"</string>
<string name="emailTypeWork" msgid="3548058059601149973">"עבודה"</string>
<string name="emailTypeOther" msgid="2923008695272639549">"אחר"</string>
- <string name="emailTypeMobile" msgid="119919005321166205">"סלולרי"</string>
- <string name="postalTypeCustom" msgid="8903206903060479902">"מותאם אישית"</string>
+ <string name="emailTypeMobile" msgid="119919005321166205">"נייד"</string>
+ <string name="postalTypeCustom" msgid="8903206903060479902">"בהתאמה אישית"</string>
<string name="postalTypeHome" msgid="8165756977184483097">"בית"</string>
<string name="postalTypeWork" msgid="5268172772387694495">"עבודה"</string>
<string name="postalTypeOther" msgid="2726111966623584341">"אחר"</string>
- <string name="imTypeCustom" msgid="2074028755527826046">"מותאם אישית"</string>
+ <string name="imTypeCustom" msgid="2074028755527826046">"בהתאמה אישית"</string>
<string name="imTypeHome" msgid="6241181032954263892">"בית"</string>
<string name="imTypeWork" msgid="1371489290242433090">"עבודה"</string>
<string name="imTypeOther" msgid="5377007495735915478">"אחר"</string>
- <string name="imProtocolCustom" msgid="6919453836618749992">"מותאם אישית"</string>
+ <string name="imProtocolCustom" msgid="6919453836618749992">"בהאתמה אישית"</string>
<string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
<string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
<string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
@@ -606,7 +612,7 @@
<string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
<string name="orgTypeWork" msgid="29268870505363872">"עבודה"</string>
<string name="orgTypeOther" msgid="3951781131570124082">"אחר"</string>
- <string name="orgTypeCustom" msgid="225523415372088322">"מותאם אישית"</string>
+ <string name="orgTypeCustom" msgid="225523415372088322">"בהתאמה אישית"</string>
<string name="relationTypeCustom" msgid="3542403679827297300">"מותאם אישית"</string>
<string name="relationTypeAssistant" msgid="6274334825195379076">"עוזר"</string>
<string name="relationTypeBrother" msgid="8757913506784067713">"אח"</string>
@@ -622,8 +628,8 @@
<string name="relationTypeRelative" msgid="1799819930085610271">"קרוב משפחה"</string>
<string name="relationTypeSister" msgid="1735983554479076481">"אחות"</string>
<string name="relationTypeSpouse" msgid="394136939428698117">"בן/בת זוג"</string>
- <string name="sipAddressTypeCustom" msgid="2473580593111590945">"מותאם אישית"</string>
- <string name="sipAddressTypeHome" msgid="6093598181069359295">"בית"</string>
+ <string name="sipAddressTypeCustom" msgid="2473580593111590945">"בהתאמה אישית"</string>
+ <string name="sipAddressTypeHome" msgid="6093598181069359295">"דף הבית"</string>
<string name="sipAddressTypeWork" msgid="6920725730797099047">"עבודה"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"אחר"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"הזן קוד PIN"</string>
@@ -642,7 +648,7 @@
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"לחץ על \'תפריט\' כדי לבטל את הנעילה."</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"שרטט קו לביטול נעילת המסך"</string>
<string name="lockscreen_emergency_call" msgid="5347633784401285225">"שיחת חירום"</string>
- <string name="lockscreen_return_to_call" msgid="5244259785500040021">"חזרה לשיחה"</string>
+ <string name="lockscreen_return_to_call" msgid="5244259785500040021">"חזור לשיחה"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"נכון!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"מצטערים, נסה שוב"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"מצטערים, נסה שוב"</string>
@@ -658,20 +664,20 @@
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"כרטיס ה-SIM שלך מושבת לצמיתות."\n" צור קשר עם ספק השירות האלחוטי שלך כדי לקבל כרטיס SIM אחר."</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"שיחות חירום בלבד"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"רשת נעולה"</string>
- <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"כרטיס ה-SIM נעול באמצעות PUK."</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"כרטיס SIM נעול באמצעות PUK."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"עיין במדריך למשתמש או פנה לשירות הלקוחות."</string>
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"כרטיס ה-SIM נעול."</string>
- <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"מבטל נעילת כרטיס SIM…"</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"מבטל נעילה של כרטיס SIM…"</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"הזנת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<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_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_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>
- <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"ניסיונות קו רבים מדי!"</string>
- <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"כדי לבטל את הנעילה, היכנס לחשבון Google שברשותך"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"ניסיונות רבים מדי לשרטוט קו!"</string>
+ <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"כדי לבטל את הנעילה, היכנס עם חשבון Google שלך"</string>
<string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"שם משתמש (דוא\"ל)"</string>
<string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"סיסמה"</string>
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"כניסה"</string>
@@ -682,7 +688,7 @@
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"קול פועל"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"ללא קול"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
- <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+ <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"אבג"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
<string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
@@ -690,7 +696,7 @@
<string name="factorytest_not_system" msgid="4435201656767276723">"הפעולה FACTORY_TEST נתמכת רק עבור חבילות שהותקנו ב-‎/system/app."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"לא נמצאה חבילה המספקת את הפעולה FACTORY_TEST."</string>
<string name="factorytest_reboot" msgid="6320168203050791643">"אתחל מחדש"</string>
- <string name="js_dialog_title" msgid="8143918455087008109">"בדף ב-\'<xliff:g id="TITLE">%s</xliff:g>\' נאמר:"</string>
+ <string name="js_dialog_title" msgid="8143918455087008109">"בדף בתוך \'<xliff:g id="TITLE">%s</xliff:g>\' נאמר:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">"לנווט מחוץ לדף זה?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"בחר \'אישור\' כדי להמשיך או \'ביטול\' כדי להישאר בדף הנוכחי."</string>
<string name="save_password_label" msgid="6860261758665825069">"אשר"</string>
@@ -713,31 +719,47 @@
<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="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="default" msgid="945571990357114950">"מאפשר ליישום לשנות את ההיסטוריה או הסימניות של הדפדפן המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את נתוני הדפדפן."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"מאפשר ליישום לשנות את ההיסטוריה או הסימניות של הדפדפן המאוחסנות בטלפון. יישומים זדוניים עלולים להשתמש ביכולת זו כדי למחוק או לשנות את נתוני הדפדפן."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"הגדר התראה בשעון המעורר"</string>
- <string name="permdesc_setAlarm" msgid="5966966598149875082">"מאפשר ליישום להגדיר התראה ביישום מותקן של שעון מעורר. חלק מיישומי השעון המעורר עשויים שלא ליישם תכונה זו."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"מאפשר ליישום להגדיר התראה ביישום מותקן של שעון מעורר. ייתכן שיישומי שעון מעורר מסוימים לא יישמו תכונה זו."</string>
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"הוסף דואר קולי"</string>
+ <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_addVoicemail (4828507394878206682) -->
+ <!-- no translation found for permdesc_bindPackageVerifier (2409521927385789318) -->
<skip />
- <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"שנה את ההרשאות של מיקום גיאוגרפי בדפדפן"</string>
- <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"מאפשר ליישום לשנות את הרשאות היעד הגיאוגרפי של הדפדפן. יישומים זדוניים יכולים להשתמש ביכולת זו כדי לאפשר שליחה של פרטי מיקום לאתרי אינטרנט אקראיים."</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>
+ <string name="save_password_notnow" msgid="6389675316706699758">"לא כעת"</string>
+ <string name="save_password_remember" msgid="6491879678996749466">"זכור"</string>
<string name="save_password_never" msgid="8274330296785855105">"אף פעם"</string>
- <string name="open_permission_deny" msgid="5661861460947222274">"אין לך אישורים לפתוח דף זה."</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"אין לך הרשאות לפתוח דף זה."</string>
<string name="text_copied" msgid="4985729524670131385">"הטקסט הועתק ללוח."</string>
<string name="more_item_label" msgid="4650918923083320495">"עוד"</string>
<string name="prepend_shortcut_label" msgid="2572214461676015642">"תפריט+"</string>
<string name="menu_space_shortcut_label" msgid="2410328639272162537">"רווח"</string>
<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>
+ <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="oneMonthDurationPast" msgid="7396384508953779925">"לפני חודש אחד"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"לפני חודש אחד"</string>
<plurals name="num_seconds_ago">
@@ -755,7 +777,7 @@
<plurals name="last_num_days">
<item quantity="other" msgid="3069992808164318268">"<xliff:g id="COUNT">%d</xliff:g> הימים האחרונים"</item>
</plurals>
- <string name="last_month" msgid="3959346739979055432">"בחודש הקודם"</string>
+ <string name="last_month" msgid="3959346739979055432">"בחודש שעבר"</string>
<string name="older" msgid="5211975022815554840">"ישן יותר"</string>
<plurals name="num_days_ago">
<item quantity="one" msgid="861358534398115820">"אתמול"</item>
@@ -782,11 +804,11 @@
<item quantity="other" msgid="3699169366650930415">"לפני <xliff:g id="COUNT">%d</xliff:g> שניות"</item>
</plurals>
<plurals name="abbrev_num_minutes_ago">
- <item quantity="one" msgid="6361490147113871545">"לפני דקה אחת"</item>
+ <item quantity="one" msgid="6361490147113871545">"לפני דקה"</item>
<item quantity="other" msgid="851164968597150710">"לפני <xliff:g id="COUNT">%d</xliff:g> דקות"</item>
</plurals>
<plurals name="abbrev_num_hours_ago">
- <item quantity="one" msgid="4796212039724722116">"לפני שעה אחת"</item>
+ <item quantity="one" msgid="4796212039724722116">"לפני שעה"</item>
<item quantity="other" msgid="6889970745748538901">"לפני <xliff:g id="COUNT">%d</xliff:g> שעות"</item>
</plurals>
<plurals name="abbrev_num_days_ago">
@@ -810,23 +832,23 @@
<item quantity="other" msgid="2973062968038355991">"בעוד <xliff:g id="COUNT">%d</xliff:g> ימים"</item>
</plurals>
<string name="preposition_for_date" msgid="9093949757757445117">"בתאריך <xliff:g id="DATE">%s</xliff:g>"</string>
- <string name="preposition_for_time" msgid="5506831244263083793">"ב-<xliff:g id="TIME">%s</xliff:g>"</string>
- <string name="preposition_for_year" msgid="5040395640711867177">"במסגרת <xliff:g id="YEAR">%s</xliff:g>"</string>
+ <string name="preposition_for_time" msgid="5506831244263083793">"בשעה <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="preposition_for_year" msgid="5040395640711867177">"בשנת <xliff:g id="YEAR">%s</xliff:g>"</string>
<string name="day" msgid="8144195776058119424">"יום"</string>
<string name="days" msgid="4774547661021344602">"ימים"</string>
<string name="hour" msgid="2126771916426189481">"שעה"</string>
<string name="hours" msgid="894424005266852993">"שעות"</string>
- <string name="minute" msgid="9148878657703769868">"מינימום"</string>
+ <string name="minute" msgid="9148878657703769868">"דקה"</string>
<string name="minutes" msgid="5646001005827034509">"דקות"</string>
- <string name="second" msgid="3184235808021478">"שנייה"</string>
+ <string name="second" msgid="3184235808021478">"שניות"</string>
<string name="seconds" msgid="3161515347216589235">"שניות"</string>
<string name="week" msgid="5617961537173061583">"שבוע"</string>
<string name="weeks" msgid="6509623834583944518">"שבועות"</string>
<string name="year" msgid="4001118221013892076">"שנה"</string>
<string name="years" msgid="6881577717993213522">"שנים"</string>
- <string name="VideoView_error_title" msgid="3359437293118172396">"אין אפשרות להפעיל את סרטון הווידאו"</string>
- <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"מצטערים, סרטון וידאו זה אינו חוקי כמדיה זורמת במכשיר זה."</string>
- <string name="VideoView_error_text_unknown" msgid="710301040038083944">"מצטערים, אין אפשרות להפעיל סרטון וידאו זה."</string>
+ <string name="VideoView_error_title" msgid="3359437293118172396">"אין אפשרות להפעיל את הווידאו"</string>
+ <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"מצטערים, וידאו זה אינו חוקי כמדיה זורמת במכשיר זה."</string>
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"מצטערים, אין אפשרות להפעיל וידאו זה."</string>
<string name="VideoView_error_button" msgid="2822238215100679592">"אישור"</string>
<string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="7245353528818587908">"צהריים"</string>
@@ -836,27 +858,25 @@
<string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
<string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
<string name="selectAll" msgid="6876518925844129331">"בחר הכל"</string>
- <string name="cut" msgid="3092569408438626261">"גזור"</string>
+ <string name="cut" msgid="3092569408438626261">"חתוך"</string>
<string name="copy" msgid="2681946229533511987">"העתק"</string>
<string name="paste" msgid="5629880836805036433">"הדבק"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"אין מה להדביק"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"החלף"</string>
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"בחירת טקסט"</string>
<string name="inputMethod" msgid="1653630062304567879">"שיטת קלט"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"פעולות טקסט"</string>
- <string name="low_internal_storage_view_title" msgid="1399732408701697546">"חסר מקום"</string>
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"חסר שטח"</string>
<string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"שטח האחסון בטבלט עומד להיגמר."</string>
- <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"שטח האחסון בטלפון עומד להיגמר."</string>
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"שטח האחסון בטלפון הולך ואוזל."</string>
<string name="ok" msgid="5970060430562524910">"אישור"</string>
<string name="cancel" msgid="6442560571259935130">"ביטול"</string>
<string name="yes" msgid="5362982303337969312">"אישור"</string>
<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>
@@ -864,16 +884,18 @@
<string name="chooseActivity" msgid="1009246475582238425">"בחר פעולה"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"בחר יישום עבור התקן ה-USB"</string>
<string name="noApplications" msgid="1691104391758345586">"אין יישומים שיכולים לבצע פעולה זו."</string>
- <string name="aerr_title" msgid="653922989522758100">"מצטערים!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"היישום <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הופסק באופן לא צפוי. נסה שוב."</string>
- <string name="aerr_process" msgid="1551785535966089511">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הופסק באופן לא צפוי. נסה שוב."</string>
- <string name="anr_title" msgid="3100070910664756057">"מצטערים!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"הפעילות <xliff:g id="ACTIVITY">%1$s</xliff:g> (ביישום <xliff:g id="APPLICATION">%2$s</xliff:g>) אינה מגיבה."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"הפעילות <xliff:g id="ACTIVITY">%1$s</xliff:g> (בתהליך <xliff:g id="PROCESS">%2$s</xliff:g>) אינה מגיבה."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"היישום <xliff:g id="APPLICATION">%1$s</xliff:g> (בתהליך <xliff:g id="PROCESS">%2$s</xliff:g>) אינו מגיב."</string>
- <string name="anr_process" msgid="1246866008169975783">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> אינו מגיב."</string>
- <string name="force_close" msgid="3653416315450806396">"אלץ סגירה"</string>
- <string name="report" msgid="4060218260984795706">"דווח"</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="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="force_close" msgid="8346072094521265605">"אישור"</string>
+ <string name="report" msgid="4060218260984795706">"שלח דוח"</string>
<string name="wait" msgid="7147118217226317732">"המתן"</string>
<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>
@@ -889,13 +911,13 @@
<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>
- <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"יישום אחר כבר פועל ויש לעצור אותו לפני שתוכל להפעיל יישום חדש."</string>
- <string name="old_app_action" msgid="493129172238566282">"חזרה אל <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+ <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"יישום אחר כבר פועל ויש לעצור אותו כדי שתוכל להפעיל יישום חדש."</string>
+ <string name="old_app_action" msgid="493129172238566282">"חזור אל <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="old_app_description" msgid="942967900237208466">"אל תפעיל את היישום החדש."</string>
<string name="new_app_action" msgid="5472756926945440706">"הפעל את <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="6830398339826789493">"הפסק את היישום הישן מבלי לשמור."</string>
<string name="sendText" msgid="5132506121645618310">"בחר פעולה לטקסט"</string>
- <string name="volume_ringtone" msgid="6885421406845734650">"עוצמת הקול של הצלצול"</string>
+ <string name="volume_ringtone" msgid="6885421406845734650">"עוצמת קול של צלצול"</string>
<string name="volume_music" msgid="5421651157138628171">"עוצמת קול של מדיה"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"הפעלה באמצעות Bluetooth"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"נבחר צלצול שקט"</string>
@@ -904,23 +926,16 @@
<string name="volume_alarm" msgid="1985191616042689100">"עוצמת קול של התראה"</string>
<string name="volume_notification" msgid="2422265656744276715">"עוצמת קול של התראות"</string>
<string name="volume_unknown" msgid="1400219669770445902">"עוצמת קול"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
- <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>
+ <!-- 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="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>
- <string name="ringtone_picker_title" msgid="3515143939175119094">"צלצולים"</string>
- <string name="ringtone_unknown" msgid="5477919988701784788">"צלצול לא ידוע"</string>
+ <string name="ringtone_picker_title" msgid="3515143939175119094">"רינגטונים"</string>
+ <string name="ringtone_unknown" msgid="5477919988701784788">"רינגטון לא ידוע"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"רשת Wi-Fi זמינה"</item>
<item quantity="other" msgid="4192424489168397386">"רשתות Wi-Fi זמינות"</item>
@@ -929,23 +944,23 @@
<item quantity="one" msgid="1634101450343277345">"רשת Wi-Fi פתוחה זמינה"</item>
<item quantity="other" msgid="7915895323644292768">"רשתות Wi-Fi פתוחות זמינות"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"רשת Wi-Fi הושבתה"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"רשת Wi-Fi הושבתה באופן זמני עקב קישוריות גרועה."</string>
+ <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 ישיר"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"התחל פעולה ישירה של Wi-Fi. פעולה זו תכבה את פעולת הלקוח/נקודה חמה של ה-Wi-Fi."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"הפעלת Wi-Fi ישיר נכשלה"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"הפעלת Wi-Fi ישיר נכשלה"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"בקשה להגדרת חיבור Wi-Fi ישיר מאת <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. לחץ על \'אישור\' כדי לקבל."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"בקשה להתקנת חיבור Wi-Fi ישיר מאת <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>
- <string name="sms_control_message" msgid="1289331457999236205">"מספר גדול של הודעות SMS נשלח. בחר \'אישור\' כדי להמשיך או \'ביטול\' כדי לעצור את השליחה."</string>
+ <string name="sms_control_message" msgid="1289331457999236205">"נשלח כעת מספר גדול של הודעות SMS. בחר \'אישור\' כדי להמשיך או \'ביטול\' כדי לעצור את השליחה."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"אישור"</string>
<string name="sms_control_no" msgid="1715320703137199869">"ביטול"</string>
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -961,26 +976,26 @@
<string name="default_permission_group" msgid="2690160991405646128">"ברירת מחדל"</string>
<string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"הסתר"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"הצג הכול"</b></string>
- <string name="usb_storage_activity_title" msgid="2399289999608900443">"אחסון ב-USB"</string>
+ <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_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>
+ <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>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB מחובר"</string>
- <string name="usb_storage_notification_message" msgid="7380082404288219341">"בחר כדי להעתיק קבצים מהמחשב/אל המחשב."</string>
- <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"כבה אחסון USB"</string>
- <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"בחר כדי לכבות אחסון USB."</string>
- <string name="usb_storage_stop_title" msgid="660129851708775853">"אחסון USB נמצא בשימוש"</string>
- <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"לפני כיבוי אמצעי אחסון מסוג USB, ודא שפרקת (\"הוצאת\") את אמצעי אחסון מסוג USB של Android מהמחשב."</string>
- <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"לפני כיבוי אחסון USB, ודא שהסרת (\"הוצאת\") את כרטיס ה-SD של Android מהמחשב."</string>
- <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"כבה אחסון USB"</string>
- <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>
- <string name="dlg_error_title" msgid="8048999973837339174">"הפעלת ה-USB נכשלה"</string>
+ <string name="usb_storage_notification_message" msgid="7380082404288219341">"בחר כדי להעתיק קבצים למחשב/מהמחשב."</string>
+ <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"כבה אמצעי אחסון מסוג USB"</string>
+ <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"בחר כאן לכיבוי אחסון USB."</string>
+ <string name="usb_storage_stop_title" msgid="660129851708775853">"אמצעי אחסון מסוג USB שנמצא בשימוש"</string>
+ <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"לפני כיבוי אמצעי אחסון מסוג USB, ודא שביטלת את הטעינה של אמצעי האחסון מסוג USB של Android (\"הוצאת אותו\") מהמחשב."</string>
+ <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"לפני הכיבוי של אמצעי אחסון מסוג USB, ודא שהסרת (\"הוצאת\") את כרטיס SD של Android מהמחשב."</string>
+ <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"כבה אמצעי אחסון מסוג USB"</string>
+ <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_ok" msgid="7376953167039865701">"אישור"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"מחובר כמכשיר מדיה"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"מחובר כמצלמה"</string>
@@ -989,64 +1004,64 @@
<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>
- <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"לפרמט את אמצעי האחסון מסוג USB, תוך מחיקת כל הקבצים? הפעולה בלתי הפיכה!"</string>
+ <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"לפרמט את אמצעי האחסון מסוג USB, ולמחוק את כל הקבצים המאוחסנים בו? הפעולה בלתי הפיכה!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"האם אתה בטוח שברצונך לפרמט את כרטיס ה-SD? כל הנתונים בכרטיס יאבדו."</string>
- <string name="extmedia_format_button_format" msgid="4131064560127478695">"פורמט"</string>
+ <string name="extmedia_format_button_format" msgid="4131064560127478695">"פרמוט"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"ניקוי באגים של USB מחובר"</string>
- <string name="adb_active_notification_message" msgid="8470296818270110396">"בחר כדי להשבית ניקוי באגים ב-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="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZאבגדהוזחטיכלמנסעפצקרשת"</string>
- <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789אבגדהוזחטיכלמנסעפצקרשת"</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>
<string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"מכין אמצעי אחסון מסוג USB"</string>
- <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"מכין את כרטיס ה-SD"</string>
+ <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"מכין את כרטיס SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"בודק אם יש שגיאות."</string>
<string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"אמצעי אחסון ריק מסוג USB"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"כרטיס SD ריק"</string>
- <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"אמצעי אחסון ריק מסוג USB או עם מערכת קבצים לא נתמכת."</string>
- <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"כרטיס ה-SD ריק או שמערכת הקבצים שלו לא נתמכת."</string>
+ <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"אחסון USB ריק או עם מערכת קבצים לא נתמכת."</string>
+ <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"כרטיס SD ריק או שמערכת הקבצים שלו לא נתמכת."</string>
<string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"אמצעי אחסון פגום מסוג USB"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"כרטיס SD פגום"</string>
- <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"אמצעי אחסון מסוג USB נפגם. ייתכן שיהיה עליך לפרמט אותו שוב."</string>
- <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"כרטיס ה-SD פגום. ייתכן שיהיה עליך לפרמט אותו שוב."</string>
+ <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"אחסון USB נפגם. ייתכן שיהיה עליך לפרמט אותו שוב."</string>
+ <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"כרטיס SD פגום. ייתכן שתצטרך לפרמט אותו שוב."</string>
<string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"אמצעי אחסון מסוג USB הוסר באופן בלתי צפוי"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"כרטיס SD הוסר באופן לא צפוי"</string>
- <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"בטל טעינת אמצעי אחסון מסוג USB לפני הסרתו כדי להימנע מאובדן נתונים."</string>
- <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"בטל את טעינת כרטיס ה-SD לפני הסרתו כדי למנוע אובדן נתונים."</string>
+ <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"בטל טעינה של אחסון USB לפני הסרתו כדי למנוע אובדן נתונים."</string>
+ <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"בטל את טעינת כרטיס SD לפני הסרתו כדי למנוע אובדן נתונים."</string>
<string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"ניתן להסיר את אמצעי האחסון מסוג USB בבטחה"</string>
- <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"אפשר להסיר את כרטיס ה-SD"</string>
- <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"אתה יכול להסיר בבטחה את אמצעי האחסון מסוג USB."</string>
- <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"ניתן להסיר בבטחה את כרטיס ה-SD."</string>
+ <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"אפשר להסיר את כרטיס SD"</string>
+ <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"אתה יכול להסיר בבטחה את אחסון ה-USB."</string>
+ <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"ניתן להסיר בבטחה כרטיס SD."</string>
<string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"אמצעי אחסון מסוג USB הוסר"</string>
- <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"כרטיס ה-SD הוסר"</string>
+ <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"כרטיס SD הוסר"</string>
<string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"אמצעי אחסון מסוג USB הוסר. הכנס מדיה חדשה."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"כרטיס SD הוסר. הכנס כרטיס חדש."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"לא נמצאו פעילויות תואמות"</string>
- <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"עדכון נתונים סטטיסטיים של שימוש ברכיב"</string>
- <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"מאפשר שינוי של נתונים סטטיסטיים הנאספים על שימוש ברכיבים. לא לשימוש של יישומים רגילים."</string>
- <string name="permlab_copyProtectedData" msgid="1660908117394854464">"מאפשר להפעיל שירות גורם מכיל המוגדר כברירת מחדל כדי להעתיק תוכן. לא לשימוש של יישומים רגילים."</string>
- <string name="permdesc_copyProtectedData" msgid="537780957633976401">"מאפשר להפעיל שירות גורם מכיל המוגדר כברירת מחדל כדי להעתיק תוכן. לא לשימוש של יישומים רגילים."</string>
- <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"הקש פעמיים לשליטה במרחק מתצוגה"</string>
- <string name="gadget_host_error_inflating" msgid="2613287218853846830">"שגיאה בהגדלת widget"</string>
- <string name="ime_action_go" msgid="8320845651737369027">"בצע"</string>
- <string name="ime_action_search" msgid="658110271822807811">"חיפוש"</string>
+ <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"עדכן נתונים סטטיסטיים על שימוש ברכיב"</string>
+ <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"מאפשר שינוי של נתונים סטטיסטיים שנאספו על שימוש ברכיבים. לא לשימוש ביישומים רגילים."</string>
+ <string name="permlab_copyProtectedData" msgid="1660908117394854464">"מאפשר להפעיל שירות גורם מכיל המוגדר כברירת מחדל כדי להעתיק תוכן. לא לשימוש ביישומים רגילים."</string>
+ <string name="permdesc_copyProtectedData" msgid="537780957633976401">"מאפשר להפעיל שירות גורם מכיל המוגדר כברירת מחדל כדי להעתיק תוכן. לא לשימוש ביישומים רגילים."</string>
+ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"הקש פעמיים לבקרת מרחק מתצוגה"</string>
+ <string name="gadget_host_error_inflating" msgid="2613287218853846830">"שגיאה בהגדלת Widget"</string>
+ <string name="ime_action_go" msgid="8320845651737369027">"התחל"</string>
+ <string name="ime_action_search" msgid="658110271822807811">"חפש"</string>
<string name="ime_action_send" msgid="2316166556349314424">"שלח"</string>
<string name="ime_action_next" msgid="3138843904009813834">"הבא"</string>
- <string name="ime_action_done" msgid="8971516117910934605">"בוצע"</string>
+ <string name="ime_action_done" msgid="8971516117910934605">"סיום"</string>
<string name="ime_action_previous" msgid="1443550039250105948">"הקודם"</string>
<string name="ime_action_default" msgid="2840921885558045721">"בצע"</string>
<string name="dial_number_using" msgid="5789176425167573586">"חייג למספר"\n"באמצעות <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="create_contact_using" msgid="4947405226788104538">"צור איש קשר"\n"באמצעות <xliff:g id="NUMBER">%s</xliff:g>"</string>
- <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"היישומים הבאים מבקשים הרשאה לגשת לחשבונך, כעת ובעתיד."</string>
+ <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"היישומים הבאים, אחד או יותר, מבקשים הרשאת גישה לחשבונך, כעת ובעתיד."</string>
<string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"האם ברצונך לאפשר בקשה זו?"</string>
<string name="grant_permissions_header_text" msgid="2722567482180797717">"בקשת גישה"</string>
<string name="allow" msgid="7225948811296386551">"אפשר"</string>
<string name="deny" msgid="2081879885755434506">"דחה"</string>
<string name="permission_request_notification_title" msgid="5390555465778213840">"בקשה להרשאה"</string>
- <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"דרוש אישור"\n"עבור החשבון <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"דרושה הרשאה"\n"עבור החשבון <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="input_method_binding_label" msgid="1283557179944992649">"שיטת קלט"</string>
- <string name="sync_binding_label" msgid="3687969138375092423">"סנכרון"</string>
+ <string name="sync_binding_label" msgid="3687969138375092423">"סינכרון"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"נגישות"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"טפט"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"שנה טפט"</string>
@@ -1056,7 +1071,7 @@
<string name="vpn_text_long" msgid="4907843483284977618">"מחובר אל <xliff:g id="SESSION">%s</xliff:g>. הקש כדי לנהל את הרשת."</string>
<string name="upload_file" msgid="2897957172366730416">"בחר קובץ"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"לא נבחר קובץ"</string>
- <string name="reset" msgid="2448168080964209908">"אפס"</string>
+ <string name="reset" msgid="2448168080964209908">"איפוס"</string>
<string name="submit" msgid="1602335572089911941">"שלח"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"מצב מכונית מופעל"</string>
<string name="car_mode_disable_notification_message" msgid="668663626721675614">"בחר כדי לצאת ממצב מכונית."</string>
@@ -1065,27 +1080,27 @@
<string name="back_button_label" msgid="2300470004503343439">"הקודם"</string>
<string name="next_button_label" msgid="1080555104677992408">"הבא"</string>
<string name="skip_button_label" msgid="1275362299471631819">"דלג"</string>
- <string name="throttle_warning_notification_title" msgid="4890894267454867276">"שימוש רב בנתונים ניידים"</string>
- <string name="throttle_warning_notification_message" msgid="2609734763845705708">"גע למידע נוסף על שימוש בנתונים ניידים"</string>
- <string name="throttled_notification_title" msgid="6269541897729781332">"אירעה חריגה ממגבלת הנתונים הניידים"</string>
- <string name="throttled_notification_message" msgid="4712369856601275146">"גע למידע נוסף על שימוש נתונים ניידים"</string>
+ <string name="throttle_warning_notification_title" msgid="4890894267454867276">"שימוש רב בנתונים לנייד"</string>
+ <string name="throttle_warning_notification_message" msgid="2609734763845705708">"גע לקבלת מידע נוסף על שימוש בנתונים לנייד"</string>
+ <string name="throttled_notification_title" msgid="6269541897729781332">"אירעה חריגה ממגבלת הנתונים לנייד"</string>
+ <string name="throttled_notification_message" msgid="4712369856601275146">"גע לקבלת מידע נוסף על שימוש בנתונים לנייד"</string>
<string name="no_matches" msgid="8129421908915840737">"אין התאמות"</string>
- <string name="find_on_page" msgid="1946799233822820384">"מצא בדף"</string>
+ <string name="find_on_page" msgid="1946799233822820384">"חפש בדף"</string>
<plurals name="matches_found">
<item quantity="one" msgid="8167147081136579439">"התאמה אחת"</item>
<item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> מתוך <xliff:g id="TOTAL">%d</xliff:g>"</item>
</plurals>
- <string name="action_mode_done" msgid="7217581640461922289">"בוצע"</string>
+ <string name="action_mode_done" msgid="7217581640461922289">"סיום"</string>
<string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"מבטל טעינה של אמצעי אחסון מסוג USB..."</string>
- <string name="progress_unmounting" product="default" msgid="5556813978958789471">"מבטל טעינת כרטיס SD..."</string>
+ <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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"נכשלה מחיקה של אמצעי אחסון מסוג USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"נכשלה מחיקת כרטיס SD."</string>
- <string name="media_bad_removal" msgid="7960864061016603281">"כרטיס ה-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="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>
- <string name="media_removed" msgid="7001526905057952097">"כרטיס ה-SD הוסר."</string>
+ <string name="media_removed" msgid="7001526905057952097">"כרטיס SD הוסר."</string>
<string name="media_shared" product="nosdcard" msgid="5830814349250834225">"אמצעי אחסון מסוג USB נמצא כעת בשימוש של מחשב."</string>
<string name="media_shared" product="default" msgid="5706130568133540435">"כרטיס SD נמצא כעת בשימוש של מחשב."</string>
<string name="media_unknown_state" msgid="729192782197290385">"מדיה חיצונית במצב לא ידוע."</string>
@@ -1105,22 +1120,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1133,14 +1140,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"הקש כדי להפעיל"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"אישור אבטחה"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"אישור זה תקף."</string>
@@ -1162,4 +1169,6 @@
<!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
<skip />
<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-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 7e5c5c7ef001..ef2d53ea96f6 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"機能コードが完了しました。"</string>
<string name="fcError" msgid="3327560126588500777">"接続エラーまたは無効な機能コードです。"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"ウェブページにエラーがあります。"</string>
+ <string name="httpError" msgid="6603022914760066338">"ネットワークエラーが発生しました。"</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URLが見つかりません。"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"このサイトの認証方式には対応していません。"</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"認証できませんでした。"</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"プロキシサーバーを使用した認証に失敗しました。"</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"サーバーに接続できませんでした。"</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"サーバーと通信できませんでした。しばらくしてからもう一度試してください。"</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"VPNサービスのトップレベルインターフェースへのバインドを所有者に許可します。通常のアプリケーションでは不要です。"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"壁紙にバインド"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"壁紙のトップレベルインターフェースへのバインドを所有者に許可します。通常のアプリケーションでは不要です。"</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ウィジェットサービスにバインド"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"プロフィールデータの読み取り"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"アプリケーションによる個人の全プロフィール情報の読み取りを許可します。この場合、悪意のあるアプリケーションによって身元が特定されたり個人情報が第三者に転送されたりする危険があります。"</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"プロフィールデータの書き込み"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"アプリケーションによる個人のプロフィール情報の変更を許可します。この場合、悪意のあるアプリケーションによってプロフィールデータが消去または変更される危険があります。"</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"カレンダーの予定の読み取り"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"タブレットに保存されているカレンダーの予定の読み取りをアプリケーションに許可します。この許可を悪意のあるアプリケーションに利用されると、カレンダーの予定が他人に送信される恐れがあります。"</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"端末に保存したカレンダーの予定の読み取りをアプリケーションに許可します。悪意のあるアプリケーションがカレンダーの予定を他人に送信する恐れがあります。"</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"カレンダーの予定の追加や変更を行い、ゲストにメールを送信する"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"カレンダーの予定の追加や変更をアプリケーションに許可します。ゲストにメールが送信される場合もあります。悪意のあるアプリケーションがこの機能を利用し、イベントを削除または変更したりゲストにメールを送信したりする可能性があります。"</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_accessMockLocation" msgid="8688334974036823330">"仮の位置情報でテスト"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"テスト用に仮の位置情報源を作成します。これにより悪意のあるアプリケーションが、GPS、ネットワークプロバイダなどから返される本当の位置情報や状況を改ざんする恐れがあります。"</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"位置情報提供者の追加コマンドアクセス"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"すべてのネットワーク状態の表示をアプリケーションに許可します。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"完全なインターネットアクセス"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"ネットワークソケットの作成をアプリケーションに許可します。"</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"アクセスポイント名設定の書き込み"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"APNのプロキシやポートなどのAPN設定の変更をアプリケーションに許可します。"</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_changeNetworkState" msgid="958884291454327309">"ネットワーク接続の変更"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"ネットワークの接続状態の変更をアプリケーションに許可します。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"テザリング接続の変更"</string>
@@ -708,7 +714,7 @@
<string name="autofill_county" msgid="237073771020362891">"郡"</string>
<string name="autofill_island" msgid="4020100875984667025">"島"</string>
<string name="autofill_district" msgid="8400735073392267672">"地区"</string>
- <string name="autofill_department" msgid="5343279462564453309">"部署"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"県"</string>
<string name="autofill_prefecture" msgid="2028499485065800419">"都道府県"</string>
<string name="autofill_parish" msgid="8202206105468820057">"教区"</string>
<string name="autofill_area" msgid="3547409050889952423">"地域"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"携帯電話に保存されているブラウザの履歴やブックマークの修正をアプリケーショに許可します。これにより悪意のあるアプリケーションが、ブラウザのデータを消去または変更する恐れがあります。"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"アラームの設定"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"インストール済みアラームアプリケーションのアラーム設定をアプリケーションに許可します。この機能が実装されていないアラームアプリケーションもあります。"</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"ボイスメールの追加"</string>
+ <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="save_password_message" msgid="767344687139195790">"このパスワードをブラウザで保存しますか?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"今は保存しない"</string>
<string name="save_password_remember" msgid="6491879678996749466">"保存"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1か月前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1か月前"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"切り取り"</string>
<string name="copy" msgid="2681946229533511987">"コピー"</string>
<string name="paste" msgid="5629880836805036433">"貼り付け"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"クリップボードが空です"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"置換"</string>
<string name="copyUrl" msgid="2538211579596067402">"URLをコピー"</string>
<string name="selectTextMode" msgid="6738556348861347240">"テキストを選択..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"テキスト選択"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"操作の選択"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"USBデバイス用アプリケーションを選択"</string>
<string name="noApplications" msgid="1691104391758345586">"この操作を実行できるアプリケーションはありません。"</string>
- <string name="aerr_title" msgid="653922989522758100">"エラー"</string>
- <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g>)が予期せず停止しました。やり直してください。"</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g>が予期せず停止しました。やり直してください。"</string>
- <string name="anr_title" msgid="3100070910664756057">"エラー"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="ACTIVITY">%1$s</xliff:g>(<xliff:g id="APPLICATION">%2$s</xliff:g>)は応答していません。"</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g>(プロセス: <xliff:g id="PROCESS">%2$s</xliff:g>)は応答していません。"</string>
- <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g>)は応答していません。"</string>
- <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g>は応答していません。"</string>
- <string name="force_close" msgid="3653416315450806396">"強制終了"</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="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="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"レポート"</string>
<string name="wait" msgid="7147118217226317732">"待機"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"アプリのリダイレクト"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"アラームの音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Wi-Fiオープンネットワークが利用できます"</item>
<item quantity="other" msgid="7915895323644292768">"Wi-Fiオープンネットワークが利用できます"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fiネットワークが無効になりました"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"接続の不具合によりWi-Fiネットワークは一時的に無効になりました。"</string>
+ <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_failed_message" msgid="6467545523417622335">"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接続設定リクエスト。[OK]をクリックして受け入れます。"</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">"接続設定を続行するには、ピアデバイス<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>でWPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>を入力する必要があります"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Directの操作を開始します。これによりWi-Fiクライアント/アクセスポイントの操作がOFFになります。"</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接続設定リクエスト。受け入れるには[OK]をクリックします。"</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">"接続設定を続けるには、ピアデバイス<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>でWPS PIN <xliff:g id="P2P_WPS_PIN">%1$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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"モバイルネットワークはSIMカードを交換するまで利用できません。"</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USBストレージをOFFにする際に問題が発生しました。USBホストのマウントが解除されていることを確認してからもう一度お試しください。"</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USBストレージをONにする"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USBストレージをONにすると、使用中のアプリケーションの一部が停止し、USBストレージをOFFにするまで使用できなくなる場合があります。"</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB操作に失敗しました"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USBストレージ内のデータを消去できませんでした。"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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">"ON"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"OFF"</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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"有効にするにはタップしてください"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"セキュリティ証明書"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"証明書は有効です。"</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 30ea90c6ee2f..ba4e6dfbc448 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"기능 코드가 완료되었습니다."</string>
<string name="fcError" msgid="3327560126588500777">"연결에 문제가 있거나 기능 코드가 잘못되었습니다."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"확인"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"웹페이지에 오류가 있습니다."</string>
+ <string name="httpError" msgid="6603022914760066338">"네트워크 오류가 발생했습니다."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL을 찾을 수 없습니다."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"사이트 인증 스키마가 지원되지 않습니다."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"인증에 실패했습니다."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"프록시 서버를 통한 인증에 실패했습니다."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"서버에 연결하지 못했습니다."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"서버와 통신할 수 없습니다. 잠시 후에 다시 시도해 주세요."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"입력 방법 연결"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"권한을 가진 프로그램이 입력 방법에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"텍스트 서비스 연결"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"사용자가 텍스트 서비스(예: SpellCheckerService)의 최상위 인터페이스에 바인딩할 수 있게 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</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>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"배경화면 연결"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"위젯 서비스와 연결"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"프로필 데이터 읽기"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"애플리케이션이 개인 프로필 정보를 모두 읽을 수 있도록 합니다. 이렇게 하면 악성 애플리케이션이 이 정보를 사용하여 사용자를 식별하고 개인 정보를 다른 사용자에게 보낼 수 있습니다."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"프로필 데이터 작성"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"애플리케이션이 개인 프로필 정보를 수정할 수 있도록 허용합니다. 이렇게 하면 악성 애플리케이션이 이 정보를 사용하여 프로필 데이터를 지우거나 수정할 수 있습니다."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"캘린더 일정 읽기"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"애플리케이션이 태블릿에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 캘린더 일정을 다른 사람에게 보낼 수 있습니다."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"애플리케이션이 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 캘린더 일정을 다른 사람에게 보낼 수 있습니다."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"캘린더 일정 추가/수정 및 참석자에게 이메일 전송"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"애플리케이션이 캘린더에 일정을 추가하거나 변경할 수 있도록 합니다. 이렇게 하면 참석자에게 이메일을 보낼 수 있습니다. 악성 애플리케이션이 이를 사용하여 캘린더 일정을 삭제, 수정하거나 참석자에게 이메일을 보낼 수 있습니다."</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_accessMockLocation" msgid="8688334974036823330">"테스트를 위해 위치 정보제공자로 가장"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"테스트용 가짜 위치 정보 제공자를 만듭니다. 단, 악성 애플리케이션이 이 기능을 이용하여 GPS, 네트워크 공급자 같은 실제 위치 정보제공자에서 반환한 위치 및/또는 상태를 덮어쓸 수 있습니다."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"추가 위치 제공업체 명령에 액세스"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"애플리케이션이 모든 네트워크의 상태를 볼 수 있도록 합니다."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"인터넷에 최대한 액세스"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"애플리케이션이 네트워크 소켓을 만들 수 있도록 합니다."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"액세스포인트 이름(APN) 설정 쓰기"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"애플리케이션이 APN의 프록시 및 포트 같은 APN 설정을 수정할 수 있도록 합니다."</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_changeNetworkState" msgid="958884291454327309">"네트워크 연결 변경"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"애플리케이션이 네트워크 연결 상태를 변경할 수 있도록 합니다."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"테러링 연결 변경"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"애플리케이션이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 애플리케이션이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"알람 시계에 알람 설정"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"실치된 알람 시계 애플리케이션에 알람을 설정하도록 허용합니다. 일부 알람 시계 애플리케이션은 이 기능을 구현하지 않을 수 있습니다."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"음성사서함 추가"</string>
+ <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="save_password_message" msgid="767344687139195790">"브라우저에 이 비밀번호를 저장하시겠습니까?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"나중에"</string>
<string name="save_password_remember" msgid="6491879678996749466">"저장"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"한 달 전"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"한 달 전"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"잘라내기"</string>
<string name="copy" msgid="2681946229533511987">"복사"</string>
<string name="paste" msgid="5629880836805036433">"붙여넣기"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"붙여넣을 내용이 없습니다."</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"바꾸기"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL 복사"</string>
<string name="selectTextMode" msgid="6738556348861347240">"텍스트 선택..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"텍스트 선택"</string>
@@ -864,26 +884,25 @@
<string name="chooseActivity" msgid="1009246475582238425">"작업 선택"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"USB 기기에 대한 애플리케이션 선택"</string>
<string name="noApplications" msgid="1691104391758345586">"작업을 수행할 수 있는 애플리케이션이 없습니다."</string>
- <string name="aerr_title" msgid="653922989522758100">"죄송합니다."</string>
- <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> 애플리케이션(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 예상치 않게 중지되었습니다. 다시 시도해 주세요."</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> 프로세스가 예상치 않게 중지되었습니다. 다시 시도해 주세요."</string>
- <string name="anr_title" msgid="3100070910664756057">"죄송합니다."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="APPLICATION">%2$s</xliff:g> 활동(<xliff:g id="ACTIVITY">%1$s</xliff:g> 애플리케이션)이 응답하지 않습니다."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g> 활동(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 응답하지 않습니다."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g> 애플리케이션(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 응답하지 않습니다."</string>
- <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g> 프로세스가 응답하지 않습니다."</string>
- <string name="force_close" msgid="3653416315450806396">"닫기"</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="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="force_close" msgid="8346072094521265605">"확인"</string>
<string name="report" msgid="4060218260984795706">"신고"</string>
<string name="wait" msgid="7147118217226317732">"대기"</string>
<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>
- <!-- 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">"배율"</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>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 실행 중"</string>
@@ -904,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"알람 볼륨"</string>
<string name="volume_notification" msgid="2422265656744276715">"알림 볼륨"</string>
<string name="volume_unknown" msgid="1400219669770445902">"볼륨"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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="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>
@@ -929,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"개방형 Wi-Fi 네트워크 사용 가능"</item>
<item quantity="other" msgid="7915895323644292768">"개방형 Wi-Fi 네트워크 사용 가능"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi 네트워크가 사용중지되었습니다."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi 네트워크가 잘못된 연결로 인해 일시적으로 사용중지되었습니다."</string>
+ <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_failed_message" msgid="6467545523417622335">"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_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>
@@ -943,18 +955,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"여러 개의 SMS 메시지를 보내는 중입니다. 계속하려면 \'확인\'을 선택하고 전송을 중지하려면 \'취소\'를 선택하세요."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"확인"</string>
<string name="sms_control_no" msgid="1715320703137199869">"취소"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <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">"SIM 카드 제거됨"</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
+ <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>
@@ -980,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB 작업 실패"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1080,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB 저장소를 지우지 못했습니다."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"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="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>
@@ -1105,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1133,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"사용하려면 누르세요."</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"보안 인증서"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"유효한 인증서입니다."</string>
@@ -1159,5 +1157,7 @@
<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="status_bar_device_locked" msgid="3092703448690669768">"기기가 잠겼습니다."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index a46a65985e50..c4f72dfb873f 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funkcijos kodas baigtas."</string>
<string name="fcError" msgid="3327560126588500777">"Ryšio problema arba neteisingas funkcijos kodas."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Gerai"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Tinklalapyje yra klaidų."</string>
+ <string name="httpError" msgid="6603022914760066338">"Įvyko tinklo klaida."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Nepavyko rasti URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Svetainės tapatybės nustatymo schema nepalaikoma."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Serveriui nepavyko susisiekti. Vėliau bandykite dar kartą."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serveriui nepavyko susisiekti. 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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Leidžia savininkui susisaistyti su įvesties būdo aukščiausio lygio sąsaja. Neturėtų reikėti įprastoms programoms."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"priskirti teksto paslaugą"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Leidžiama savininkui priskirti aukščiausio lygio teksto paslaugos (pvz., „SpellCheckerService“) sąsają. Neturėtų būti naudojama įprastose programose."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"susaistyti su VPN paslauga"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Leidžiama savininkui susisaistyti su aukščiausio lygio VPN paslaugos sąsaja. Niekada neturėtų reikėti įprastose programose."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"susaistyti su darbalaukio fonu"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Leidžia savininkui susisaistyti su aukščiausio lygio darbalaukio fono sąsaja. Neturėtų reikėti įprastose programose."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"susaistyti su valdiklio paslauga"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"skaityti profilio duomenis"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"įrašyti profilio duomenis"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Leidžiama programai keisti asmeninę profilio informaciją. Piktybinės programos gali tai naudoti profilio duomenims ištrinti arba keisti."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"skaityti kalendoriaus įvykius"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Leidžiama programai skaityti visus kalendoriaus įvykius, išsaugotus jūsų planšetiniame kompiuteryje. Kenkėjiškos programos gali tai naudoti, kad siųstų jūsų kalendoriaus įvykius kitiems žmonėms."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Leidžia programai skaityti visus kalendoriaus įvykius, išsaugotus jūsų telefone. Kenkėjiškos programos tai gali naudoti, kad siųstų kalendoriaus įvykius kitiems žmonėms."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"pridėti arba keisti kalendoriaus įvykius ir el. paštu siųsti svečiams"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Leidžia programai pridėti ar keisti kalendoriaus įvykius, dėl to svečiams gali būti siunčiami el. laiškai. Kenkėjiškos programos tai gali naudoti, kad ištrintų ar keistų kalendoriaus įvykius arba siųstų el. laiškus svečiams."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"prideda arba keičia kalendoriaus įvykius ir siunčia el. laiškus svečiams be savininko žinios"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Programai leidžiama siųsti įvykių pakvietimus kalendoriaus savininko teisėmis ir pridėti, pašalinti bei keisti įvykius, kuriuos galite keisti savo įrenginyje, įskaitant ir jūsų draugų bei bendradarbių. Šį leidimą gavusi kenkėjiška programa gali siųsti šlamšto el. laiškus, kurie bus matyti kaip siųsti kalendoriaus savininko, keisti įvykius be savininko žinios ar pridėti netikrų įvykių."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"imituoti vietos šaltinius bandymui"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Sukurti imituojančius vietos šaltinius bandymui. Kenkėjiškos programos gali tai naudoti, kad perrašytų vietą ir (arba) būseną, pateiktą tikrųjų vietos šaltinių, pvz., GPS ar tinklo paslaugų teikėjų."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"pasiekti papildomas vietos teikimo įrankio komandas"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"rašyti prieigos taško pavadinimo nustatymus"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Leidžia programai keisti APN nustatymus, pvz., bet kurio VPT tarpinio serverio ir prievado nustatymus."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Leidžia programai keisti naršyklės istoriją ar žymes, išsaugotus jūsų telefone. Kenkėjiškos programos gali tai naudoti, kad ištrintų ar keistų naršyklės duomenis."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"nustatyti žadintuvo signalą"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Leidžiama programai nustatyti signalą įdiegtoje žadintuvo programoje. Kai kuriose žadintuvo programose šios funkcijos gali nebūti."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"pridėti balso pašto pranešimų"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nėra, ką įklijuoti"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"pasirinkti veiksmą"</string>
<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="653922989522758100">"Apgailestaujame!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Programa <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> procesas) netikėtai sustojo. Bandykite dar kartą."</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> procesas netikėtai sustojo. Bandykite dar kartą."</string>
- <string name="anr_title" msgid="3100070910664756057">"Apgailestaujame!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Veikla <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="APPLICATION">%2$s</xliff:g> programoje) neatsako."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Veikla <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> procese) neatsako."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Programa <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> procese) neatsako."</string>
- <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g> procesas neatsako."</string>
- <string name="force_close" msgid="3653416315450806396">"Uždaryti"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"„<xliff:g id="APPLICATION">%1$s</xliff:g>“ neatsako. Ar norite ją uždaryti?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Procesas „<xliff:g id="PROCESS">%1$s</xliff:g>“ neatsako."\n\n"Ar norite jį uždaryti?"</string>
+ <string name="force_close" msgid="8346072094521265605">"Gerai"</string>
<string name="report" msgid="4060218260984795706">"Ataskaita"</string>
<string name="wait" msgid="7147118217226317732">"Palaukti"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Programa nukreipta"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Atidaryti galimą „Wi-Fi“ tinklą"</item>
<item quantity="other" msgid="7915895323644292768">"Atidaryti galimus „Wi-Fi“ tinklus"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"„Wi-Fi“ tinklas buvo neleidžiamas"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"„Wi-Fi“ tinklas buvo laikinai neleidžiamas dėl prasto ryšio."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nepavyko prisijungti prie „Wi-Fi“"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nepavyko paleisti tiesioginio „Wi-Fi“"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nepavyko paleisti tiesioginio „Wi-Fi“"</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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobiliojo ryšio tinklas bus nepasiekiamas, kol pakeisite SIM kortelę."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB operacija nepavyko"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB operacija nepavyko"</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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Nepavyko ištrinti USB atmintinės."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Nepavyko ištrinti SD kortelės."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pasirinkti paskyrą"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"jei norite įgalinti, palieskite"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Saugos sertifikatas"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Šis sertifikatas galioja."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index cde2c53174f2..8f58e377b567 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funkcijas kods ir pabeigts."</string>
<string name="fcError" msgid="3327560126588500777">"Savienojuma problēma vai nederīgs funkcijas kods."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Labi"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Tīmekļa lapā ir kļūda."</string>
+ <string name="httpError" msgid="6603022914760066338">"Radās tīkla kļūda."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Vietrādi URL nevar atrast."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Vietnes autentifikācijas shēma netiek atbalstīta."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Serverim neizdevās izveidot savienojumu. Vēlāk mēģiniet vēlreiz."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Serverim neizdevās 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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"saistīt ar ievades metodi"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Ļauj īpašniekam saistīt ar ievades metodes augšējā līmeņa saskarni. Parastajām lietojumprogrammām nekad nav nepieciešama."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"saistīt ar īsziņu pakalpojumu"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa interfeisu (piem., SpellCheckerService). Nekad nav nepieciešama parastām lietojumprogrammām."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa saskarni (piem., SpellCheckerService). Nekad nav nepieciešama parastām lietojumprogrammām."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"saistīt ar VPN pakalpojumu"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Ļauj īpašniekam izveidot saiti ar VPN pakalpojuma augšējā līmeņa saskarni. Parastajām lietojumprogrammām tas nekad nav nepieciešams."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"saistīt ar tapeti"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Ļauj īpašniekam saistīties ar tapetes augšējā līmeņa saskarni. Parastajās lietojumprogrammās nekad nav nepieciešama."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"saistīt ar logrīka pakalpojumu"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"lasīt profila datus"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Ļ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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"rakstīt profila datus"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Ļ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_readCalendar" msgid="6898987798303840534">"lasīt kalendāra pasākumus"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Ļauj lietojumprogrammai lasīt visus planšetdatorā saglabātos kalendāra notikumus. Ļaunprātīgas lietojumprogrammas var to izmantot, lai sūtītu jūsu kalendāra notikumus citām personām."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Ļauj lietojumprogrammai lasīt visus tālrunī saglabātos kalendāra pasākumus. Ļaunprātīgas lietojumprogrammas var to izmantot, lai sūtītu kalendāra pasākumus citām personām."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"pievienot vai pārveidot kalendāra pasākumus un sūtīt e-pasta ziņojumus viesiem"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Ļauj lietojumprogrammai pievienot vai mainīt pasākumus jūsu kalendārā, kas var sūtīt e-pasta ziņojumus viesiem. Ļaunprātīgas lietojumprogrammas var to izmantot, lai dzēstu vai pārveidotu jūsu kalendāra pasākumus vai sūtītu e-pasta ziņojumus viesiem."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"pievienot vai pārveidot kalendāra pasākumus un sūtīt e-pasta ziņojumus viesiem bez īpašnieku ziņas"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Ļauj lietojumprogrammai sūtīt ielūgumus uz pasākumiem, ja kalendāra īpašnieks pievieno, noņem vai maina pasākumus, kurus varat pārveidot savā ierīcē, tostarp arī draugu un darbabiedru pasākumus. Ļaunprātīga lietojumprogramma, izmantojot šo atļauju, var sūtīt mēstules, kuras šķietami sūtījuši kalendāra īpašnieki, pārveidot pasākumus bez kalendāra īpašnieku ziņas vai pievienot neīstus pasākumus."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"imitēt atrašanās vietu avotus pārbaudes nolūkos"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Pārbaudīšanai izveidojiet imitētus atrašanās vietu avotus. Ļaunprātīgas lietojumprogrammas var to izmantot, lai ignorētu atrašanās vietu un/vai statusu, ko atgriež reālie atrašanās vietu avoti, piemēram, GPS vai tīkla pakalpojumu sniedzēji."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"piekļūt atrašanās vietas nodrošinātāja papildu komandām"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"rakstīt piekļuves punkta nosaukuma iestatījumus"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Ļauj lietojumprogrammai pārveidot APN iestatījumus, piemēram, jebkura APN starpniekserveri un portu."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Ļauj lietojumprogrammai pārveidot tālrunī saglabāto pārlūkprogrammas vēsturi un grāmatzīmes. Ļaunprātīgas lietojumprogrammas var to izmantot, lai dzēstu vai pārveidotu pārlūkprogrammas datus."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"iestatīt trauksmi modinātājpulkstenī"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Ļauj lietojumprogrammai iestatīt trauksmi instalētajā modinātājpulksteņa lietojumprogrammā. Dažās modinātājpulksteņu lietojumprogrammās šī funkcija var nebūt īstenojama."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"pievienot balss pastu"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nav ielīmējamu vien."</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Atlasiet darbību"</string>
<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="653922989522758100">"Atvainojiet!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Lietojumprogrammas <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) darbība neparedzēti tika apturēta. Lūdzu, mēģiniet vēlreiz."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Process <xliff:g id="PROCESS">%1$s</xliff:g> ir neparedzēti apturēts. Lūdzu, mēģiniet vēlreiz."</string>
- <string name="anr_title" msgid="3100070910664756057">"Atvainojiet!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Darbība <xliff:g id="ACTIVITY">%1$s</xliff:g> (lietojumprogrammā <xliff:g id="APPLICATION">%2$s</xliff:g>) neatbild."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Darbība <xliff:g id="ACTIVITY">%1$s</xliff:g> (procesā <xliff:g id="PROCESS">%2$s</xliff:g>) neatbild."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Lietojumprogramma <xliff:g id="APPLICATION">%1$s</xliff:g> (procesā <xliff:g id="PROCESS">%2$s</xliff:g>) neatbild."</string>
- <string name="anr_process" msgid="1246866008169975783">"Process <xliff:g id="PROCESS">%1$s</xliff:g> neatbild."</string>
- <string name="force_close" msgid="3653416315450806396">"aizvērt"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Lietojumprogramma <xliff:g id="APPLICATION">%1$s</xliff:g> nereaģē. Vai vēlaties to aizvērt?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Process <xliff:g id="PROCESS">%1$s</xliff:g> nereaģē."\n\n"Vai vēlaties to aizvērt?"</string>
+ <string name="force_close" msgid="8346072094521265605">"Labi"</string>
<string name="report" msgid="4060218260984795706">"Pārskats"</string>
<string name="wait" msgid="7147118217226317732">"Gaidīt"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Lietojumpr. ir novirzīta"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Ir pieejams atvērts Wi-Fi tīkls"</item>
<item quantity="other" msgid="7915895323644292768">"Ir pieejami atvērti Wi-Fi tīkli."</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi tīkls tika atspējots."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi tīkls tika īslaicīgi atspējots sliktas savienojamības dēļ."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nevarēja izveidot savienojumu ar Wi-Fi."</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Neizdevās palaist Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Neizdevās palaist 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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilo sakaru tīkls nebūs pieejams, līdz nomainīsiet SIM karti."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB darbība neizdevās."</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB 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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Neizdevās dzēst USB krātuvi."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Neizdevās dzēst SD karti."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Atlasīt kontu"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Palielināt"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Samazināt"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"atzīmēta"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"nav atzīmēta"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"atlasīta"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"nav atlasīta"</string>
+ <string name="switch_on" msgid="551417728476977311">"ieslēgts"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"pieskarieties, lai iespējotu"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<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>
@@ -1150,5 +1157,7 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Skatīt visas"</string>
<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 bloķēta"</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Ierīce ir bloķēta."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 7d0b986208eb..8ba895db98e6 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Kod ciri selesai."</string>
<string name="fcError" msgid="3327560126588500777">"Masalah sambungan atau kod ciri tidak sah."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Halaman Web mengandungi ralat."</string>
+ <string name="httpError" msgid="6603022914760066338">"Ralat rangkaian berlaku."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL tidak ditemui."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Skema pengesahan tapak tidak disokong."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Pelayan gagal berkomunikasi. Cuba sebentar lagi."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Pelayan gagal 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>
@@ -195,6 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Membenarkan aplikasi menerima dan memproses mesej siaran kecemasan. Kebenaran ini hanya tersedia kepada aplikasi sistem."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"hantar mesej SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Membolehkan aplikasi menghantar mesej SMS. Aplikasi berniat jahat boleh merugikan wang anda dengan menghantar mesej tanpa pengesahan anda."</string>
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"hantar mesej SMS tanpa pengesahan"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Membolehkan aplikasi menghantar mesej SMS. Aplikasi berniat jahat boleh merugikan wang anda dengan menghantar mesej tanpa pengesahan anda."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"baca SMS atau MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Membenarkan aplikasi membaca mesej SMS yang disimpan pada tablet atau kad SIM anda. Aplikasi berniat jahat boleh membaca mesej sulit anda."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Membenarkan aplikasi membaca mesej SMS yang disimpan pada telefon atau kad SIM anda. Aplikasi berniat jahat boleh membaca mesej sulit anda."</string>
@@ -264,6 +266,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kaedah input itu. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"terikat kepada perkhidmatan teks"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Membenarkan pemegang mengikat kepada antara muka tahap tinggi perkhidmatan teks(mis. PerkhidmatanPenyemakEjaan). Tidak seharusnya diperlukan untuk aplikasi biasa."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"terikat kepada perkhidmatan VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan Vpn. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"terikat pada kertas dinding"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kertas dinding. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"terikat kepada perkhidmatan widget"</string>
@@ -321,15 +325,15 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"tulis data kenalan"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Membenarkan aplikasi mengubah suai data (alamat) kenalan yang disimpan pada tablet anda. Aplikasi yang berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai data kenalan anda."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Membenarkan aplikasi mengubah suai data (alamat) kenalan yang disimpan pada telefon anda. Aplikasi yang berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai data kenalan anda."</string>
- <string name="permlab_readProfile" msgid="2211941946684590103">"baca data profil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Membenarkan aplikasi membaca semua maklumat profil peribadi anda. Aplikasi berniat jahat boleh menggunakannya untuk mengenal pasti anda dan menghantar maklumat peribadi anda kepada orang lain."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"menulis data profil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Membenarkan aplikasi mengubah suai maklumat profil peribadi anda. Aplikasi berniat jahat boleh menggunakan ini untuk memadamkan atau mengubah suai data profil anda."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"baca acara kalendar"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada tablet anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar acara kalendar anda kepada orang lain."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar acara kalendar anda kepada orang lain."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"tambah atau ubah suai acara kalendar dan hantar e-mel kepada tetamu"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Membenarkan aplikasi untuk menambah atau menukar acara pada kalendar anda, yang mungkin menghantar e-mel kepada tetamu. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai acara kalendar anda atau menghantar e-mel kepada tetamu."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"baca data profil anda"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Membenarkan aplikasi untuk membaca maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna aplikasi itu boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"tulis ke data profil anda"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Membenarkan aplikasi untuk menukar atau menambah maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna aplikasi lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"baca acara kalendar serta maklumat sulit"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada tablet anda, termasuk acara rakan atau rakan sekerja. Aplikasi berniat jahat dengan kebenaran ini boleh menyari maklumat peribadi dari kalendar ini tanpa pengetahuan pemiliknya."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Membenarkan aplikasi untuk membaca semua acara kalendar yang disimpan pada telefon anda, termasuk acara rakan atau rakan sekerja. Aplikasi berniat jahat dengan kebenaran ini boleh menyari maklumat peribadi dari kalendar ini tanpa pengetahuan pemiliknya."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"tambah atau ubah suai acara kalendar dan hantar e-mel kepada tetamu tanpa pengetahuan pemilik"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Membenarkan aplikasi menghantar jemputan acara sebagai pemilik kalendar dan menambah, mengalih keluar serta menukar acara yang anda boleh ubah suai pada peranti anda, termasuk acara rakan atau rakan sekerja anda. Aplikasi berniat jahat dengan kebenaran ini boleh menghantar e-mel spam yang kelihatan seperti dihantar oleh pemilik kalendar, mengubah suai acara tanpa pengetahuan pemilik atau menambah acara palsu."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"gunakan sumber lokasi olok-olok untuk pengujian"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Membuat sumber lokasi olok-olok untuk pengujian. Aplikasi berniat jahat boleh menggunakannya untuk menolak lokasi dan/atau status yang dikembalikan oleh sumber lokasi sebenar seperti pembekal GPS atau Rangkaian."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"akses perintah tambahan pembekal lokasi"</string>
@@ -439,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Membenarkan aplikasi melihat keadaan semua rangkaian."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"akses penuh Internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Membenarkan aplikasi membuat soket rangkaian."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"tulis tetapan Nama Titik Capaian"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Membenarkan aplikasi mengubah suai tetapan APN, seperti Proksi dan Port mana-mana APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"mengubah/memintas tetapan dan lalu lintas rangkaian"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Membenarkan sesuatu aplikasi untuk menukar tetapan rangkaian dan untuk memintas dan memeriksa semua trafik rangkaian, contohnya untuk menukar proksi dan port mana-mana APN. Aplikasi berniat jahat boleh mengawasi, mengubah hala, atau mengubah suai paket rangkaian tanpa pengetahuan anda."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"tukar kesambungan rangkaian"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Membenarkan aplikasi menukar keadaan kesambungan rangkaian."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Tukar kesambungan bertambat"</string>
@@ -720,12 +724,14 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Membenarkan aplikasi mengubah suai sejarah atau penanda halaman Penyemak Imbas yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah data Penyemak Imbas anda."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"menetapkan penggera pada jam penggera"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Membenarkan aplikasi menetapkan penggera dalam aplikasi jam penggera yang dipasang. Sesetengah aplikasi jam penggera mungkin tidak melaksanakan ciri ini."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"tambah mel suara"</string>
+ <string name="permdesc_addVoicemail" msgid="4828507394878206682">"Membenarkan aplikasi untuk menambahkan mesej pada peti masuk mel suara anda."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ubah suai kebenaran geolokasi Penyemak Imbas"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Membenarkan aplikasi mengubah suai kebenaran geolokasi Penyemak Imbas. Aplikasi berniat jahat boleh menggunakannya untuk membenarkan penghantaran maklumat lokasi ke sembarangan tapak web."</string>
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"sahkan pakej"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Membenarkan aplikasi untuk mengesahkan bahawa pakej boleh dipasang."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"ikat kepada pengesah pakej"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Membenarkan pemegang membuat permintaan pengesah pakej. Tidak akan diperlukan untuk aplikasi normal."</string>
<string name="save_password_message" msgid="767344687139195790">"Adakah anda mahu penyemak imbas mengingati kata laluan ini?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Bukan sekarang"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Ingat"</string>
@@ -738,6 +744,11 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"padam"</string>
<string name="search_go" msgid="8298016669822141719">"Cari"</string>
+ <string name="searchview_description_search" msgid="6749826639098512120">"Carian"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"Pertanyaan carian"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"Pertanyaan jelas"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"Hantar pertanyaan"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"Carian 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">
@@ -839,9 +850,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tampal"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Tiada apa utk ditmpl"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +873,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Pilih tindakan"</string>
<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="653922989522758100">"Maaf!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah berhenti secara tiba-tiba. Sila cuba lagi."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah berhenti secara tiba-tiba. Sila cuba lagi."</string>
- <string name="anr_title" msgid="3100070910664756057">"Maaf!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g> (dalam aplikasi <xliff:g id="APPLICATION">%2$s</xliff:g>) tiada respons."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g> (dalam proses <xliff:g id="PROCESS">%2$s</xliff:g>) tiada respons."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (dalam proses <xliff:g id="PROCESS">%2$s</xliff:g>) tiada respons."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tiada respons."</string>
- <string name="force_close" msgid="3653416315450806396">"Tutup paksa"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Tiada sambutan dari aktiviti <xliff:g id="APPLICATION">%1$s</xliff:g>. Adakah anda mahu menutupnya?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tiada sambutan."\n\n"Adakah anda mahu menutupnya?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Laporkan"</string>
<string name="wait" msgid="7147118217226317732">"Tunggu"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikasi dihalakan semula"</string>
@@ -901,18 +912,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Kelantangan penggera"</string>
<string name="volume_notification" msgid="2422265656744276715">"Kelantangan pemberitahuan"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Kelantangan"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Kelantangan Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Kelantangan nada dering"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Kelantangan panggilan"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Kelantangan media"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Kelantangan pemberitahuan"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Nada dering lalai"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering lalai (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Senyap"</string>
@@ -926,13 +930,13 @@
<item quantity="one" msgid="1634101450343277345">"Rangkaian Wi-Fi terbuka tersedia"</item>
<item quantity="other" msgid="7915895323644292768">"Rangkaian Wi-Fi terbuka tersedia"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Rangkaian Wi-Fi telah dilumpuhkan"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Rangkaian Wi-Fi dilumpuhkan buat sementara waktu kerana sambungan teruk."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak boleh menyambung kepada Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Gagal memulakan Wi-Fi Langsung"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Gagal memulakan Wi-Fi Langsung"</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>. Buang pin untuk meneruskan."</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>
<string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenali"</string>
@@ -941,7 +945,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Batal"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kad SIM dikeluarkan"</string>
- <string name="sim_removed_message" msgid="2064255102770489459">"Rangkaian mudah alih tidak akan tersedia sehingga anda menggantikan kad SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Rangkaian mudah alih tidak akan tersedia sehingga anda mula semula dengan kad SIM yang sah dimasukkan."</string>
<string name="sim_done_button" msgid="827949989369963775">"Selesai"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Kad SIM ditambah"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Anda mesti memulakan semula peranti anda untuk mengakses rangkaian mudah alih."</string>
@@ -971,7 +975,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Pengendalian USB gagal"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Pengendalian USB gagal"</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>
@@ -1071,8 +1075,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Gagal memadamkan storan USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Gagal 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="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>
@@ -1096,22 +1100,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akaun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Kenaikan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Penyusutan"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"ditandakan"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"tidak ditandakan"</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">"hidup"</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="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>
@@ -1124,14 +1120,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"ketik untuk mendayakan"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"ketik 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_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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sijil keselamatan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sijil ini sah."</string>
@@ -1151,4 +1147,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 288127adfe64..ae848762fcd9 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funksjonskode utført."</string>
<string name="fcError" msgid="3327560126588500777">"Tilkoblingsproblem eller ugyldig funksjonskode."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Nettsiden inneholder en feil."</string>
+ <string name="httpError" msgid="6603022914760066338">"Det oppsto en nettverksfeil."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Kunne ikke finne adressen."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Støtter ikke sidens autentiseringsmetode."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Klarte ikke å kommunisere med tjeneren. Prøv igjen senere."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Klarte ikke å kommunisere med tjeneren. Prøv igjen 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>
@@ -162,8 +162,8 @@
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personlig informasjon"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte tilgang til dine kontakter og kalender lagret på nettbrettet."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte tilgang til kontakter og kalendre lagret på telefonen."</string>
- <string name="permgrouplab_location" msgid="635149742436692049">"Plassering"</string>
- <string name="permgroupdesc_location" msgid="2430258821648348660">"Overvåking av telefonens fysiske plassering"</string>
+ <string name="permgrouplab_location" msgid="635149742436692049">"Din posisjon"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"Overvåking av telefonens fysiske posisjon"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nettverkstilgang"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Gir applikasjoner tilgang til diverse nettverksfunksjoner."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Google-kontoer"</string>
@@ -195,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"binde til en inndatametode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Lar applikasjonen binde til toppnivågrensesnittet for en inndatametode. Vanlige applikasjoner bør aldri trenge dette."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"binde til en teksttjeneste"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Gir innehaveren rett til å binde seg til øverste grensesnittnivå for en teksttjeneste (f.eks SpellCheckerService). Bør aldri være nødvendig for normal bruk."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Gir innehaveren rett til å binde seg til øverste grensesnittnivå for en teksttjeneste (f.eks. SpellCheckerService). Bør aldri være nødvendig for normal bruk."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"binde deg til en VPN-tjeneste"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Lar innehaveren binde seg til det øverste nivået av grensesnittet for en VPN-tjeneste. Skal aldri være nødvendig for normale apper."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind til bakgrunnsbilde"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Lar innehaveren binde det øverste nivået av grensesnittet til en bakgrunnsbilder. Skal ikke være nødvendig for vanlige programmer."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind til modultjenste"</string>
@@ -321,27 +327,27 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"les profildata"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"skriv profildata"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Gir applikasjoner tillatelse til å endre den personlige profilen din. Ondsinnede applikasjoner kan bruke dette til å slette eller endre profildataene dine."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"les kalenderaktiviteter"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Lar programmet lese alle kalenderhendelser lagret på nettbrettet. Skadelige programmer kan bruke dette til å sende kalenderhendelsene dine til andre."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Lar applikasjonen lese alle kalenderhendelser lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å sende kalenderhendelser til andre."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"legg til eller endre kalenderaktiviteter og send e-postmelding til gjestene"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Gir et program tillatelse til å legge til eller endre aktiviteter i kalenderen. Dette kan medføre at det sendes e-postmelding til deltakerne. Skadelige programmer kan bruke dette til å slette eller endre kalenderaktiviteter eller sende e-postmeldinger til deltakerne."</string>
- <string name="permlab_accessMockLocation" msgid="8688334974036823330">"lage simulerte plasseringskilder for testing"</string>
- <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Lage simulerte plassingskilder for testing. Ondsinnede applikasjoner kan bruke dette til å overstyre plasseringen og/eller statusen rapportert av ekte plasseringskilder slik som GPS eller nettverksoperatører."</string>
- <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"få tilgang til ekstra plasseringskommandoer"</string>
- <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Få tilgang til ekstra kommandoer for plasseringskilder. Ondsinnede applikasjoner kan bruke dette til å forstyrre GPS eller andre plasseringskilder."</string>
- <string name="permlab_installLocationProvider" msgid="6578101199825193873">"installere plasseringskilder"</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_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="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>
+ <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Lage simulerte posisjonskilder for testing. Ondsinnede applikasjoner kan bruke dette til å overstyre posisjonen og/eller statusen som rapporteres av ekte posisjonskilder slik som GPS eller nettverksoperatører."</string>
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"få tilgang til ekstra posisjonskommandoer"</string>
+ <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Få tilgang til ekstra kommandoer for posisjonskilder. Ondsinnede applikasjoner kan bruke dette til å forstyrre GPS eller andre posisjonskilder."</string>
+ <string name="permlab_installLocationProvider" msgid="6578101199825193873">"installere posisjonskilder"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Lar applikasjonen lage manuelle plasseringskilder for testing. Ondsinnede applikasjoner kan bruke dette til å overstyre plasseringen og/eller statusen rapportert av ekte plasseringskilder slik som GPS eller nettverksoperatører, eller overvåke og rapportere plasseringen din til en tredjepart."</string>
- <string name="permlab_accessFineLocation" msgid="8116127007541369477">"nøyaktig (GPS-) plassering"</string>
- <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Få tilgang til nøyaktige plasseringskilder, som for eksempel Global Positioning System (GPS) på nettbrettet der dette er tilgjengelig. Skadelige programmer kan bruke dette til å finne ut hvor du er, og kan også bruke mer batteri."</string>
- <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Få tilgang til nøyaktige plasseringskilder som Global Positioning System (GPS) på telefonen, når det er tilgjengelig. Ondsinnede applikasjoner kan bruke dette til å finne ut hvor du er, og kan bruke mer batteri."</string>
- <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"grov (nettverksbasert) plassering"</string>
- <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Få tilgang til grovinnstilte plasseringskilder, som for eksempel databasen over basestasjoner, for å finne nettbrettets omtrentlige posisjon der dette er tilgjengelig. Skadelige programmer kan bruke dette til å finne ut omtrent hvor du er."</string>
- <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Få tilgang til grove plasseringskilder som databasen over basestasjoner til å finne ut omtrent hvor telefonen er, når det er tilgjengelig. Ondsinnede applikasjoner kan bruke dette til å finne ut omtrent hvor du er."</string>
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"nøyaktig (GPS-) posisjon"</string>
+ <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Få tilgang til nøyaktige posisjonskilder, som for eksempel Global Positioning System (GPS) på nettbrettet der dette er tilgjengelig. Skadelige programmer kan bruke dette til å finne ut hvor du er, og kan også bruke mer batteri."</string>
+ <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Få tilgang til nøyaktige posisjonskilder som Global Positioning System (GPS) på telefonen, når det er tilgjengelig. Ondsinnede applikasjoner kan bruke dette til å finne ut hvor du er, og kan bruke mer batteri."</string>
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"grov (nettverksbasert) posisjon"</string>
+ <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Få tilgang til grovinnstilte posisjonskilder, som for eksempel databasen over basestasjoner, for å finne nettbrettets omtrentlige posisjon der dette er tilgjengelig. Skadelige programmer kan bruke dette til å finne ut omtrent hvor du er."</string>
+ <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Få tilgang til grove posisjonskilder som databasen over basestasjoner til å finne ut omtrent hvor telefonen er, når det er tilgjengelig. Ondsinnede applikasjoner kan bruke dette til å finne ut omtrent hvor du er."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"få tilgang til SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Lar applikasjonen bruke lavnivåfunksjonalitet i SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lese skjermbufferet"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"skrive APN-innstillinger"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Lar applikasjonen to endre APN-innstillinger slik som mellomtjener eller port for hvilket som helst aksesspunkt."</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_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>
@@ -627,9 +633,9 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Arbeid"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Annen"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Skriv inn PIN-kode:"</string>
- <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"Tast inn PUK-kode og ny personlig kode"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"Tast inn PUK-kode og ny PIN-kode"</string>
<string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
- <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"Ny personlig kode"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"Ny PIN-kode"</string>
<string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Trykk og oppgi passord"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Skriv inn passord for å låse opp"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Skriv inn personlig kode for å låse opp"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Lar applikasjonen endre nettleserens logg og bokmerker lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å fjerne eller redigere nettleserens data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"angi alarm i alarmklokke"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Lar programmet angi en alarm i et installert alarmklokkeprogram. Det kan hende at enkelte alarmklokkeprogrammer ikke implementerer denne funksjonen."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"legg til talepost"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Ingenting å lime inn"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Velg en aktivitet"</string>
<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="653922989522758100">"Beklager!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Applikasjonen <xliff:g id="APPLICATION">%1$s</xliff:g> (prosess <xliff:g id="PROCESS">%2$s</xliff:g>) stoppet uventet. Prøv igjen."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Prosessen <xliff:g id="PROCESS">%1$s</xliff:g> stoppet uventet. Prøv igjen."</string>
- <string name="anr_title" msgid="3100070910664756057">"Beklager!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> (i applikasjonen <xliff:g id="APPLICATION">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> (i prosessen <xliff:g id="PROCESS">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Applikasjonen <xliff:g id="APPLICATION">%1$s</xliff:g> (i prosessen <xliff:g id="PROCESS">%2$s</xliff:g>) svarer ikke."</string>
- <string name="anr_process" msgid="1246866008169975783">"Prosessen <xliff:g id="PROCESS">%1$s</xliff:g> svarer ikke."</string>
- <string name="force_close" msgid="3653416315450806396">"Tving avslutning"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> svarer ikke. Vil du lukke den?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Prosessen <xliff:g id="PROCESS">%1$s</xliff:g> svarer ikke."\n\n"Vil du lukke den?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapportér"</string>
<string name="wait" msgid="7147118217226317732">"Vent"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Programmet er omdirigert"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Åpent trådløsnett i nærheten"</item>
<item quantity="other" msgid="7915895323644292768">"Åpne trådløsnett i nærheten"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Et Wi-Fi-nettverk er deaktivert"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Et Wi-Fi-nettverk er midlertidig deaktivert på grunn av dårlig tilkobling."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan ikke koble til Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kan ikke starte Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kan 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å må oppgis på mottakerenheten <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for å fortsette tilkoblingskonfigurasjonen"</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>
<string name="select_character" msgid="3365550120617701745">"Sett inn tegn"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ukjent applikasjon"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Sender SMS-meldinger"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilnettverket er ikke tilgjengelig før du erstatter SIM-kortet."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-operasjonen mislyktes"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB-operasjonen 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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Kan ikke slette USB-lagring."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Kan ikke slette 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Velg en konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Øke"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Senke"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"avmerket"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"ikke valgt"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"valgt"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"ikke valgt"</string>
+ <string name="switch_on" msgid="551417728476977311">"på"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"klikk for å aktivere"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"klikk 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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhetssertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikatet er gyldig."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index c810f03a57d7..8bab89ae4451 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Functiecode voltooid."</string>
<string name="fcError" msgid="3327560126588500777">"Verbindingsprobleem of ongeldige functiecode."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"De webpagina bevat een fout."</string>
+ <string name="httpError" msgid="6603022914760066338">"Er is een netwerkfout opgetreden."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"De URL kan niet worden gevonden."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Het schema voor de siteverificatie wordt niet ondersteund."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"De server kan niet communiceren. Probeer het later opnieuw."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Hiermee staat u de houder toe zich te verbinden met de hoofdinterface van een invoermethode. Nooit vereist voor normale apps."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"koppelen aan een sms-service"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Hiermee kan de gebruiker koppelen met de hoofdinterface van een sms-service (zoals SpellCheckerService). Dit is niet nodig voor normale apps."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"koppelen aan een VPN-service"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Hiermee staat u de houder toe verbinding te maken met de hoofdinterface van een VPN-service. Nooit vereist voor normale apps."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"verbinden met een achtergrond"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Hiermee staat u de houder toe zich te verbinden met de hoofdinterface van een achtergrond. Nooit vereist voor normale apps."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"verbinden met een widgetservice"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"profielgegevens lezen"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"profielgegevens schrijven"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"agendagebeurtenissen lezen"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Hiermee kan een app alle agendagebeurtenissen lezen die zijn opgeslagen op uw tablet. Schadelijke apps kunnen hiervan gebruik maken om uw agendagebeurtenissen te verzenden naar andere personen."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Hiermee kan een app alle agendagebeurtenissen lezen die zijn opgeslagen op uw telefoon. Schadelijke apps kunnen hiervan gebruik maken om uw agendagebeurtenissen te verzenden naar andere personen."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"agendagebeurtenissen toevoegen of aanpassen en e-mail verzenden naar gasten"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Een app toestaan gebeurtenissen aan uw agenda toe te voegen of te wijzigen, wat inhoudt dat er e-mails kunnen worden verzonden naar gasten. Schadelijke apps kunnen dit gebruiken om uw agendagebeurtenissen te wissen of aan te passen of om e-mail naar gasten te verzenden."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"agenda-afspraken toevoegen of wijzigen en e-mails verzenden aan gasten zonder medeweten van de eigenaren"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Hiermee kan een app uitnodigingen voor afspraken verzenden uit naam van de eigenaar van de agenda en afspraken toevoegen, verwijderen of wijzigen die u op uw apparaat kunt aanpassen, inclusief die van vrienden of collega\'s. Een schadelijke app die over deze rechten beschikt, kan spam-e-mails verzenden die afkomstig lijken te zijn van eigenaren van agenda\'s, afspraken wijzigen zonder medeweten van de eigenaren of nepafspraken toevoegen."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"neplocatiebronnen voor test"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Neplocatiebronnen voor testdoeleinden maken. Schadelijke apps kunnen dit gebruiken om de locatie en/of status te overschrijven die door de echte locatiebronnen wordt aangegeven, zoals GPS of netwerkaanbieders."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"toegang tot extra opdrachten van locatieaanbieder"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"instellingen voor toegangspuntnaam schrijven"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Hiermee kan een app de APN-instellingen, zoals proxy en poort, van elke APN wijzigen."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Hiermee kan een app de op uw telefoon opgeslagen browsergeschiedenis of bladwijzers wijzigen. Schadelijke apps kunnen hiermee uw browsergegevens verwijderen of wijzigen."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"alarm instellen in wekker"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Hiermee kan de app een alarm instellen in een geïnstalleerde wekker-app. Deze functie wordt door sommige wekker-apps niet geïmplementeerd."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"voicemail toevoegen"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 maand geleden"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Meer dan 1 maand geleden"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Niets te plakken"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Een actie selecteren"</string>
<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="653922989522758100">"Helaas!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) is onverwachts gestopt. Probeer het opnieuw."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> is onverwachts gestopt. Probeer het opnieuw."</string>
- <string name="anr_title" msgid="3100070910664756057">"Helaas!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Activiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> (in app <xliff:g id="APPLICATION">%2$s</xliff:g>) reageert niet."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Activiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"App <xliff:g id="APPLICATION">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> reageert niet."</string>
- <string name="force_close" msgid="3653416315450806396">"Nu sluiten"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> reageert niet. Wilt u deze app sluiten?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> reageert niet."\n\n"Wilt u het sluiten?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Wachten"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"App omgeleid"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Open Wi-Fi-netwerk beschikbaar"</item>
<item quantity="other" msgid="7915895323644292768">"Open Wi-Fi-netwerken beschikbaar"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Een Wi-Fi-netwerk is uitgeschakeld"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Een Wi-Fi-netwerk werd wegens slechte connectiviteit tijdelijk uitgeschakeld."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan geen verbinding maken met Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Direct starten is mislukt"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi Direct starten is mislukt"</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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Het mobiele netwerk is niet beschikbaar totdat u de simkaart vervangt."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-bewerking mislukt"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Wissen van USB-opslag is mislukt."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Wissen van SD-kaart is mislukt."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecteer een account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Hoger"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Lager"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"aangevinkt"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"niet aangevinkt"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"geselecteerd"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"niet geselecteerd"</string>
+ <string name="switch_on" msgid="551417728476977311">"aan"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tik om in te schakelen"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"tik 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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Beveiligingscertificaat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dit certificaat is geldig."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index bb63f1e58ab6..68cbd3e48e9d 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Wykonano kod funkcji."</string>
<string name="fcError" msgid="3327560126588500777">"Problem z połączeniem lub nieprawidłowy kod funkcji."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Strona sieci Web zawiera błąd."</string>
+ <string name="httpError" msgid="6603022914760066338">"Wystąpił błąd sieci."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Nie można odszukać adresu URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Schemat uwierzytelniania strony nie jest obsługiwany."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Nie udało się połączyć z serwerem. Spróbuj ponownie później."</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="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>
@@ -195,6 +195,8 @@
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Umożliwia aplikacji odbiór i przetwarzanie wiadomości pochodzących z emisji alarmowych. To pozwolenie jest dostępne tylko dla aplikacji systemowych."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"wysyłanie wiadomości SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Pozwól aplikacjom na wysyłanie wiadomości SMS. Szkodliwe aplikacje mogą generować koszty, wysyłając wiadomości bez wiedzy użytkownika."</string>
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"wysyłanie wiadomości SMS bez potwierdzenia"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Zezwala aplikacji na wysyłanie wiadomości SMS. Złośliwe aplikacje mogą generować koszty, wysyłając wiadomości bez Twojej wiedzy."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"czytanie wiadomości SMS lub MMS"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Zezwala aplikacji na odczyt wiadomości SMS przechowywanych w tablecie lub na karcie SIM. Złośliwe aplikacje mogą odczytywać poufne wiadomości."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Pozwala aplikacji na czytanie wiadomości SMS zapisanych w telefonie lub na karcie SIM. Szkodliwe aplikacje mogą czytać poufne wiadomości."</string>
@@ -264,6 +266,8 @@
<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_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>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Umożliwia posiadaczowi powiązać interfejs najwyższego poziomu dla tapety. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"powiązanie z usługą widżetów"</string>
@@ -321,15 +325,15 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"zapisywanie danych kontaktowych"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Zezwala aplikacji na modyfikowanie danych kontaktowych (adresów) zapisanych w tablecie. Złośliwe aplikacje mogą wykorzystać tę możliwość w celu usunięcia lub zmodyfikowania danych kontaktowych."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Pozwala aplikacji na zmianę danych kontaktowych (adresowych) zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać, aby usunąć lub zmienić dane kontaktowe."</string>
- <string name="permlab_readProfile" msgid="2211941946684590103">"odczyt danych profilu"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Zezwala aplikacji na odczyt wszystkich informacji z Twojego profilu osobistego. Złośliwe aplikacje mogą wykorzystać tę możliwość w celu zidentyfikowania Cię i wysłania Twoich informacji osobistych do innych osób."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"zapis danych profilu"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Zezwala aplikacji na modyfikowanie informacji w Twoim profilu osobistym. Złośliwe aplikacje mogą wykorzystać tę możliwość w celu usunięcia lub zmodyfikowania danych profilu."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"odczytywanie wydarzeń w kalendarzu"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Zezwala aplikacji na odczyt wszystkich wydarzeń z kalendarza zapisanych w tablecie. Złośliwe aplikacje mogą wykorzystać tę możliwość w celu wysłania wydarzeń z kalendarza do innych osób."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Pozwala aplikacji na odczytywanie wszystkich wydarzeń z kalendarza, zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać do rozsyłania wydarzeń z kalendarza do innych ludzi."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"dodawanie i modyfikowanie wydarzeń w kalendarzu oraz wysyłanie wiadomości e-mail do gości"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Zezwala aplikacji na dodawanie i zmianę wydarzeń w kalendarzu, co może powodować wysyłanie wiadomości e-mail do gości. Złośliwe aplikacje mogą używać tego uprawnienia do usuwania i modyfikowania wydarzeń w kalendarzu oraz do wysyłania wiadomości e-mail do gości."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"odczyt danych z Twojego profilu"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Umożliwia aplikacji odczytywanie osobistych informacji z profilu, przechowywanych w urządzeniu – np. imienia, nazwiska czy danych kontaktowych. Oznacza to, że aplikacja może Cię zidentyfikować i wysyłać do innych osób informacje o Twoim profilu."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"zapis danych w Twoim profilu"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umożliwia aplikacji zmienianie lub dodawanie danych do osobistych informacji w profilu, przechowywanych w urządzeniu – np. imienia, nazwiska czy danych kontaktowych. Oznacza to, że inne aplikacje mogą Cię zidentyfikować i wysyłać do innych osób informacje o Twoim profilu."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"odczyt wydarzeń w kalendarzu wraz z informacjami poufnymi"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w tablecie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w telefonie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"dodawanie i modyfikowanie wydarzeń w kalendarzu oraz wysyłanie e-maili do gości bez wiedzy właściciela"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Zezwala aplikacji na wysyłanie w imieniu właściciela kalendarza zaproszeń do udziału w wydarzeniu oraz na dodawanie, usuwanie i zmienianie wydarzeń, które możesz edytować na swoim urządzeniu, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może wysyłać spam pocztą e-mail, podszywając się pod właściciela kalendarza, modyfikować wydarzenia bez jego wiedzy i dodawać fałszywe wydarzenia."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"udawanie źródeł położenia dla testów"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Tworzenie pozorowanych źródeł ustalania położenia dla testów. Szkodliwe aplikacje mogą to wykorzystać, aby zastąpić prawdziwe położenie i/lub stan zwracany przez prawdziwe źródła, takie jak GPS lub dostawcy usługi sieciowej."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"dostęp do dodatkowych poleceń dostawcy informacji o lokalizacji"</string>
@@ -439,8 +443,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Pozwala aplikacji na wyświetlanie stanu wszystkich sieci."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"pełen dostęp do internetu"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Pozwala aplikacji na tworzenie gniazd sieciowych."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"zapisywanie ustawień nazwy punktu dostępowego (APN, Access Point Name)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Pozwala aplikacji na zmianę ustawień APN, takich jak serwer proxy oraz port dowolnego APN."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"zmiana/przechwytywanie ustawień i ruchu sieciowego"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Umożliwia aplikacji zmianę ustawień sieciowych oraz przechwytywanie i kontrolowanie całego ruchu sieciowego, na przykład zmianę serwera proxy i portu dowolnego punktu APN. Złośliwe aplikacje mogą monitorować, przekierowywać lub modyfikować pakiety sieciowe bez Twojej wiedzy."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"zmienianie połączeń sieci"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Zezwala aplikacji na zmianę stanu łączności sieciowej."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Zmiana łączności powiązanej"</string>
@@ -720,12 +724,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Umożliwia aplikacji modyfikowanie historii lub zakładek przeglądarki zapisanych w telefonie. Złośliwe aplikacje mogą używać tej opcji do usuwania lub modyfikowania danych przeglądarki."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ustaw alarm w budziku"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Umożliwia aplikacji ustawienie alarmu w zainstalowanej aplikacji budzika. W niektórych aplikacjach budzika funkcja ta może nie być zaimplementowana."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"dodawanie poczty głosowej"</string>
+ <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="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>
@@ -738,6 +748,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 miesiąc temu"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ponad 1 miesiąc temu"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +859,7 @@
<string name="cut" msgid="3092569408438626261">"Wytnij"</string>
<string name="copy" msgid="2681946229533511987">"Kopiuj"</string>
<string name="paste" msgid="5629880836805036433">"Wklej"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Schowek jest pusty"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +882,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Wybierz czynność"</string>
<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="653922989522758100">"Przepraszamy!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) została niespodziewanie zatrzymana. Spróbuj ponownie."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> został niespodziewanie zatrzymany. Spróbuj ponownie."</string>
- <string name="anr_title" msgid="3100070910664756057">"Przepraszamy!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>) nie odpowiada."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nie odpowiada."</string>
- <string name="force_close" msgid="3653416315450806396">"Wymuś zamknię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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> nie odpowiada. Czy chcesz ją zamknąć?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nie odpowiada."\n\n"Czy chcesz go zakończyć?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Zgłoś"</string>
<string name="wait" msgid="7147118217226317732">"Czekaj"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikacja przekierowana"</string>
@@ -901,18 +921,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Głośność alarmu"</string>
<string name="volume_notification" msgid="2422265656744276715">"Głośność powiadomienia"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Głośność"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Głośność Bluetooth"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Głośność dzwonka"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Głośność w czasie połączenia"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"Głośność multimediów"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Głośność powiadomień"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Dzwonek domyślny"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Dzwonek domyślny (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Cichy"</string>
@@ -926,11 +939,11 @@
<item quantity="one" msgid="1634101450343277345">"Otwórz dostępne sieci Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Otwórz dostępne sieci Wi-Fi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Sieć Wi-Fi została wyłączona."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Sieć Wi-Fi została tymczasowo wyłączona z powodu niskiej jakości połączenia."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nie można połączyć się z siecią Wi-Fi."</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nie można uruchomić Wi-Fi Direct."</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>
@@ -941,7 +954,7 @@
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Anuluj"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM wyjęta"</string>
- <string name="sim_removed_message" msgid="2064255102770489459">"Sieć komórkowa będzie niedostępna, dopóki nie włożysz w powrotem karty SIM."</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"Sieć komórkowa będzie niedostępna do chwili ponownego uruchomienia urządzenia z użyciem ważnej karty SIM."</string>
<string name="sim_done_button" msgid="827949989369963775">"Gotowe"</string>
<string name="sim_added_title" msgid="3719670512889674693">"Dodano kartę SIM"</string>
<string name="sim_added_message" msgid="1209265974048554242">"Musisz ponownie uruchomić urządzenie, aby korzystać z sieci komórkowej."</string>
@@ -971,7 +984,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operacja USB nie powiodła się"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operacja USB nie powiodła się"</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>
@@ -1071,8 +1084,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Nie można wyczyścić nośnika USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Nie można wyczyścić 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="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>
@@ -1096,22 +1109,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Wybierz konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zwiększ"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmniejsz"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"zaznaczono"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"nie zaznaczono"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"wybrano"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"nie wybrano"</string>
+ <string name="switch_on" msgid="551417728476977311">"włączono"</string>
+ <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="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>
@@ -1124,14 +1129,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"dotknij, aby włączyć"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"dotknij, 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_4g_limit_snoozed_title (1106562779311209039) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certyfikat zabezpieczeń"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certyfikat jest ważny."</string>
@@ -1151,4 +1156,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index ffaa63172a3f..38b8a7949386 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Código de funcionalidade completo."</string>
<string name="fcError" msgid="3327560126588500777">"Problema de ligação ou código de funcionalidade inválido."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"A página Web contém um erro."</string>
+ <string name="httpError" msgid="6603022914760066338">"Ocorreu um erro na rede."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Não foi possível localizar o URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"O esquema de autenticação do site não é suportado."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"O servidor falhou ao comunicar. Tente novamente mais tarde."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"O servidor falhou ao 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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite ao titular vincular a interface de nível superior a um método de entrada de som. Nunca deve ser necessário para aplicações normais."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a um serviço de texto"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Permite ao titular ligar-se à interface de nível superior de um serviço de texto (por exemplo SpellCheckerService). Nunca deverá ser necessário para aplicações normais."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincular a um serviço VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permite que o titular vincule a interface de nível superior de um serviço VPN. Nunca deverá ser necessário para aplicações normais."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a uma imagem de fundo"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite ao titular vincular a interface de nível superior de uma imagem de fundo. Nunca deverá ser necessário para aplicações normais."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a um serviço de widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"ler os dados de perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"escrever os dados do perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"ler eventos da agenda"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permite a uma aplicação ler todos os eventos do calendário armazenados no seu tablet. Algumas aplicações maliciosas podem utilizar este item para enviar os eventos do seu calendário a outras pessoas."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permite a uma aplicação ler todos os eventos do calendário armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar este item para enviar os eventos do seu calendário a outras pessoas."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"adicionar ou alterar eventos da agenda e enviar e-mails para os convidados"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permite que uma aplicação adicione ou altere os eventos na sua agenda, a qual pode enviar e-mails para os convidados. As aplicações maliciosas podem utilizar esta função para apagar ou alterar os eventos da sua agenda ou para enviar e-mails para os convidados."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"adicionar ou modificar eventos do calendário e enviar e-mail a convidados sem o conhecimento dos proprietários"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permite que uma aplicação envie convites para eventos como sendo o proprietário do calendário e adicionar, remover, alterar eventos que possam ser modificados no seu aparelho, incluindo os de amigos ou colegas de trabalho. Uma aplicação maliciosa com esta permissão pode enviar e-mails de spam que parecem vir de proprietários de calendários, modificar eventos sem o conhecimento dos proprietários ou adicionar eventos falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"fontes de localização fictícias para teste"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Crie fontes de localização fictícias para fins de teste. Algumas aplicações maliciosas podem utilizar este item para substituir a localização e/ou o estado devolvido por fontes de localização reais, tais como fornecedores de GPS ou de Rede."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"aceder a comandos adicionais do fornecedor de localização"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"escrever definições de Nome do ponto de acesso"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Permite a uma aplicaçaõ modificar as definições de APN, tais como Proxy e Porta de qualquer APN."</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_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>
@@ -481,7 +487,7 @@
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar conteúdo do cartão SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Permite que uma aplicação escreva no armaz. USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Permite que uma aplicação escreva no cartão SD."</string>
- <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar/eliminar conteúdo de suportes de armazenamento interno"</string>
+ <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modif./elim. armaz. interno"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8232008512478316233">"Permite à aplicação modificar o conteúdo dos suportes de armazenamento interno."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"aceder ao sistema de ficheiros da cache"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permite a uma aplicação ler e escrever no sistema de ficheiros da cache."</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite que uma aplicação modifique o histórico e os marcadores do browser armazenados no telefone. As aplicações maliciosas podem utilizar esta permissão para apagar ou modificar os dados do browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"definir alarme no despertador"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que a aplicação defina um alarme numa aplicação de despertador instalada. Algumas aplicações de despertador podem não integrar esta funcionalidade."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"adicionar correio de voz"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada para colar"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Seleccionar uma acção"</string>
<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="653922989522758100">"Lamentamos."</string>
- <string name="aerr_application" msgid="4683614104336409186">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) parou de forma inesperada. Tente novamente."</string>
- <string name="aerr_process" msgid="1551785535966089511">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> parou de forma inesperada. Tente novamente."</string>
- <string name="anr_title" msgid="3100070910664756057">"Lamentamos!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"A actividade <xliff:g id="ACTIVITY">%1$s</xliff:g> (na aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>) não está a responder."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"A actividade <xliff:g id="ACTIVITY">%1$s</xliff:g> (no processo <xliff:g id="PROCESS">%2$s</xliff:g>) não está a responder."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (no processo <xliff:g id="PROCESS">%2$s</xliff:g>) não está a responder."</string>
- <string name="anr_process" msgid="1246866008169975783">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> não está a responder."</string>
- <string name="force_close" msgid="3653416315450806396">"Forçar fecho"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"A <xliff:g id="APPLICATION">%1$s</xliff:g> não está a responder. Pretende encerrá-la?"</string>
+ <string name="anr_process" msgid="306819947562555821">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> não está a responder."\n\n"Pretende encerrá-lo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Relatório"</string>
<string name="wait" msgid="7147118217226317732">"Esperar"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicação redireccionada"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,13 +941,13 @@
<item quantity="one" msgid="1634101450343277345">"Rede Wi-Fi aberta disponível"</item>
<item quantity="other" msgid="7915895323644292768">"Abrir redes Wi-Fi disponíveis"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Uma rede Wi-Fi foi desativada"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Uma rede Wi-Fi foi temporariamente desativada devido a uma má conetividade."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível ligar a Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Falha ao 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>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Falha ao 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>
<string name="select_character" msgid="3365550120617701745">"Introduzir carácter"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicação desconhecida"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"A rede de telemóvel só estará disponível quando substituir o cartão SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Falha na operação USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Falha na operação USB"</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>
@@ -1050,7 +1065,7 @@
<string name="reset" msgid="2448168080964209908">"Repor"</string>
<string name="submit" msgid="1602335572089911941">"Enviar"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Modo automóvel activado"</string>
- <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Seleccionar para sair do modo automóvel."</string>
+ <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Seleccionar para sair do modo Carro."</string>
<string name="tethered_notification_title" msgid="3146694234398202601">"Ligação ponto a ponto ou hotspot activos"</string>
<string name="tethered_notification_message" msgid="3067108323903048927">"Tocar para configurar"</string>
<string name="back_button_label" msgid="2300470004503343439">"Anterior"</string>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Falha ao apagar o armazenamento USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Falha ao apagar o 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuir"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"marcado"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"desmarcado"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"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">"premido"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"não premido"</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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"toque para ativar"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 87f1f43c4b0e..4b48bbd551f1 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Código de recurso concluído."</string>
<string name="fcError" msgid="3327560126588500777">"Problema de conexão ou código de recurso inválido."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"A página da web contém um erro."</string>
+ <string name="httpError" msgid="6603022914760066338">"Ocorreu um erro na rede."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Não foi possível encontrar o URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"O esquema de autenticação do site não é suportado."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Falha de comunicação do servidor. Tente novamente mais tarde."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Falha de comunicação do servidor. 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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite que o detentor se sujeite à interface de nível superior de um método de entrada. Aplicativos normais não devem precisar disso em momento algum."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"sujeitar-se a um serviço de texto"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Permite que o titular se sujeite à interface de nível superior de um serviço de texto (por exemplo, SpellCheckerService). Não deve ser necessário para aplicativos normais."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"se ligam a um serviço de VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permite que o detentor se sujeite à interface de nível superior de um serviço de widget. Aplicativos normais não devem precisar disso em momento algum."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sujeitar-se a um plano de fundo"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite que o detentor se sujeite à interface de nível superior de um plano de fundo. Aplicativos normais não devem precisar disso em momento algum."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sujeitar-se a um serviço de widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"ler dados do perfil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"gravar dados do perfil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"ler eventos da agenda"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permite que um aplicativo leia todos os eventos da agenda armazenados em seu tablet. Aplicativos maliciosos podem usar isso para enviar eventos de sua agenda para outras pessoas."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permite que um aplicativo leia todos os eventos da agenda armazenados no seu telefone. Aplicativos maliciosos podem usar isso para enviar eventos da sua agenda para outras pessoas."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"adicionar ou modificar eventos da agenda e enviar e-mail aos convidados"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permite que um aplicativo adicione ou altere os eventos na sua agenda, que pode enviar e-mail aos convidados. Aplicativos maliciosos podem usar isso para apagar ou modificar os eventos da sua agenda ou para enviar e-mail aos convidados."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"adicionar ou modificar compromissos e enviar e-mail para os convidados sem o conhecimento dos donos"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permite que um aplicativo envie convites para eventos como o dono da agenda, além de adicionar, remover e alterar os eventos que você pode modificar em seu dispositivo, incluindo os de amigos ou de colegas de trabalho. Um aplicativo malicioso com essa permissão pode enviar e-mails de spam que parecem vir do dono da agenda, modificar acontecimentos sem seu conhecimento ou adicionar eventos falsos."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"fontes de locais fictícios para teste"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Cria fontes de locais fictícios para teste. Aplicativos maliciosos podem usar isso para substituir o local e/ou o status retornado pelas fontes de locais reais como GPS ou provedores de rede."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"acessar comandos extras do provedor de localização"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"gravar as configurações do Nome do ponto de acesso"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Permite que um aplicativo modifique as configurações de APN, como Proxy e Porta de qualquer APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite que um aplicativo modifique o histórico ou os favoritos do Navegador armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os dados do seu Navegador."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"definir alarme no despertador"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que o aplicativo defina um alarme em um aplicativo de despertador instalado. Talvez alguns aplicativos de despertador não implementem esse recurso."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"adicionar correio de voz"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Recortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada para colar"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Selecionar uma ação"</string>
<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="653922989522758100">"Desculpe!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"O aplicativo <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) parou inesperadamente. Tente novamente."</string>
- <string name="aerr_process" msgid="1551785535966089511">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> parou inesperadamente. Tente novamente."</string>
- <string name="anr_title" msgid="3100070910664756057">"Desculpe!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"A atividade <xliff:g id="ACTIVITY">%1$s</xliff:g> (no aplicativo <xliff:g id="APPLICATION">%2$s</xliff:g>) não está respondendo."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"A atividade <xliff:g id="ACTIVITY">%1$s</xliff:g> (no processo <xliff:g id="PROCESS">%2$s</xliff:g>) não está respondendo."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"O aplicativo <xliff:g id="APPLICATION">%1$s</xliff:g> (no processo <xliff:g id="PROCESS">%2$s</xliff:g>) não está respondendo."</string>
- <string name="anr_process" msgid="1246866008169975783">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> não está respondendo."</string>
- <string name="force_close" msgid="3653416315450806396">"Forçar fechamento"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"O <xliff:g id="APPLICATION">%1$s</xliff:g> não está respondendo. Gostaria de fechá-lo?"</string>
+ <string name="anr_process" msgid="306819947562555821">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> não está respondendo. "\n\n"Gostaria de fechá-lo?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Informar"</string>
<string name="wait" msgid="7147118217226317732">"Aguardar"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicativo redirecionado"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Rede Wi-Fi aberta disponível"</item>
<item quantity="other" msgid="7915895323644292768">"Redes Wi-Fi abertas disponíveis"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Uma rede WiFi foi desativada"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Uma rede WiFi foi temporariamente desativada devido a conectividade ruim."</string>
- <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"WiFi Direct"</string>
- <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar a operação do WiFi Direct. Isso desligará a operação do ponto de acesso/cliente WiFi."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Falha ao iniciar o WiFi Direct"</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitação de configuração da conexão do WiFi 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 WiFi 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>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível se conectar a redes Wi-Fi"</string>
+ <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_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>
<string name="select_character" msgid="3365550120617701745">"Inserir caractere"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicativo desconhecido"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Enviando mensagens SMS"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"A rede móvel estará indisponível até que você substitua o cartão SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Falha de operação de USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Falha de operação de 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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Falha ao apagar o armazenamento USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Falha ao apagar o 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecione uma conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Redução"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"toque para ativar"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 0377e658ec84..cc3499ffec24 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -114,7 +114,7 @@
<string name="httpErrorAuth" msgid="7293960746955020542">"L\'autentificaziun n\'è betg reussida."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"L\'autentificaziun cun agid dad in proxy server n\'è betg reussida."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Betg reussì da connectar cun il server."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"La communicaziun cun il server n\'è betg reussida. Empruvai pli tard anc ina giada."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"La communicaziun cun il server n\'è betg reussida. Empruvai pli tard anc ina giada."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Surpassà il temp cun connectar al server."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Questa pagina cuntegna memia blers renviaments da server."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Quest protocol na vegn betg sustegnì."</string>
@@ -202,6 +202,10 @@
<skip />
<string name="permlab_sendSms" msgid="5600830612147671529">"trametter messadis SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Permetta ad applicaziuns da trametter messadis SMS. Applicaziuns donnegiusas pon chaschunar custs cun trametter messadis senza As dumandar."</string>
+ <!-- no translation found for permlab_sendSmsNoConfirmation (4781483105951730228) -->
+ <skip />
+ <!-- no translation found for permdesc_sendSmsNoConfirmation (4477752891276276168) -->
+ <skip />
<string name="permlab_readSms" msgid="4085333708122372256">"leger SMS u MMS"</string>
<!-- outdated translation 3002170087197294591 --> <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Permetta ad ina applicaziun da leger ils SMS memorisads sin Voss telefonin u sin Vossa carta SIM. Applicaziuns donnegiusas legian uschia eventualmain Voss messadis confidenzials."</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Permetta ad ina applicaziun da leger ils SMS memorisads sin Voss telefonin u sin Vossa carta SIM. Applicaziuns donnegiusas legian uschia eventualmain Voss messadis confidenzials."</string>
@@ -279,6 +283,10 @@
<skip />
<!-- no translation found for permdesc_bindTextService (172508880651909350) -->
<skip />
+ <!-- no translation found for permlab_bindVpnService (4708596021161473255) -->
+ <skip />
+ <!-- no translation found for permdesc_bindVpnService (6011554199384584151) -->
+ <skip />
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sa fixar vid in fund davos"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permetta da sa fixar al nivel d\'interfatscha pli aut dad ina metoda d\'endataziun. Betg previs per applicaziuns normalas."</string>
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
@@ -340,19 +348,19 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"scriver datas da contact"</string>
<!-- outdated translation 3924383579108183601 --> <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permetta ad ina applicaziun da modifitgar tut las datas da contact (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per stizzar u modifitgar Vossas datas da contact."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permetta ad ina applicaziun da modifitgar tut las datas da contact (adressas) memorisadas sin Voss telefonin. Applicaziuns donnegiusas pon utilisar questa funcziun per stizzar u modifitgar Vossas datas da contact."</string>
- <!-- no translation found for permlab_readProfile (2211941946684590103) -->
+ <!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
- <!-- no translation found for permdesc_readProfile (4732942280141331352) -->
+ <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
<skip />
- <!-- no translation found for permlab_writeProfile (6561668046361989220) -->
+ <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
<skip />
- <!-- no translation found for permdesc_writeProfile (8040643023682531996) -->
+ <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
- <string name="permlab_readCalendar" msgid="6898987798303840534">"leger eveniments da chalender"</string>
- <!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"agiuntar u modifitgar eveniments en il chalender e trametter e-mails als envidads"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permetta ad ina applicaziun dad agiuntar u modifitgar eveniments en Voss chalender che pon trametter e-mails ad envidads. Applicaziuns donnegiusas pon uschia stizzar u modifitgar las datas en Voss chalender u trametter e-mails ad envidads."</string>
+ <!-- outdated translation 6898987798303840534 --> <string name="permlab_readCalendar" msgid="5972727560257612398">"leger eveniments da chalender"</string>
+ <!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
+ <!-- outdated translation 5533029139652095734 --> <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Permetta ad ina applicaziun da leger tut ils eveniments da chalender memorisads sin Voss telefonin. Applicaziuns donnegiusas pon uschia trametter Voss eveniments da chalender ad autras persunas."</string>
+ <!-- outdated translation 3894879352594904361 --> <string name="permlab_writeCalendar" msgid="8438874755193825647">"agiuntar u modifitgar eveniments en il chalender e trametter e-mails als envidads"</string>
+ <!-- outdated translation 2988871373544154221 --> <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permetta ad ina applicaziun dad agiuntar u modifitgar eveniments en Voss chalender che pon trametter e-mails ad envidads. Applicaziuns donnegiusas pon uschia stizzar u modifitgar las datas en Voss chalender u trametter e-mails ad envidads."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"creaziun da funtaunas da posiziun fictivas per motivs da test"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Permetta da crear funtaunas da localisaziun fictivas per motivs da test. Applicaziuns donnegiusas pon uschia remplazzar la posiziun ed il status returnà da las vairas funtaunas sco GPS u Voss gestiunari da la rait."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"access als cumonds supplementars da purschiders da posiziuns geograficas"</string>
@@ -466,8 +474,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Permetta ad ina applicaziun da vesair ils status da tut las raits."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"access cumplet a l\'internet"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Permetta ad ina applicaziun da crear sockets da rait."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"scriver parameters per nums da puncts d\'access"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"\"Permetta ad ina applicaziun da modifitgar ils parameters APN (num dals puncts d\'access), sco proxy ni port da mintga APN.\""</string>
+ <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"scriver parameters per nums da puncts d\'access"</string>
+ <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"\"Permetta ad ina applicaziun da modifitgar ils parameters APN (num dals puncts d\'access), sco proxy ni port da mintga APN.\""</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"modifitgar la connectivitad da la rait"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permetta ad ina applicaziun da modifitgar il status da connectivitad da la rait."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"midar la connectivitad da tethering"</string>
@@ -820,6 +828,14 @@
<skip />
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifitgar las autorisaziuns da geolocalisaziun dal navigatur"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permetta ad ina applicaziun da modifitgar las permissiuns da geolocalisaziun dal navigatur. Applicaziuns donnegiusas pon utilisar questa funcziun per trametter datas da posiziun a websites arbitraras."</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="save_password_message" msgid="767344687139195790">"Vulais Vus ch\'il navigatur memorisescha quest pled-clav?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Betg ussa"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Memorisar"</string>
@@ -832,6 +848,16 @@
<string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="3658178007202748164">"stizzar"</string>
<string name="search_go" msgid="8298016669822141719">"Tschertgar"</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="oneMonthDurationPast" msgid="7396384508953779925">"Avant 1 mais"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Avant dapli ch\'in mais"</string>
<plurals name="num_seconds_ago">
@@ -933,8 +959,6 @@
<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 pasteDisabled (7259254654641456570) -->
- <skip />
<!-- no translation found for replace (8333608224471746584) -->
<skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar l\'URL"</string>
@@ -960,15 +984,21 @@
<!-- no translation found for chooseUsbActivity (7892597146032121735) -->
<skip />
<string name="noApplications" msgid="1691104391758345586">"Nagina applicaziun po exequir questa acziun."</string>
- <string name="aerr_title" msgid="653922989522758100">"Perstgisai!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"L\'applicaziun <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) è vegnida serrada nunspetgadamain. Empruvai anc ina giada."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Il process <xliff:g id="PROCESS">%1$s</xliff:g> è vegnì interrut nunspetgadamain. Empruvai anc ina giada."</string>
- <string name="anr_title" msgid="3100070910664756057">"Perstgisai!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"L\'activitad <xliff:g id="ACTIVITY">%1$s</xliff:g> (da l\'applicaziun <xliff:g id="APPLICATION">%2$s</xliff:g>) na respunda betg."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"L\'activitad <xliff:g id="ACTIVITY">%1$s</xliff:g> (dal process <xliff:g id="PROCESS">%2$s</xliff:g>) na respunda betg."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"L\'applicaziun <xliff:g id="APPLICATION">%1$s</xliff:g> (dal process <xliff:g id="PROCESS">%2$s</xliff:g>) na respunda betg."</string>
- <string name="anr_process" msgid="1246866008169975783">"Il process <xliff:g id="PROCESS">%1$s</xliff:g> na respunda betg."</string>
- <string name="force_close" msgid="3653416315450806396">"Sfurzar da serrar"</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="anr_title" msgid="4351948481459135709"></string>
+ <!-- no translation found for anr_activity_application (8339738283149696827) -->
+ <skip />
+ <!-- no translation found for anr_activity_process (7018289416670457797) -->
+ <skip />
+ <!-- no translation found for anr_application_process (7208175830253210526) -->
+ <skip />
+ <!-- no translation found for anr_process (306819947562555821) -->
+ <skip />
+ <!-- outdated translation 3653416315450806396 --> <string name="force_close" msgid="8346072094521265605">"Sfurzar da serrar"</string>
<string name="report" msgid="4060218260984795706">"Rapport"</string>
<string name="wait" msgid="7147118217226317732">"Spetgar"</string>
<!-- no translation found for launch_warning_title (8323761616052121936) -->
@@ -1003,17 +1033,15 @@
<string name="volume_alarm" msgid="1985191616042689100">"Volumen dal svegliarin"</string>
<string name="volume_notification" msgid="2422265656744276715">"Volumen dals avis"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Volumen"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
+ <!-- no translation found for volume_icon_description_bluetooth (6538894177255964340) -->
<skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
+ <!-- no translation found for volume_icon_description_ringer (3326003847006162496) -->
<skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
+ <!-- no translation found for volume_icon_description_incall (8890073218154543397) -->
<skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
+ <!-- no translation found for volume_icon_description_media (4217311719665194215) -->
<skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
+ <!-- no translation found for volume_icon_description_notification (7044986546477282274) -->
<skip />
<string name="ringtone_default" msgid="3789758980357696936">"Tun da scalin predefinì"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Tun da scalin predefinì (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
@@ -1028,15 +1056,15 @@
<item quantity="one" msgid="1634101450343277345">"Rait WLAN averta disponibla"</item>
<item quantity="other" msgid="7915895323644292768">"Raits WLAN avertas disponiblas"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
+ <!-- no translation found for wifi_watchdog_network_disabled (7904214231651546347) -->
<skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
+ <!-- no translation found for wifi_watchdog_network_disabled_detailed (2517058131278770509) -->
<skip />
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
+ <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
<skip />
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
@@ -1052,7 +1080,7 @@
<string name="sms_control_no" msgid="1715320703137199869">"Interrumper"</string>
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -1089,7 +1117,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Cun deactivar la memoria USB è in problem cumparì. Verifitgai che Vus avais demontà il host USB ed empruvai anc ina giada."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar la memoria USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Sche Vus activais l\'apparat periferic da memoria USB sa ferman tschertas applicaziuns che Vus utilisais. Ellas n\'èn probablamain betg disponiblas enfin che l\'apparat periferic vegn puspè deactivà."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operaziun USB betg reussida"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operaziun USB betg reussida"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1205,9 +1233,9 @@
<skip />
<!-- no translation found for progress_erasing (2115214724367534095) -->
<skip />
- <!-- no translation found for format_error (4320339096529911637) -->
+ <!-- no translation found for format_error (6299769563624776948) -->
<skip />
- <!-- no translation found for format_error (1343380371925238343) -->
+ <!-- no translation found for format_error (7315248696644510935) -->
<skip />
<!-- no translation found for media_bad_removal (7960864061016603281) -->
<skip />
@@ -1295,7 +1323,7 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (2182247539226163759) -->
+ <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
<!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
<skip />
@@ -1305,6 +1333,10 @@
<skip />
<!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
<skip />
+ <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <skip />
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
@@ -1341,4 +1373,6 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 8f8b946fdb88..f074fb0d9dd4 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Cod de funcţie complet."</string>
<string name="fcError" msgid="3327560126588500777">"Problemă de conectare sau cod de funcţie nevalid."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Pagina web conţine o eroare."</string>
+ <string name="httpError" msgid="6603022914760066338">"A apărut o eroare de reţea."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Imposibil de găsit adresa URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Schema de autentificare a site-ului nu este acceptată."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Serverul nu a reuşit să comunice. Încercaţi din nou mai târziu."</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="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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite deţinătorului să se conecteze la interfaţa de nivel superior a unei metode de intrare. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"conectare la un serviciu text"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Permite deţinătorului să se conecteze la o interfaţă de nivel superior a unui serviciu text (de ex., SpellCheckerService). Nu ar trebui să fie necesară pentru aplicaţiile obişnuite."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"conectare la un serviciu VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu VPN. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"conectare la o imagine de fundal"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unei imagini de fundal. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"conectare la un serviciu widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"citeşte datele de profil"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"scrie datele de profil"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"citire evenimente din calendar"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe computerul tablet PC. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a trimite evenimentele din calendar către alte persoane."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Permite unei aplicaţii să citească toate evenimentele din calendar stocate pe telefon. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a trimite evenimentele din calendar către alte persoane."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"adăugare sau modificare de evenimente în calendar şi trimitere e-mailuri către invitaţi"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Permite unei aplicaţii să adauge sau să modifice evenimentele din calendar, prin care se pot trimite mesaje de e-mail către invitaţi. Aplicaţiile rău-intenţionate ar putea să utilizeze această aplicaţie pentru a şterge sau a modifica evenimentele din calendar ori pentru a trimite mesaje de e-mail către invitaţi."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"adăugarea sau modificarea evenimentelor din calendar şi trimiterea de e-mailuri invitaţilor fără ştirea proprietarului"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Permite unei aplicaţii să trimită invitaţii pentru evenimente în numele proprietarului calendarului şi să adauge, să elimine sau să modifice evenimentele pe care le puteţi edita pe dispozitiv, inclusiv pe cele ale prietenilor sau colegilor dvs. O aplicaţie rău intenţionată care are această permisiune poate să trimită e-mailuri care conţin spam şi care par să provină de la proprietarul calendarului, să modifice evenimente fără ştirea acestuia sau să adauge evenimente false."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"surse de locaţii pentru testare"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Creează surse de locaţii pentru testare. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a înlocui locaţia şi/sau starea returnată de sursele de locaţii reale, cum ar fi furnizorii GPS sau de reţea."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accesare comenzi suplimentare ale furnizorului locaţiei"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"scriere setări pentru numele punctelor de acces"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Permite unei aplicaţii să modifice setările APN, cum ar fi proxy-ul sau portul oricărui APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite unei aplicaţii să modifice istoricul şi marcajele din browser, stocate pe telefonul dvs. Aplicaţiile rău-intenţionate ar putea să utilizeze această permisiune pentru a şterge sau a modifica datele din browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"setare alarmă pentru ceasul cu alarmă"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite aplicaţiei să seteze o alarmă într-o aplicaţie de ceas de alarmă instalată. Este posibil ca unele aplicaţii de ceas de alarmă să nu implementeze această funcţie."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"adăugare mesagerie vocală"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nimic de inserat"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Î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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Selectaţi o acţiune"</string>
<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="653922989522758100">"Ne pare rău!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplicaţia <xliff:g id="APPLICATION">%1$s</xliff:g> (procesul <xliff:g id="PROCESS">%2$s</xliff:g>) s-a oprit în mod neaşteptat. Încercaţi din nou."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> s-a oprit în mod neaşteptat. Încercaţi din nou."</string>
- <string name="anr_title" msgid="3100070910664756057">"Ne pare rău!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Activitatea <xliff:g id="ACTIVITY">%1$s</xliff:g> (din aplicaţia <xliff:g id="APPLICATION">%2$s</xliff:g>) nu răspunde."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Activitatea <xliff:g id="ACTIVITY">%1$s</xliff:g> (din procesul <xliff:g id="PROCESS">%2$s</xliff:g>) nu răspunde."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Aplicaţia <xliff:g id="APPLICATION">%1$s</xliff:g> (din procesul <xliff:g id="PROCESS">%2$s</xliff:g>) nu răspunde."</string>
- <string name="anr_process" msgid="1246866008169975783">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> nu răspunde."</string>
- <string name="force_close" msgid="3653416315450806396">"Forţaţi închiderea"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Aplicaţia <xliff:g id="APPLICATION">%1$s</xliff:g> nu răspunde. Doriţi să o închideţi?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> nu răspunde."\n\n"Doriţi să îl închideţi?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Raportaţi"</string>
<string name="wait" msgid="7147118217226317732">"Aşteptaţi"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicaţie redirecţionată"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Reţea Wi-Fi deschisă disponibilă"</item>
<item quantity="other" msgid="7915895323644292768">"Reţele Wi-Fi deschise disponibile"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"O reţea Wi-Fi a fost dezactivată"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"O reţea Wi-Fi a fost dezactivată temporar din cauza conectivităţii slabe."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nu se poate conecta la Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Direct nu a putut porni"</string>
+ <!-- outdated translation 6467545523417622335 --> <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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Reţea mobilă va fi indisponibilă până la înlocuirea cardului SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operaţie USB nereuşită"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Ştergerea stocării USB a eşuat."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Ştergerea cardului SD a eşuat."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selectaţi un cont"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementaţi"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrementaţi"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"bifată"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"nebifată"</string>
+ <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="togglebutton_pressed" msgid="4180411746647422233">"apăsat"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"neapăsat"</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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"atingeţi pentru activare"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de securitate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certificatul este valid."</string>
@@ -1149,6 +1156,8 @@
<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">"Distribuiţi cu..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"În colaborare cu..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Dispozitiv blocat."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 4442e9959ebb..bb2f56773752 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Код функции выполнен."</string>
<string name="fcError" msgid="3327560126588500777">"Неполадки подключения или неверный код функции."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"ОК"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Ошибка на веб-странице."</string>
+ <string name="httpError" msgid="6603022914760066338">"Произошла ошибка сети."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Не удалось найти URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Схема аутентификации сайта не поддерживается."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Не удалось провести аутентификацию."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Не удалось выполнить аутентификацию через прокси-сервер."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Не удалось подключиться к серверу."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Сервер не отвечает. Повторите попытку позднее."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -262,8 +266,10 @@
<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="permdesc_bindTextService" msgid="172508880651909350">"Позволяет выполнять привязку к интерфейсу текстовой службы верхнего уровня (например, SpellCheckerService). Не требуется для обычных приложений."</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>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"связать с фоновым рисунком"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Разрешает выполнять привязку к интерфейсу фонового рисунка верхнего уровня. Не требуется для обычных приложений."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"привязка к службе виджетов"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"получать данные профиля"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Разрешает приложению читать все личные данные вашего профиля. Вредоносные приложения могут использовать эту возможность, чтобы идентифицировать вас и отправить вашу личную информацию другим людям."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"записывать данные профиля"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Разрешает приложению изменять личную информацию вашего профиля. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных профиля."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"считывать мероприятия в календаре"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Позволяет приложению считывать все события календаря, сохраненные на планшетном ПК. Вредоносные приложения могут использовать эту возможность для передачи ваших событий календаря посторонним лицам."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Позволяет приложению считывать все события календаря, сохраненные на телефоне. Вредоносные приложения могут использовать эту возможность для передачи ваших событий календаря посторонним лицам."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"добавлять и изменять мероприятия в календаре и отправлять письма гостям"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Позволяет приложению добавлять и изменять мероприятия в вашем календаре, в котором предусмотрена функция отправления писем гостям. Вредоносные приложения могут воспользоваться этим для удаления или изменения мероприятий в календаре или отправки писем гостям."</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_accessMockLocation" msgid="8688334974036823330">"копировать источники мест для проверки"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Создавать фиктивные источники данных о местоположении. Вредоносные приложения могут использовать эту возможность для перезаписи данных о местоположении или состоянии телефона, полученных от оператора связи или GPS-приемника."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"получать доступ к дополнительным командам источника данных о местоположении"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Позволяет приложению просматривать состояние всех сетей."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"неограниченный доступ в Интернет"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Позволяет приложению создавать сетевые сокеты."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"записывать настройки имени точки доступа"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Позволяет приложению изменять настройки APN, такие как прокси-сервер и порт любого APN."</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_changeNetworkState" msgid="958884291454327309">"изменять настройки подключения к сети"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Позволяет программе изменять состояние сетевого канала."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Изменять подключение к компьютеру"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Разрешает приложению изменять историю и закладки браузера, сохраненные в вашем телефоне. Вредоносное ПО может пользоваться этим, чтобы стирать или изменять данные вашего браузера."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"настраивать сигнал будильника"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Позволяет настраивать сигнал установленного приложения будильника. Для некоторых приложений будильника эта функция может быть недоступна."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"добавлять голосовое сообщение"</string>
+ <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="save_password_message" msgid="767344687139195790">"Вы хотите, чтобы браузер запомнил этот пароль?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сейчас"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запомнить"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц назад"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Более месяца назад"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Вырезать"</string>
<string name="copy" msgid="2681946229533511987">"Копировать"</string>
<string name="paste" msgid="5629880836805036433">"Вставить"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Текст для вставки отсутствует"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Заменить"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копировать URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Выбрать текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Выбор текста"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Выберите действие"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Выбор приложения для USB-устройства"</string>
<string name="noApplications" msgid="1691104391758345586">"Это действие не может выполнять ни одно приложение."</string>
- <string name="aerr_title" msgid="653922989522758100">"Ошибка приложения!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Произошла неожиданная остановка приложения <xliff:g id="APPLICATION">%1$s</xliff:g> (процесс <xliff:g id="PROCESS">%2$s</xliff:g>). Повторите попытку."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Произошла неожиданная остановка процесса <xliff:g id="PROCESS">%1$s</xliff:g>. Повторите попытку."</string>
- <string name="anr_title" msgid="3100070910664756057">"Извините!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="ACTIVITY">%1$s</xliff:g> не отвечает (приложение: <xliff:g id="APPLICATION">%2$s</xliff:g>)."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Приложение <xliff:g id="ACTIVITY">%1$s</xliff:g> не отвечает (процесс: <xliff:g id="PROCESS">%2$s</xliff:g>)."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (в процессе <xliff:g id="PROCESS">%2$s</xliff:g>) не отвечает."</string>
- <string name="anr_process" msgid="1246866008169975783">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> не отвечает."</string>
- <string name="force_close" msgid="3653416315450806396">"Закрыть"</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="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="force_close" msgid="8346072094521265605">"ОК"</string>
<string name="report" msgid="4060218260984795706">"Отзыв"</string>
<string name="wait" msgid="7147118217226317732">"Подождать"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Приложение перенаправлено"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Громкость сигнала предупреждения"</string>
<string name="volume_notification" msgid="2422265656744276715">"Громкость уведомления"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Громкость"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,12 +941,12 @@
<item quantity="one" msgid="1634101450343277345">"Найдена доступная сеть Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Найдены доступные сети Wi-Fi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Сеть Wi-Fi отключена"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Из-за проблем с соединением сеть Wi-Fi временно отключена."</string>
+ <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_failed_message" msgid="6467545523417622335">"Не удалось запустить 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>
+ <!-- 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>
<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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Мобильная сеть будет недоступна, пока вы не замените SIM-карту."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Сбой операции USB-подключения"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Не удалось очистить USB-накопитель."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Не удалось очистить 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"Нажмите, чтобы снова включить."</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертификат безопасности"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Этот сертификат действителен."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 2aa28df3b870..a92d8dfa2c1d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Požiadavka zadaná pomocou kódu funkcie bola úspešne dokončená."</string>
<string name="fcError" msgid="3327560126588500777">"Problém s pripojením alebo neplatný kód funkcie."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Webová stránka obsahuje chybu."</string>
+ <string name="httpError" msgid="6603022914760066338">"Vyskytla sa chyba siete."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Adresu URL sa nepodarilo nájsť."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Schéma overenia webových stránok nie je podporovaná."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Komunikácia so serverom zlyhala. Skúste to znova neskôr."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania metódy vstupu. Bežné aplikácie by toto nastavenie nemali vôbec využívať."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"väzba na textovú službu"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania textovej služby (napr. SpellCheckerService). Bežné aplikácie by toto nastavenie nemali vôbec využívať."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"Zaviazať k službe VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby VPN. Bežné aplikácie by toto nastavenie vôbec nemali používať."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"väzba na tapetu"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania tapety. Bežné aplikácie by toto nastavenie vôbec nemali využívať."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"viazať sa k službe miniaplikácie"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"čítať údaje profilu"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"písať údaje profilu"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"čítanie udalostí v kalendári"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Umožňuje aplikácii načítať všetky udalosti kalendára uložené vo vašom tablete. Škodlivé aplikácie potom môžu ďalším ľuďom odoslať udalosti z vášho kalendára."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Umožňuje aplikácii načítať všetky udalosti kalendára uložené vo vašom telefóne. Škodlivé aplikácie potom môžu ďalším ľuďom odoslať udalosti z vášho kalendára."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"pridávanie alebo úprava udalostí v kalendári a odosielanie e-mailov hosťom"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Umožňuje aplikácii pridávať alebo meniť udalosti v kalendári, ktoré môžu odosielať e-maily hosťom. Škodlivé aplikácie môžu pomocou tohto oprávnenia vymazávať alebo upravovať udalosti v kalendári a odosielať hosťom e-maily."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"pridať alebo upraviť udalosti v kalendári a odoslať e-mail hosťom bez vedomia vlastníka"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Umožňuje aplikácii posielať pozvánky na udalosti v mene vlastníka kalendára a pridať, odstrániť, zmeniť udalosti, ktoré môžete upravovať vo svojom zariadení (vrátane udalostí priateľov alebo kolegov). Škodlivá aplikácia môže pomocou tohto oprávnenia posielať nevyžiadané e-maily, ktoré vyzerajú tak, že pochádzajú od vlastníkov kalendárov. Môže tiež upravovať udalosti bez vedomia vlastníkov alebo pridávať falošné udalosti."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"simulácia zdrojov polohy na účely testovania"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Vytvára simulované zdroje polohy na účely testovania. Škodlivé aplikácie môžu pomocou tohto nastavenia zmeniť polohu alebo stav vrátený zdroju skutočnej polohy, ako sú napr. jednotka GPS alebo poskytovatelia siete."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"prístup k ďalším príkazom poskytovateľa polohy"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"zápis nastavení pre názov prístupového bodu (APN)"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Umožňuje aplikácii zmeniť nastavenia prístupového bodu (APN), ako je napríklad server proxy alebo port ktoréhokoľvek APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Umožňuje aplikácii zmeniť históriu prehliadača alebo záložky uložené v telefóne. Škodlivé aplikácie môžu pomocou tohto nastavenia vymazať alebo pozmeniť údaje prehliadača."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"nastaviť budík"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Umožní aplikácii nastaviť budík v nainštalovanej aplikácii budíka. Niektoré aplikácie budíka nemusia túto funkciu obsahovať."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"pridať hlasovú schránku"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"pred 1 mesiacom"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Viac ako pred 1 mesiacom"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Nie je čo vložiť"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Vyberte akciu"</string>
<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="653922989522758100">"Je nám ľúto!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) bola neočakávane zastavená. Skúste to znova."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> bol neočakávane zastavený. Skúste to znova."</string>
- <string name="anr_title" msgid="3100070910664756057">"Je nám ľúto!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Činnosť <xliff:g id="ACTIVITY">%1$s</xliff:g> (v aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>) neodpovedá."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Činnosť <xliff:g id="ACTIVITY">%1$s</xliff:g> (v procese <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovedá."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (v procese <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovedá."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovedá."</string>
- <string name="force_close" msgid="3653416315450806396">"Vynútenie zavretia"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> neodpovedá. Chcete ju ukončiť?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovedá. "\n\n"Chcete ho ukončiť?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Prehľad"</string>
<string name="wait" msgid="7147118217226317732">"Čakajte"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikácia bola presmerov."</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,12 +941,12 @@
<item quantity="one" msgid="1634101450343277345">"K dispozícii je verejná sieť Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"K dispozícii sú verejné siete Wi-Fi"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Sieť Wi-Fi bola zakázaná"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Sieť Wi-Fi bola dočasne zakázaná z dôvodu zlého pripojenia."</string>
- <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Priame pripojenie siete Wi-Fi"</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nepodarilo sa pripojiť k sieti Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"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 z adresy <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ak chcete žiadosť prijať, kliknite na tlačidlo OK."</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_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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilná sieť bude k dispozícii až keď vymeníte kartu SIM."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Chyba operácie na rozhraní USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Chyba operácie na rozhraní USB"</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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Vymazanie ukladacieho priestoru USB zlyhalo."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Vymazanie karty SD zlyhalo."</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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vybrať účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšenie"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"klepnutím povolíte"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certifikát zabezpečenia"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikát je platný."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 42f69fda7a85..a0677a1de2c8 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Koda funkcije je dokončana."</string>
<string name="fcError" msgid="3327560126588500777">"Težava s povezavo ali neveljavna koda funkcije."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"V redu"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Na spletni strani je napaka."</string>
+ <string name="httpError" msgid="6603022914760066338">"Napaka v omrežju."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL-ja ni bilo mogoče najti."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Shema preverjanja pristnosti mesta ni podprta."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Preverjanje pristnosti ni bilo uspešno."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Preverjanje pristnosti s strežnikom proxy ni bilo uspešno."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Povezava s strežnikom ni bila uspešna."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Pri komunikaciji strežnika je prišlo do napake. Poskusite pozneje."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Pri komunikaciji strežnika je prišlo do napake. Poskusite pozneje."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Časovna omejitev za povezavo s strežnikom je potekla."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Na tej strani je preveč preusmeritev strežnika."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol ni podprt."</string>
@@ -195,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Dovoljuje lastniku, da se poveže z vmesnikom načina vnosa najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"poveži z besedilno storitvijo"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Dovoljuje, da se lastnik poveže z vmesnikom besedilne storitve najvišje ravni (npr. SpellCheckerService). Tega nikoli ni treba uporabiti za navadne programe."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"povezava s storitvijo navideznega zasebnega omrežja"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Lastniku omogoča povezovanje z vmesnikom storitve navideznega zasebnega omrežja najvišje ravni. Ne uporabljajte za navadne programe."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezovanje z ozadjem"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Dovoljuje, da se lastnik poveže z vmesnikom ozadja najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"poveži s storitvijo pripomočka"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"branje podatkov profila"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"pisanje podatkov o profilu"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Programu omogoča spreminjanje podatkov o osebnem profilu. Zlonamerni programi lahko to izkoristijo za brisanje ali spreminjanje podatkov o profilu."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"branje koledarskih dogodkov"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Programu omogoča branje vseh koledarskih vnosov, shranjenih v tabličnem računalniku. Zlonamerni programi lahko s tem dovoljenjem pošljejo vnose drugim uporabnikom."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Programu dovoljuje branje vseh dogodkov koledarja, shranjenih v telefonu. Zlonamerni programi lahko to uporabijo za pošiljanje dogodkov koledarja drugim osebam."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"dodajanje ali spreminjanje koledarskih dogodkov in pošiljanje e-pošte gostom"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Dovoljuje, da program doda ali spremeni dogodke v koledarju, s čimer bodo gostom morda poslana e-poštna sporočila. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje koledarskih dogodkov ali pošiljanje e-pošte gostom."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"dodajanje ali spreminjanje dogodkov v koledarju in pošiljanje e-pošte gostom brez vedenja lastnikov"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Programu dovoli, da kot lastnik koledarja pošilja vabila za dogodke ter dodaja, odstranjuje in spreminja dogodke, ki jih je mogoče spreminjati v napravi, vključno z dogodki prijateljev in sodelavcev. Zlonamerni program lahko s takim dovoljenjem pošilja vsiljeno pošto, za katero je videti, da jo pošiljajo lastniki koledarjev, spreminja dogodke brez vedenja lastnkov ali dodaja lažne dogodke."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"simulirani viri lokacije za preverjanje"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Ustvarjanje simuliranih virov lokacije za preverjanje. Zlonamerni programi lahko s tem preglasijo lokacijo in/ali stanje, ki so ga vrnili pravi viri lokacije, kot so GPS ali ponudniki omrežja."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"dostopanje do ukazov ponudnika dodatnih lokacij"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"pisanje nastavitev imena dostopne točke"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Programu dovoljuje spreminjanje nastavitev APN, kot je strežnik proxy in vrata poljubnega APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Programu dovoljuje spreminjanje zgodovine brskalnika ali zaznamkov, shranjenih v telefonu. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje podatkov brskalnika."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"nastavitev alarma budilke"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Programu omogoča nastavitev alarma v nameščeni budilki. Nekatere budilke morda ne bodo uporabile te funkcije."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"dodajanje odzivnika"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Pred 1 mesecem"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Pred več kot 1 mesecem"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Ni elementov za lepljenje"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Izberite dejanje"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Izberite program za napravo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Tega dejanja ne more izvesti noben program."</string>
- <string name="aerr_title" msgid="653922989522758100">"Oprostite."</string>
- <string name="aerr_application" msgid="4683614104336409186">"Program <xliff:g id="APPLICATION">%1$s</xliff:g> (postopek <xliff:g id="PROCESS">%2$s</xliff:g>) se je nepričakovano ustavil. Poskusite znova."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Postopek <xliff:g id="PROCESS">%1$s</xliff:g> se je nepričakovano ustavil. Poskusite znova."</string>
- <string name="anr_title" msgid="3100070910664756057">"Oprostite."</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Dejavnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v programu <xliff:g id="APPLICATION">%2$s</xliff:g>) se ne odziva."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Dejavnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) se ne odziva."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Program <xliff:g id="APPLICATION">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) se ne odziva."</string>
- <string name="anr_process" msgid="1246866008169975783">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> se ne odziva."</string>
- <string name="force_close" msgid="3653416315450806396">"Vsili zapiranje"</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="anr_title" msgid="4351948481459135709"></string>
+ <string name="anr_activity_application" msgid="8339738283149696827">"Program <xliff:g id="APPLICATION">%2$s</xliff:g> se ne odziva."\n\n"Ali ga želite zapreti?"</string>
+ <string name="anr_activity_process" msgid="7018289416670457797">"Dejavnost <xliff:g id="ACTIVITY">%1$s</xliff:g> se ne odziva."\n\n"Ali jo želite zapreti?"</string>
+ <string name="anr_application_process" msgid="7208175830253210526">"Program <xliff:g id="APPLICATION">%1$s</xliff:g> se ne odziva. Ali ga želite zapreti?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> se ne odziva."\n\n"Ali ga želite zapreti?"</string>
+ <string name="force_close" msgid="8346072094521265605">"V redu"</string>
<string name="report" msgid="4060218260984795706">"Poročaj"</string>
<string name="wait" msgid="7147118217226317732">"Čakaj"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Preusmeritev programa"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Odpiranje razpoložljivega brezžičnega omrežja"</item>
<item quantity="other" msgid="7915895323644292768">"Odpiranje razpoložljivih brezžičnih omrežij"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Omrežje Wi-Fi je bilo onemogočeno"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Omrežje Wi-Fi je bilo začasno onemogočeno zaradi slabe povezljivosti."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Z omrežjem Wi-Fi se ni mogoče povezati"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ima slabo internetno povezavo."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Začnite s postopkom Wi-Fi Direct. S tem bo izklopljen postopek odjemalca/dostopne točke Wi-Fi."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Napaka pri zagonu Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Napaka pri zagonu Wi-Fi Direct"</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Zahteva za nastavitev povezave Wi-Fi Direct z naslova <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Če želite sprejeti, kliknite V redu."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Zahteva za nastavitev povezave Wi-Fi Direct z naslova <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Če želite nadaljevati, vnesite PIN."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pred začetkom nastavitve povezave morate PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> vnesti v enakovredno napravo <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mobilno omrežje ne bo na voljo, dokler ne zamenjate kartice SIM."</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_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>
@@ -971,7 +986,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Pri izklopu shrambe USB je prišlo do napake. Preverite, ali ste izpeli gostitelja USB, in poskusite znova."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Vklop shrambe USB"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Če vklopite shrambo USB, bodo nekateri programi, ki jih uporabljate, ustavljeni in morda ne bodo na voljo, dokler je ne izklopite."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"Operacija USB ni uspela"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Operacija USB ni uspela"</string>
<string name="dlg_ok" msgid="7376953167039865701">"V redu"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Povezan kot predstavnostna naprava"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Povezan kot fotoaparat"</string>
@@ -1071,8 +1086,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"Izpenjanje kartice SD ..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"Brisanje pomnilnika USB ..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"Brisanje kartice SD ..."</string>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Brisanje pomnilnika USB ni uspelo."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Brisanje kartice SD ni uspelo."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Brisanje pomnilnika USB ni uspelo."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"Brisanje pomnilnika USB ni uspelo."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"Kartica SD je bila odstranjena, preden je bila izpeta."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"Trenutno poteka preverjanje pomnilnika USB."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"Poteka preverjanje kartice SD."</string>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Izberite račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povečaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmanjšaj"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"potrjeno"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"ni odkljukano"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"izbrano"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tapnite, če želite omogočiti"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Varnostno potrdilo"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"To potrdilo je veljavno."</string>
@@ -1151,4 +1158,6 @@
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Izberite dejavnost"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Skupna raba z ..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Naprava zaklenjena."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index f50ed5011199..d72c15ed34ac 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Кôд функције је извршен."</string>
<string name="fcError" msgid="3327560126588500777">"Проблеми са везом или неважећи кôд функције."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Потврди"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Веб страница садржи грешку."</string>
+ <string name="httpError" msgid="6603022914760066338">"Дошло је до грешке на мрежи."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Није било могуће пронаћи URL адресу."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Шема потврде идентитета сајта није подржана."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Потврда идентитета није успела."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Потврда идентитета преко прокси сервера није успела."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Успостављање везе са сервером није успело."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Покушај комуникације са сервером није успео. Покушајте поново касније."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"Омогућава власнику да се обавеже на интерфејс VPN услуге највишег нивоа. За обичне апликације ово никада не би требало да буде потребно."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"обавезивање на позадину"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Омогућава власнику да се обавеже на интерфејс позадине највишег нивоа. Обичне апликације никада не би требало да је користе."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обавезивање на услугу виџета"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"читање података о профилу"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Омогућава да апликација чита све личне податке о профилу. Злонамерне апликације могу то да искористе да би утврдиле ваш идентитет и послале личне информације другим људима."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"писање података о профилу"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Омогућава да апликација мења личне податке о профилу. Злонамерне апликације могу то да искористе да би избрисале или измениле податке о профилу."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"читање догађаја из календара"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Омогућава апликацији да чита све догађаје из календара сачуване на таблету. Злонамерне апликације то могу да злоупотребе и пошаљу ваше догађаје из календара другим особама."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Омогућава да апликација чита све догађаје из календара сачуване на телефону. Злонамерне апликације могу то да злоупотребе и искористе за слање догађаја из календара другим људима."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"додавање и измена догађаја из календара и слање порука е-поште гостима"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Омогућава да апликација додаје или мења догађаје у календару, услед чега гостима могу да се шаљу поруке е-поште. Злонамерне апликације могу на основу тога да избришу или измене догађаје из календара или да шаљу поруке е-поште гостима."</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_accessMockLocation" msgid="8688334974036823330">"лажни извори локација у сврхе тестирања"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Прави лажне изворе локације у сврхе тестирања. Злонамерне апликације могу то да злоупотребе и искористе да замене локацију и/или статус који пријављују прави извори локације, као што су GPS или добављачи мреже."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"приступ додатним командама добављача локације"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Омогућава да апликација види статус свих мрежа."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"потпуни приступ Интернету"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Омогућава да апликација прави мрежне прикључке."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"уписивање подешавања назива приступне тачке"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Омогућава да апликација мења подешавања назива приступне тачке, као што су прокси и порт било ког назива приступне тачке."</string>
+ <!-- outdated translation 7823599210086622545 --> <string name="permlab_writeApnSettings" msgid="505660159675751896">"уписивање подешавања назива приступне тачке"</string>
+ <!-- outdated translation 7443433457842966680 --> <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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Омогућава да апликација измени историју и обележиваче у прегледачу сачуване на телефону. Злонамерне апликације могу то да злоупотребе и да избришу или измене податке у прегледачу."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"подешавање аларма у будилнику"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Дозвољава да апликација подеси аларм у инсталираној апликацији будилника. Неке апликације будилника можда не примењују ову функцију."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"додавање говорне поште"</string>
+ <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="save_password_message" msgid="767344687139195790">"Желите ли да прегледач запамти ову лозинку?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не сада"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запамти"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"Пре месец дана"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Пре месец дана"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Исеци"</string>
<string name="copy" msgid="2681946229533511987">"Копирај"</string>
<string name="paste" msgid="5629880836805036433">"Налепи"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ништа није копирано"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Замени"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копирај URL адресу"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Изабери текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избор текста"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Избор радње"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Избор апликације за USB уређај"</string>
<string name="noApplications" msgid="1691104391758345586">"Ниједна апликација не може да изврши ову радњу."</string>
- <string name="aerr_title" msgid="653922989522758100">"Жао нам је!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Апликација <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) је неочекивано заустављена. Покушајте поново."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> је неочекивано заустављен. Покушајте поново."</string>
- <string name="anr_title" msgid="3100070910664756057">"Жао нам је!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Нема одзива активности <xliff:g id="ACTIVITY">%1$s</xliff:g> (у апликацији <xliff:g id="APPLICATION">%2$s</xliff:g>)."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Нема одзива активности <xliff:g id="ACTIVITY">%1$s</xliff:g> (у процесу <xliff:g id="PROCESS">%2$s</xliff:g>)."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Нема одзива апликације <xliff:g id="APPLICATION">%1$s</xliff:g> (у процесу <xliff:g id="PROCESS">%2$s</xliff:g>)."</string>
- <string name="anr_process" msgid="1246866008169975783">"Нема одзива процеса <xliff:g id="PROCESS">%1$s</xliff:g>."</string>
- <string name="force_close" msgid="3653416315450806396">"Принудно затвори"</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="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="force_close" msgid="8346072094521265605">"Потврди"</string>
<string name="report" msgid="4060218260984795706">"Пријави"</string>
<string name="wait" msgid="7147118217226317732">"Сачекај"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Апликација је преусмерена"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Јачина звука аларма"</string>
<string name="volume_notification" msgid="2422265656744276715">"Јачина звука за обавештења"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Јачина звука"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Доступна је отворена Wi-Fi мрежа"</item>
<item quantity="other" msgid="7915895323644292768">"Доступне су отворене Wi-Fi мреже"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi мрежа је онемогућена"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi мрежа је привремено онемогућена због лоше везе."</string>
+ <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_failed_message" msgid="6467545523417622335">"Покретање Wi-Fi Direct везе није успело"</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>. Кликните на Потврди да бисте прихватили."</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">"Потребно је да унесете WPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на равноправном уређају <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> да би се наставило подешавање везе"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Мобилна мрежа ће бити недоступна док не замените SIM картицу."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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 складиште, поједине апликације које користите престаће да раде и могу да постану недоступне док га поново не укључите."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"Грешка са USB складиштем"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Брисање USB меморије није успело."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Брисање 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"додирните да бисте омогућили"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Безбедносни сертификат"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Овај сертификат је важећи."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 834828214e2e..38758aea1688 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Funktionskoden är fullständig."</string>
<string name="fcError" msgid="3327560126588500777">"Anslutningsproblem eller ogiltig funktionskod."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Webbsidan innehåller ett fel."</string>
+ <string name="httpError" msgid="6603022914760066338">"Ett nätverksfel har inträffat."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Webbadressen kunde inte hittas."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Webbplatsens autentiseringsmetod stöds inte."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Servern kommunicerade inte. Försök igen senare."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"binda till en metod för indata"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en inmatningsmetod. Ska inte behövas för vanliga program."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"bind till en texttjänst"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Tillåter innehavaren att binda mot den högsta gränsssnittsnivån i en texttjänst (t.ex. SpellCheckerService). Bör aldrig behövas för normala appar."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Tillåter innehavaren att binda mot den högsta gränssnittsnivån i en texttjänst (t.ex. SpellCheckerService). Bör aldrig behövas för normala appar."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind till en VPN-tjänst"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en VPN-tjänst. Ska inte behövas för vanliga appar."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"binda till en bakgrund"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en bakgrund. Ska inte behövas för vanliga appar."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind till en widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"läsa profildata"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"skriva profildata"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"läsa kalenderhändelser"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Tillåter att ett program läser alla händelser i kalendern som har lagrats på pekdatorn. Skadliga program kan använda detta för att skicka dina kalenderuppgifter till andra personer."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Tillåter att ett program läser alla händelser i kalendern som har lagrats på din telefon. Skadliga program kan använda detta för att skicka din kalender till andra personer."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"lägg till och ändra kalenderhändelser och skicka e-post till gäster"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Tillåter att ett program lägger till och ändrar händelser i din kalender, t.ex. genom att skicka e-post till gäster. Skadliga program kan använda detta för att radera eller ändra dina kalenderhändelser och för att skicka e-post till gäster."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"lägga till eller ändra kalenderuppgifter och skicka e-post till gäster utan ägarens vetskap"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Tillåter att en app skickar inbjudningar som kalenderns ägare och att den lägger till, tar bort och ändrar uppgifter som du kan ändra på enheten, inklusive dina vänners eller kollegors uppgifter. Skadliga appar kan använda detta för att skicka skräppost som ser ut att komma från kalenderns ägare, ändra uppgifter utan ägarens vetskap eller lägga till falska uppgifter."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"skenplatser för att testa"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Skapa skenplatser för att testa. Skadliga program kan använda detta för att åsidosätta platsen och/eller statusen som returneras av riktiga platser, till exempel GPS- eller nätverksleverantörer."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"få åtkomst till extra kommandon för platsleverantör"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"skriva inställningar för åtkomstpunktens namn"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Tillåter att ett program ändrar APN-inställningarna, till exempel Proxy och Port för alla APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Tillåter att ett program ändrar webbläsarhistoriken och bokmärkena i din telefon. Skadliga program kan använda detta för att ta bort eller ändra data i webbläsaren."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ställa in alarm i alarmklocka"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Tillåter att programmet ställer in ett alarm i ett installerat alarmprogram. Vissa alarmprogram har inte den här funktionen."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"lägg till röstbrevlåda"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Inget att klistra in"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Välj en åtgärd"</string>
<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="653922989522758100">"Tyvärr!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Processen <xliff:g id="PROCESS">%2$s</xliff:g> för programmet <xliff:g id="APPLICATION">%1$s</xliff:g> stoppades oväntat. Försök igen."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> avslutades oväntat. Försök igen."</string>
- <string name="anr_title" msgid="3100070910664756057">"Tyvärr!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> (i programmet <xliff:g id="APPLICATION">%2$s</xliff:g>) svarar inte."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Aktiviteten <xliff:g id="ACTIVITY">%1$s</xliff:g> (i processen <xliff:g id="PROCESS">%2$s</xliff:g>) svarar inte."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (i processen <xliff:g id="PROCESS">%2$s</xliff:g>) svarar inte."</string>
- <string name="anr_process" msgid="1246866008169975783">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> svarar inte."</string>
- <string name="force_close" msgid="3653416315450806396">"Tvinga stängning"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> svarar inte. Vill du stänga den?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> svarar inte."\n\n"Vill du stänga den?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Rapportera"</string>
<string name="wait" msgid="7147118217226317732">"Vänta"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Programmet omdirigerades"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Öppna Wi-Fi-nätverk är tillgängliga"</item>
<item quantity="other" msgid="7915895323644292768">"Öppna Wi-Fi-nätverk är tillgängliga"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Ett Wi-Fi-nätverk har stängts av"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Ett Wi-Fi-nätverk har stängts av tillfälligt på grund av dålig anslutning."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Det gick inte att ansluta till Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Det gick inte att starta Wi-Fi direkt"</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_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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Det mobila nätverket kommer inte bli tillgängligt förrän du byter SIM-kortet."</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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB-åtgärd misslyckades"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Det gick inte att radera USB-lagring"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Det gick inte att radera SD-kortet."</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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"markerad"</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>
+ <string name="switch_on" msgid="551417728476977311">"på"</string>
+ <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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"knacka lätt om du vill aktivera"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- outdated translation 2182247539226163759 --> <string name="data_usage_limit_body" msgid="4313857592916426843">"knacka lätt 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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Säkerhetscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikatet är giltigt."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 9355e2f7797b..bb3c3047aca7 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -155,8 +155,7 @@
<string name="fcError" msgid="3327560126588500777">"Tatizo la muunganisho au msimbo batili wa kipengele."</string>
<!-- no translation found for httpErrorOk (1191919378083472204) -->
<skip />
- <!-- no translation found for httpError (6603022914760066338) -->
- <skip />
+ <string name="httpError" msgid="6603022914760066338">"Kosa la mtandao limetokea."</string>
<!-- no translation found for httpErrorLookup (4517085806977851374) -->
<skip />
<!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
@@ -167,7 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (5047872902739125260) -->
+ <!-- no translation found for httpErrorIO (4270874999047767599) -->
<skip />
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
@@ -292,6 +291,10 @@
<!-- 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 />
<!-- 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>
@@ -389,6 +392,8 @@
<skip />
<!-- no translation found for permdesc_bindTextService (172508880651909350) -->
<skip />
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"funga kwa huduma ya VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Huruhusu kishikiliaji kufunga kusano cha kiwango cha juu cha huduma ya Vpn. Haipaswi kamwe kuhitajika kwa programu za kawaida."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"funga kwa pazia"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha pazia. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
@@ -467,19 +472,19 @@
<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 (2211941946684590103) -->
+ <!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
- <!-- no translation found for permdesc_readProfile (4732942280141331352) -->
+ <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
<skip />
- <!-- no translation found for permlab_writeProfile (6561668046361989220) -->
+ <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
<skip />
- <!-- no translation found for permdesc_writeProfile (8040643023682531996) -->
+ <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
- <string name="permlab_readCalendar" msgid="6898987798303840534">"soma matukio ya kalenda"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye kompyuta yako ndogo. Programu hasidi zinaweza kutumia hii ili kutuma data yako kwa watu wengine."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kutuma matukio yako ya kalenda kwa watu wengine."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"ongeza au rekebisha matukio ya kalenda na tuma barua pepe kwa wageni"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Inaruhusu programu kwa kuongeza au kubadilisha matukio kwenye kalenda yako, ambayo inaweza kutuma barua pepe kwa wageni. Programu hasidi zinaweza kutumia hii kwa kuzima au kubadilisha matukio ya kalenda kwa kutuma barua pepe kwa wageni."</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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"ongeza au rekebisha matukio ya kalenda na utume barua pepe kwa wageni bila ufahamu wa mmiliki"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Huruhusu programu kutuma mialiko ya tukio kama mmiliki wa kalenda na kuongeza, kuondoa, kubadilisha matukio ambayo unaweza kuyarekebisha kwenye kifaa chako, pamoja na zile za marafiki au marafiki wenza. Programu hasidi yenye kibali hiki inaweza kutuma barua pepe taka ambazo zinaonekana zinatoka kwa mmiliki wa kalenda, kurekebisha matukio bila ufahamu wa mmiliki, au kuongeza matukio laghai."</string>
<!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
<skip />
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Unda vyanzo vya mahali pa jaribio ili kujaribu. Programu mbaya za kompyuta zinaweza kutumia hii ili kuandikiza mahali na/au hali iliyorejeshwa na vyanzo halisi vya mahali kama vile watoa huduma za GPS au Mtandao."</string>
@@ -616,9 +621,9 @@
<!-- 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 (7823599210086622545) -->
+ <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
<skip />
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Huruhusu programu kurekebisha mipangilio ya APN, kama vile Mbadala na Kituo cha APN yoyote."</string>
+ <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Huruhusu programu kurekebisha mipangilio ya APN, kama vile Mbadala na Kituo cha APN yoyote."</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Huruhusu programu kubadilisha hali ya uunganishaji wa mtandao."</string>
@@ -962,12 +967,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Huruhusu programu kurekebisha historia au alamisho za Kivinjari zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya Kivinjari chako."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"weka kengele kwenye saa ya kengele"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Huruhusu programu kuweka kengele kwenye programu iliyosakinishwa ya saa ya kengele. Baadhi ya programu zasaa ya kengele hazingeweza kurekebisha kipengele hiki."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"ongeza barua ya sauti"</string>
+ <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 />
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -992,6 +1003,16 @@
<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 />
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Kabla ya mwezi 1 uliopita"</string>
@@ -1113,9 +1134,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Hakuna cha kubandika"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Badilisha"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
@@ -1152,22 +1171,17 @@
<skip />
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
- <!-- no translation found for aerr_title (653922989522758100) -->
- <skip />
- <string name="aerr_application" msgid="4683614104336409186">"Mchakato wa <xliff:g id="APPLICATION">%1$s</xliff:g> (mchakato<xliff:g id="PROCESS">%2$s</xliff:g>) umekoma bila kutarajiwa. Tafadhali jaribu tena."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> umekoma bila kutarajiwa. Tafadhali jaribu tena."</string>
- <!-- no translation found for anr_title (3100070910664756057) -->
- <skip />
- <!-- no translation found for anr_activity_application (3538242413112507636) -->
- <skip />
- <!-- no translation found for anr_activity_process (5420826626009561014) -->
- <skip />
- <!-- no translation found for anr_application_process (4185842666452210193) -->
- <skip />
- <!-- no translation found for anr_process (1246866008169975783) -->
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <!-- no translation found for aerr_application (932628488013092776) -->
<skip />
- <!-- no translation found for force_close (3653416315450806396) -->
+ <!-- no translation found for aerr_process (4507058997035697579) -->
<skip />
+ <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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> haijibu. Je, ungependa kuifunga?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Mchakato <xliff:g id="PROCESS">%1$s</xliff:g> haijibu. "\n" "\n" Je, ungependa kuifunga?"</string>
+ <string name="force_close" msgid="8346072094521265605">"Sawa"</string>
<string name="report" msgid="4060218260984795706">"Ripoti"</string>
<!-- no translation found for wait (7147118217226317732) -->
<skip />
@@ -1205,18 +1219,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Sauti ya notisi"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1234,15 +1241,13 @@
<item quantity="one" msgid="1634101450343277345">"Fungua mtandao wa Wi-Fi unaopatikana"</item>
<item quantity="other" msgid="7915895323644292768">"Fungua mitandao ya Wi-Fi inayopatikana"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Haikuweza kuunganisha kwa Mtandao-Hewa"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"ina muunganisho duni wa tovuti."</string>
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
+ <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
<skip />
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
@@ -1262,7 +1267,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -1303,7 +1308,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Uendeshi wa USB umeshindikana"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Uendeshi wa USB umeshindikana"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Sawa"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1413,8 +1418,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Imeshindwa kufuta hifadhi ya USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Imeshindwa kufuta 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="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>
@@ -1441,22 +1446,14 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"imeangaliwa"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"haijakaguliwa"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"Iliyochaguliwa"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"Haijachaguliwa"</string>
+ <string name="switch_on" msgid="551417728476977311">"Mnamo"</string>
+ <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>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1481,15 +1478,15 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (2182247539226163759) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
@@ -1527,4 +1524,6 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-sw600dp/styles.xml b/core/res/res/values-sw600dp/styles.xml
index 645db13c514f..7dea9b89b500 100644
--- a/core/res/res/values-sw600dp/styles.xml
+++ b/core/res/res/values-sw600dp/styles.xml
@@ -15,20 +15,14 @@
-->
<resources>
- <style name="TextAppearance.Holo.Widget.TabWidget">
- <item name="android:textSize">18sp</item>
- <item name="android:textStyle">normal</item>
- <item name="android:textColor">@android:color/tab_indicator_text</item>
- </style>
-
<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
- <item name="android:textAppearance">@style/TextAppearance.Holo.Widget.TabWidget</item>
<item name="android:tabStripLeft">@null</item>
<item name="android:tabStripRight">@null</item>
<item name="android:tabStripEnabled">false</item>
- <item name="android:divider">@null</item>
- <item name="android:gravity">left|center_vertical</item>
- <item name="android:tabLayout">@android:layout/tab_indicator_holo_large</item>
+ <item name="android:divider">?android:attr/dividerVertical</item>
+ <item name="android:showDividers">middle</item>
+ <item name="android:dividerPadding">8dip</item>
+ <item name="android:measureWithLargestChild">true</item>
+ <item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
</style>
</resources>
-
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index e9e289234e89..48c42a15d3fe 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"รหัสคุณลักษณะเสร็จสมบูรณ์"</string>
<string name="fcError" msgid="3327560126588500777">"พบปัญหาในการเชื่อมต่อหรือรหัสคุณลักษณะไม่ถูกต้อง"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"ตกลง"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"หน้าเว็บมีข้อผิดพลาด"</string>
+ <string name="httpError" msgid="6603022914760066338">"เกิดข้อผิดพลาดกับเครือข่าย"</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"ไม่พบ URL"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"สกีมการตรวจสอบสิทธิ์ของไซต์ไม่ได้รับการสนับสนุน"</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"การตรวจสอบสิทธิ์สำเร็จแล้ว"</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"การตรวจสอบสิทธิ์ทางพร็อกซีเซิร์ฟเวอร์ไม่สำเร็จ"</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"เชื่อมต่อไปยังเซิร์ฟเวอร์ไม่สำเร็จ"</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"เซิร์ฟเวอร์สื่อสารล้มเหลว โปรดลองใหม่อีกครั้งในภายหลัง"</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"อนุญาตให้ผู้ถือเชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของวิธีป้อนข้อมูล ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"เชื่อมโยงกับบริการข้อความ"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"อนุญาตให้ผู้ถือเชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของบริการข้อความ (เช่น บริการเครื่องตรวจตัวสะกด) ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</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>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"เชื่อมโยงกับบริการวิดเจ็ต"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"อ่านข้อมูลโปรไฟล์"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลโปรไฟล์ส่วนบุคคลของคุณทั้งหมด ซึ่งอาจทำให้แอปพลิเคชันที่เป็นอันตรายสามารถระบุตัวคุณและส่งข้อมูลส่วนบุคคลของคุณให้กับบุคคลอื่นได้"</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"เขียนข้อมูลโปรไฟล์"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลโปรไฟล์ส่วนบุคคลของคุณ ซึ่งอาจทำให้แอปพลิเคชันที่เป็นอันตรายสามารถลบหรือแก้ไขข้อมูลโปรไฟล์ของคุณได้"</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"อ่านกิจกรรมบนปฏิทิน"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมในปฏิทินทั้งหมดที่จัดเก็บอยู่บนแท็บเล็ตของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ส่งกิจกรรมในปฏิทินของคุณให้แก่ผู้อื่นได้"</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมบนปฏิทินทั้งหมดที่จัดเก็บบนโทรศัพท์ของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ส่งกิจกรรมบนปฏิทินไปหาผู้อื่นได้"</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"เพิ่มหรือแก้ไขกิจกรรมบนปฏิทินและส่งอีเมลไปที่แขก"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"อนุญาตให้แอปพลิเคชันเพิ่มหรือเปลี่ยนกิจกรรมบนปฏิทิน ซึ่งอาจมีการส่งอีเมลไปหาแขก แอปพลิเคชันที่เป็นอันตรายสามารถใช้วิธีนี้เพื่อลบหรือแก้ไขกิจกรรมบนปฏิทินหรือส่งอีเมลไปหาแขกได้"</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_accessMockLocation" msgid="8688334974036823330">"จำลองที่มาของตำแหน่งเพื่อทดสอบ"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"สร้างที่มาของตำแหน่งจำลองเพื่อทดสอบ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้เขียนทับตำแหน่งและ/หรือสถานะที่ที่ส่งคืนมาจากที่มาของตำแหน่งจริง เช่น GPS หรือผู้ให้บริการเครือข่าย"</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"เข้าถึงคำสั่งของโปรแกรมแจ้งตำแหน่งพิเศษ"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"อนุญาตให้แอปพลิเคชันดูสถานะของเครือข่ายทั้งหมด"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"การเข้าถึงอินเทอร์เน็ตเต็มรูปแบบ"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"อนุญาตให้แอปพลิเคชันสร้างซ็อคเก็ตเครือข่าย"</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"เขียนการตั้งค่าจุดเข้าใช้งาน"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"อนุญาตให้แอปพลิเคชันแก้ไขการตั้งค่า APN เช่น พร็อกซีและพอร์ตของ APN"</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_changeNetworkState" msgid="958884291454327309">"เปลี่ยนการเชื่อมต่อเครือข่าย"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"อนุญาตให้แอปพลิเคชันเปลี่ยนสถานะการเชื่อมต่อเครือข่าย"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"เปลี่ยนการเชื่อมต่อที่ปล่อยสัญญาณไว้"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"อนุญาตให้แอปพลิเคชันแก้ไขประวัติหรือบุ๊กมาร์กของเบราว์เซอร์ที่จัดเก็บบนโทรศัพท์ของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ลบหรือแก้ไขข้อมูลเบราว์เซอร์ของคุณได้"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ตั้งเวลาปลุกในนาฬิกาปลุก"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"อนุญาตให้แอปพลิเคชันนี้ตั้งเวลาปลุกในแอปพลิเคชันนาฬิกาปลุกที่ติดตั้งไว้ แอปพลิเคชันนาฬิกาปลุกบางประเภทอาจไม่ใช้คุณลักษณะนี้"</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"เพิ่มข้อวามเสียง"</string>
+ <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="save_password_message" msgid="767344687139195790">"คุณต้องการให้เบราว์เซอร์จำรหัสผ่านนี้หรือไม่"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"ยังไม่ใช้งานขณะนี้"</string>
<string name="save_password_remember" msgid="6491879678996749466">"จำไว้"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 เดือนที่ผ่านมา"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ก่อน 1 เดือนที่แล้ว"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"ตัด"</string>
<string name="copy" msgid="2681946229533511987">"คัดลอก"</string>
<string name="paste" msgid="5629880836805036433">"วาง"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"ไม่มีสิ่งที่จะวาง"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"แทนที่"</string>
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"การเลือกข้อความ"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"เลือกการทำงาน"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"เลือกแอปพลิเคชันสำหรับอุปกรณ์ USB"</string>
<string name="noApplications" msgid="1691104391758345586">"ไม่มีแอปพลิเคชันใดทำงานนี้ได้"</string>
- <string name="aerr_title" msgid="653922989522758100">"ขออภัย!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"แอปพลิเคชัน <xliff:g id="APPLICATION">%1$s</xliff:g> (กระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g> หยุดทำงานโดยไม่คาดหมาย โปรดลองอีกครั้ง"</string>
- <string name="aerr_process" msgid="1551785535966089511">"กระบวนการ<xliff:g id="PROCESS">%1$s</xliff:g>หยุดทำงานโดยไม่ได้คาดไว้ โปรดลองอีกครั้ง"</string>
- <string name="anr_title" msgid="3100070910664756057">"ขออภัย!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"กิจกรรม <xliff:g id="ACTIVITY">%1$s</xliff:g> (ในแอปพลิเคชัน <xliff:g id="APPLICATION">%2$s</xliff:g>) ไม่ตอบสนอง"</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"กิจกรรม <xliff:g id="ACTIVITY">%1$s</xliff:g> (ในกระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g>) ไม่ตอบสนอง"</string>
- <string name="anr_application_process" msgid="4185842666452210193">"แอปพลิเคชัน <xliff:g id="APPLICATION">%1$s</xliff:g> (ในกระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g>) ไม่ตอบสนอง"</string>
- <string name="anr_process" msgid="1246866008169975783">"กระบวนการ <xliff:g id="PROCESS">%1$s</xliff:g> ไม่ตอบสนอง"</string>
- <string name="force_close" msgid="3653416315450806396">"บังคับปิด"</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="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="force_close" msgid="8346072094521265605">"ตกลง"</string>
<string name="report" msgid="4060218260984795706">"รายงาน"</string>
<string name="wait" msgid="7147118217226317732">"รอ"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"เปลี่ยนเส้นทางแอปพลิเคชัน"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"ระดับเสียงปลุก"</string>
<string name="volume_notification" msgid="2422265656744276715">"ระดับเสียงของการแจ้งเตือน"</string>
<string name="volume_unknown" msgid="1400219669770445902">"ระดับเสียง"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"เปิดเครือข่าย Wi-Fi ที่ใช้งานได้"</item>
<item quantity="other" msgid="7915895323644292768">"เปิดเครือข่าย Wi-Fi ที่ใช้งานได้"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"เครือข่าย Wi-Fi ถูกปิดใช้งาน"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"เครือข่าย Wi-Fi ถูกปิดใช้งานชั่วคราวเนื่องจากปัญหาการเชื่อมต่อ"</string>
+ <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_failed_message" msgid="6467545523417622335">"ไม่สามารถเริ่ม Wi-Fi Direct ได้"</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> คลิก \"ตกลง\" เพื่อยอมรับ"</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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"ไม่สามารถใช้เครือข่ายมือถือได้จนกว่าคุณจะเปลี่ยนซิมการ์ด"</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"การปฏิบัติงานของ USB ล้มเหลว"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"ลบที่เก็บข้อมูล USB ไม่สำเร็จ"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"ลบการ์ด 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"แตะเพื่อเปิดใช้งาน"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"ใบรับรองความปลอดภัย"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"ใบรับรองนี้ใช้งานได้"</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 40f599bd95f2..7e2cf21bd869 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Kumpleto na ang code ng tampok."</string>
<string name="fcError" msgid="3327560126588500777">"Problema sa koneksyon o di-wastong code ng tampok."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Naglalaman ng error ang web page."</string>
+ <string name="httpError" msgid="6603022914760066338">"Naganap ang isang error sa network."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Hindi makita ang URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Hindi suportado ang scheme na pagpapatotoo ng site."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Nabigong makipag-ugnay ang server. Subukang muli sa ibang pagkakataon."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Nabigong makipag-ugnay ang 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,6 +195,10 @@
<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_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>
@@ -263,7 +267,9 @@
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"sumailalim sa isang pamamaraan ng pag-input"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Pinapayagan ang holder na sumailalim sa nangungunang antas na interface ng pamamaraan ng pag-input. Hindi dapat kailanmang kailanganin para sa mga normal na application."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"sumailalim sa serbisyo ng teksto"</string>
- <string name="permdesc_bindTextService" msgid="172508880651909350">"Binibigyang-daan ang may-ari upang sumailalim sa interface sa nangungunang antas(hal. SpellCheckerService). Hindi dapat kailanman kakailanganin para sa mga normal na application."</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Binibigyang-daan ang may-ari na sumailalim sa nangungunang antas na interface (hal. SpellCheckerService). Hindi dapat kailanganin kailanman para sa mga normal na application."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"sumailalim sa isang serbisyo ng VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Binibigyang-daan ang may-ari na isailalim sa nangungunang interface ng serbisyo ng VPN. Hindi kailanman dapat na kailanganin para sa normal na mga application."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sumailalim sa wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Pinapayagan ang holder na sumailalim sa interface na nasa nangungunang antas ng wallpaper. Hindi kailanman dapat na kailanganin para sa mga normal na application."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"itali sa serbisyo ng widget"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"basahin ang data ng profile"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"magsulat ng data ng profile"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"basahin ang mga kaganapan sa kalendaryo"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Pinapayagan ang application na basahin ang lahat ng mga kaganapan sa kalendaryo na nakaimbak sa iyong tablet. Maaari itong gamitin ng mga nakapanghahamak na application upang ipadala ang iyong mga kaganapan sa kalendaryo sa mga ibang tao."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Pinapayagan ang isang application na basahin ang lahat ng mga kaganapan sa kalendaryong nakaimbak sa iyong telepono. Magagamit ito ng mga nakakahamak na application upang ipadala ang iyong mga kaganapan sa kalendaryo sa ibang tao."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"magdagdag o baguhin ang mga kaganapan sa kalendaryo at magpadala ng email sa mga bisita"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Pinapayagan ang isang application na magdagdag o magbago ng mga kaganapan sa iyong kalendaryo, na maaaring magpadala ng email sa mga bisita. Magagamit ito ng mga nakakahamak na application upang burahin o baguhin ang iyong mga kaganapan sa kalendaryo o magpadala ng email sa mga bisita."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"magdagdag o magbago ng mga kaganapan sa kalendaryo at magpadala ng email sa mga bisita nang hindi nalalaman ng mga may-ari"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Pinapayagan ang isang application na magpadala ng mga imbitasyon sa kaganapan bilang may-ari ng kalendaryo at magdagdag, mag-alis, magbago ng mga kaganapan na maaari mong baguhin sa iyong device, kasama ang nasa mga kaibigan o katrabaho. Ang isang nakapanghahamak na application na may ganitong pahintulot ay makakapagpadala ng mga spam na email na lumilitaw na mula sa mga may-ari ng kalendaryo, magbago ng mga kaganapan nang hindi alam ng mga may-ari, o magdagdag ng mga pekeng kaganapan."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"gayahin ang mga pinagmumulan ng lokasyon para sa pagsusuri"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Lumikha ng mga kunwaring pinagmumulan ng lokasyon para sa pagsubok. Magagamit ito ng mga nakakahamak na application upang i-override ang lokasyon at/o katayuang ibinalik ng mga tunay na pinagmumulan ng lokasyon gaya ng GPS o mga Network provider."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"i-access ang mga dagdag na command ng provider ng lokasyon"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"isulat ang mga setting ng Pangalan ng Lugar ng Access"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Pinapayagan ang isang application na baguhin ang mga setting ng APN, gaya ng Proxy at Port ng anumang APN."</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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Pinapayagan ang isang application na baguhin ang kasaysayan o mga bookmark ng Browser na nakaimbak sa iyong telepono. Magagamit ito ng mga nakakahamak na application upang burahin o baguhin ang iyong data ng Browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"itakda ang alarm sa alarm clock"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Pinapayagan ang application na magtakda ng alarm sa isang naka-install na application ng alarm clock. Maaaring hindi ipatupad ng ilang application ng alarm clock ang tampok na ito."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"magdagdag ng voicemail"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Walang ipe-paste"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Pumili ng pagkilos"</string>
<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="653922989522758100">"Paumanhin!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Hindi inaasahang humito ang <xliff:g id="APPLICATION">%1$s</xliff:g> (proseso <xliff:g id="PROCESS">%2$s</xliff:g>) ng application. Pakisubukang muli."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Hindi inaasahang tumigil ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g>. Pakisubukang muli."</string>
- <string name="anr_title" msgid="3100070910664756057">"Paumanhin!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Hindi tumutugon ang aktibidad na <xliff:g id="ACTIVITY">%1$s</xliff:g> (sa application na <xliff:g id="APPLICATION">%2$s</xliff:g>)."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Hindi tumutugon ang aktibidad na <xliff:g id="ACTIVITY">%1$s</xliff:g> (pinoproseso <xliff:g id="PROCESS">%2$s</xliff:g>)."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Hindi tumutugon ang aktibidad na <xliff:g id="APPLICATION">%1$s</xliff:g> (nasa proseso <xliff:g id="PROCESS">%2$s</xliff:g>)."</string>
- <string name="anr_process" msgid="1246866008169975783">"Hindi tumutugon ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g>."</string>
- <string name="force_close" msgid="3653416315450806396">"Puwersahang pagsara"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"Hindi tumutugon ang <xliff:g id="APPLICATION">%1$s</xliff:g>. Gusto mo ba itong isara?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Hindi tumutugon ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g>."\n\n"Gusto mo ba itong isara?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Ulat"</string>
<string name="wait" msgid="7147118217226317732">"Maghintay"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Ni-redirect application"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"Available ang bukas na Wi-Fi network"</item>
<item quantity="other" msgid="7915895323644292768">"Buksan ang mga available na Wi-Fi network"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Hindi pinagana ang isang Wi-Fi network"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Pansamantalang hindi pinagana ang Wi-Fi network dahil sa hindi mahusay na connectivity."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Hindi makakonekta sa Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nabigong simulan ang Wi-Fi Direct"</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Nabigong simulan 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 ng <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 WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sa peer device <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para magpatuloy ang setup ng koneksyon"</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>
<string name="select_character" msgid="3365550120617701745">"Magpasok ng character"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Hindi kilalang application"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Nagpapadala ng mga SMS na mensahe"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Hindi magiging available ang mobile network hanggang palitan mo 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_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>
@@ -971,12 +986,12 @@
<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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Nabigo ang pagpapatakbo ng USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Nabigo ang pagpapatakbo ng USB"</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>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Nakakonekta bilang isang installer"</string>
- <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Nakakonekta sa isang USB accessory"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Nakakonekta sa isang accessory ng USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"I-touch para sa mga ibang pagpipilian sa USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"I-format USB storage"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"I-format ang SD card"</string>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Nabigong burahin ang imbakan na USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Nabigong burahin 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="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>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pumili ng account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Taasan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Babaan"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"tapikin upang paganahin"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<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>
@@ -1149,6 +1156,8 @@
<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 kay..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Ibahagi sa..."</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Naka-lock ang device."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 0c1601590838..bff19cf6409f 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Özellik kodu tamamlandı."</string>
<string name="fcError" msgid="3327560126588500777">"Bağlantı sorunu veya geçersiz özellik kodu."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"Tamam"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Web sayfası hata içeriyor."</string>
+ <string name="httpError" msgid="6603022914760066338">"Bir ağ hatası oluştu."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"URL bulunamadı."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Site kimlik doğrulaması şeması desteklenmiyor."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Kimlik doğrulanamadı."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Proxy sunucusu üzerinden kimlik doğrulanamadı."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Sunucu ile bağlantı kurulamadı."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Sunucu iletişim kuramadı. Daha sonra yeniden deneyin."</string>
+ <!-- outdated translation 5047872902739125260 --> <string name="httpErrorIO" msgid="4270874999047767599">"Sunucu iletişim kuramadı. Daha sonra yeniden deneyin."</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"Sunucuya bağlanma işlemi zaman aşımına uğradı."</string>
<string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Sayfada çok fazla sunucu yeniden yönlendirmesi bulunuyor."</string>
<string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol desteklenmiyor."</string>
@@ -195,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Tutucunun bir giriş yönteminin en üst düzey arayüzüne bağlanmasına izin verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"kısa mesaj hizmetine bağla"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Sahibine, bir metin hizmetinin (ör. SpellCheckerService) en üst düzey arayüzüne bağlama izni verir. Normal uygulamalarda hiçbir zaman gerekmez."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN hizmetine bağlan"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Uygulamaya bir VPN hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bir duvar kağıdına tabi kıl"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Hesap sahibine bir duvar kağıdının en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bir widget hizmetine bağla"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"profil verilerini oku"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"profil verilerini yaz"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"takvim etkinliklerini oku"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Uygulamaya, tabletinizde depolanan takvim etkinliklerinin tümünü okuma izni verir. Kötü amaçlı uygulamalar bunu, takvim etkinliklerinizi başkalarına göndermek için kullanabilir."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Uygulamaların telefonunuzda depolanan takvim etkinliklerinin tümünü okumasına izin verir. Kötü amaçlı uygulamalar bunu, takvim etkinliklerinizi başkalarına göndermek için kullanabilir."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"takvim etkinlikleri ekle veya değiştir ve konuklara e-posta gönder"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Bir uygulamanın takviminize etkinlik ekleyebilmesini veya takviminizdeki etkinlikleri değiştirebilmesini sağlar ve konuklara e-posta gönderebilir. Kötü amaçlı uygulamalar, bunu takvim etkinliklerinizi silmek veya değiştirmek veya konuklara e-posta göndermek 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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"sahibin bilgisi olmadan takvim etkinlikleri ekle veya mevcut etkinlikleri değiştir ve misafirlere e-posta gönder"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Uygulamaya, takvim sahibi gibi etkinlik davetiyeleri gönderme ve cihazınızda değiştirebileceğiniz etkinlikler (özel ve iş arkadaşlarınızınki dahil) ekleme, kaldırma ve değiştirme izni verir. Kötü amaçlı bir uygulama bu izni kullanarak, sahibin bilgisi olmadan takvim sahibinden geliyormuş gibi görünen spam e-postaları gönderebilir ve sahte etkinlikler ekleyebilir."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"test için sahte konum kaynakları"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Test amacıyla sahte konum kaynakları oluşturur. Kötü amaçlı uygulamalar bu işlevi GPS veya Ağ Hizmeti sağlayıcılar gibi gerçek kaynaklardan gelen konum ve/veya durum bilgilerini geçersiz kılmak için kullanabilir."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"ek konum sağlayıcı komutlarına eriş"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"Erişim Noktası Adı ayarlarını yaz"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Uygulamaların herhangi bir APN\'nin Proxy ve Bağlantı Noktası gibi APN ayarlarını değiştirmesine 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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Uygulamaya telefonunuzda depolanan Tarayıcı geçmişini veya favorileri değiştirme izni verir. Kötü amaçlı uygulamalar bunu Tarayıcı verilerinizi silmek veya değiştirmek için kullanabilir."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"çalar saatte alarm ayarla"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Uygulamanın yüklü bir çalar saat uygulamasında bir alarm ayarlamasına izin verir. Bazı çalar saat uygulamaları bu özelliği kullanmayabilir."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"sesli mesaj ekle"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 ay önce"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 ay önce"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Yapştrlck bir şy yok"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"İşlem seç"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"USB cihazı için bir uygulama seçin"</string>
<string name="noApplications" msgid="1691104391758345586">"Hiçbir uygulama bu işlemi yapamaz."</string>
- <string name="aerr_title" msgid="653922989522758100">"Üzgünüz!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) beklenmedik biçimde durdu. Lütfen yeniden deneyin."</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi beklenmedik biçimde durdu. Lütfen yeniden deneyin."</string>
- <string name="anr_title" msgid="3100070910664756057">"Üzgünüz!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="ACTIVITY">%1$s</xliff:g> etkinliği (<xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasında) yanıt vermiyor."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g> etkinliği (<xliff:g id="PROCESS">%2$s</xliff:g> işleminde) yanıt vermiyor."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işleminde) yanıt vermiyor."</string>
- <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi yanıt vermiyor."</string>
- <string name="force_close" msgid="3653416315450806396">"Kapanmaya zorla"</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="anr_title" msgid="4351948481459135709"></string>
+ <string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> yanıt vermiyor."\n\n"Bu uygulamayı kapatmak ister misiniz?"</string>
+ <string name="anr_activity_process" msgid="7018289416670457797">"<xliff:g id="ACTIVITY">%1$s</xliff:g> yanıt vermiyor."\n\n"Bu etkinliği kapatmak ister misiniz?"</string>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> yanıt vermiyor. Bu uygulamayı kapatmak ister misiniz?"</string>
+ <string name="anr_process" msgid="306819947562555821">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi yanıt vermiyor."\n\n"Bu işlemi kapatmak ister misiniz?"</string>
+ <string name="force_close" msgid="8346072094521265605">"Tamam"</string>
<string name="report" msgid="4060218260984795706">"Bildir"</string>
<string name="wait" msgid="7147118217226317732">"Bekle"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Uygulama yönlendirildi"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,13 +941,13 @@
<item quantity="one" msgid="1634101450343277345">"Kullanılabilir kablosuz ağı aç"</item>
<item quantity="other" msgid="7915895323644292768">"Kullanılabilir kablosuz ağları aç"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Kablosuz ağ devre dışı bırakıldı."</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Kötü bağlantı nedeniyle Kablosuz ağ geçici olarak devre dışı bırakıldı."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kablosuz bağlantısı kurulamadı"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"internet bağlantısı zayıf."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Kablosuz Doğrudan Bağlantı"</string>
<string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Kablosuz Doğrudan Bağlantı işlemini başlat. Bu durumda Kablosuz istemci/hotspot işlemi kapatılacak."</string>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kablosuz Doğrudan Bağlantı başlatılamadı"</string>
- <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan Bağlantı kurulum isteği. Kabul etmek için TAMAM\'ı tıklayın."</string>
- <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan Bağlantı kurulumu isteği. Devam etmek için pin girin."</string>
+ <!-- outdated translation 6467545523417622335 --> <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kablosuz Doğrudan bağlantısı başlatılamadı"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan bağlantı kurulumu isteği. Kabul etmek için TAMAM\'ı tıklayın."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan bağlantı kurulumu isteği. Devam etmek için pin girin."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Bağlantı kurulum işleminin devamı için <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> eş cihazında WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> girilmelidir."</string>
<string name="select_character" msgid="3365550120617701745">"Karakter ekle"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Bilinmeyen uygulama"</string>
@@ -941,7 +956,7 @@
<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>
- <string name="sim_removed_message" msgid="2064255102770489459">"SIM kartı değiştirinceye kadar mobil ağ kullanılamayacak."</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_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>
@@ -971,7 +986,7 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB depolama birimini kapatırken bir sorun oluştu. USB ana makinesini kaldırdığınızdan emin olun ve daha sonra tekrar deneyin."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB depolama birimini aç"</string>
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB depolama birimini açarsanız, kullanmakta olduğunuz bazı uygulamalar durur ve USB depolama birimi kapatılıncaya kadar kullanılamayabilir."</string>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB işlemi başarısız oldu"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"USB işlemi başarısız oldu"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Tamam"</string>
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Medya cihazı olarak bağlandı"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kamera olarak bağlandı"</string>
@@ -1071,8 +1086,8 @@
<string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD kartın bağlantısı kesiliyor..."</string>
<string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB dep brm silinyr..."</string>
<string name="progress_erasing" product="default" msgid="2115214724367534095">"SD kart siliniyor..."</string>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB depolama birimi silinemedi."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"SD kart silinemedi."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB depolama birimi silinemedi."</string>
+ <!-- outdated translation 4320339096529911637 --> <string name="format_error" product="default" msgid="7315248696644510935">"USB depolama birimi silinemedi."</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD kart, bağlantısı kesilmeden çıkarıldı."</string>
<string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB depolama birimi şu anda denetleniyor."</string>
<string name="media_checking" product="default" msgid="7334762503904827481">"SD kart şu anda denetleniyor."</string>
@@ -1096,22 +1111,14 @@
<string name="choose_account_label" msgid="4191313562041125787">"Bir hesap seçin"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Artır"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Azalt"</string>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"işaretli"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"işaretlenmedi"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"seçili"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"seçili değil"</string>
+ <string name="switch_on" msgid="551417728476977311">"açık"</string>
+ <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>
<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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"etkinleştirmek içn hafifçe vurun"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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>
+ <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 />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Güvenlik sertifikası"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Bu sertifika geçerli."</string>
@@ -1149,6 +1156,8 @@
<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">"Şununla paylaş..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Şu kişilerle paylaş:"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilitli."</string>
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 41f9cac3d057..8adeb0583194 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Сервісний код виконано."</string>
<string name="fcError" msgid="3327560126588500777">"Пробл. підключення чи недійсний ідентифікатор."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"На веб-сторінці є помилка."</string>
+ <string name="httpError" msgid="6603022914760066338">"Сталася помилка мережі."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Не вдається знайти URL-адресу."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Схема автентифікації сайту не підтримується."</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"Автентифікація не вдалася."</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"Автентифікація через проксі-сервер не вдалася."</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"Не вдалося з\'єднатися із сервером."</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"Не вдалося зв\'язатися із сервером. Спробуйте пізніше."</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби VPN. Ніколи не застосовується для звичайних програм."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"прив\'зати до фон. мал."</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Дозволяє власнику прив\'язувати до інтерфейсу верхнього рівня фон. малюнка. Ніколи не потрібний для звичайних програм."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прив\'язувати до служби віджетів"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"читання даних профілю"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"Дозволяє програмі читати всю особисту інформацію профілю. Шкідливі програми можуть використовувати це для вашої ідентифікації та надсилання особистої інформації іншим людям."</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"записувати дані профілю"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"Дозволяє програмі змінювати особисту інформацію профілю. Шкідливі програми можуть використовувати це для видалення чи зміни даних вашого профілю."</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"читати події календаря"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Дозволяє програмі зчитувати всі події календаря, збережені в пристрої. Шкідливі програми можуть використовувати це для надсилання ваших подій календаря іншим людям."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Дозволяє програмі зчитувати всі події календаря, збережені у вашому телефоні. Шкідливі програми можуть використ-ти це для надсилання подій календаря іншим людям."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"дод. чи змін. події календаря та надсил. ел. листи гостям"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Дозволяє програмі дод. чи змін. події у вашому календарі, який може надсилати ел. листи гостям. Шкідливі прогр. можуть викор. це, щоб видаляти чи змін. події вашого календаря або надсилати ел. листи гостям."</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_accessMockLocation" msgid="8688334974036823330">"фіктивні джер. місцезн. для тестув."</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Створ. фіктивні джерела місцезн. для тестув. Шкідливі прогр. можуть використ. це для заміни місцезн. і/чи статусу, отрим. від дійсних джерел місцезн., таких як GPS або моб. операторів."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"отр. дост. до додат. команд пров. місцезн."</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Дозволяє програмі переглядати стани всіх мереж."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"повний дост. до Інтерн."</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Дозволяє програмі створювати сокети мережі."</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"запис. налашт. імені точки доступу"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Дозволяє програмі змінювати налаштування APN, такі як проксі чи порт будь-якого APN."</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_changeNetworkState" msgid="958884291454327309">"змінюв. підключення до мережі"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Дозволяє програмі змінювати стан підключення до мережі."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Змінити з\'єднання прив\'язки"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Дозволяє програмі змінювати історію чи закладки переглядача, збережені у вашому тел. Шкідливі програми можуть викор. це, щоб видаляти чи змінювати дані переглядача."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"налашт. сигнал у будильн."</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Дозволяє програмі налаштовувати сигнал у встановленій програмі будильника. У деяких програмах будильника ця функція може не застосовуватися."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"додавати голосову пошту"</string>
+ <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="save_password_message" msgid="767344687139195790">"Хочете, щоб переглядач запам\'ятав цей пароль?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Не зараз"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Запам\'ятати"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 міс. тому"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Раніше 1 місяця тому"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"Виріз."</string>
<string name="copy" msgid="2681946229533511987">"Копіюв."</string>
<string name="paste" msgid="5629880836805036433">"Вставити"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Немає що вставити"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Замінити"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копіюв. URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Вибрати текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вибір тексту"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Виберіть дію"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"Виберіть програму для пристрою USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Жодна програма не може виконати цю дію."</string>
- <string name="aerr_title" msgid="653922989522758100">"Помилка!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Програма <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) несподівано зупинилася. Спробуйте ще."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> несподівано зупинився. Спробуйте ще."</string>
- <string name="anr_title" msgid="3100070910664756057">"Помилка!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Дія <xliff:g id="ACTIVITY">%1$s</xliff:g> (у програмі <xliff:g id="APPLICATION">%2$s</xliff:g>) не відповідає."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Дія <xliff:g id="ACTIVITY">%1$s</xliff:g> (у процесі <xliff:g id="PROCESS">%2$s</xliff:g>) не відповідає."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Програма <xliff:g id="APPLICATION">%1$s</xliff:g> (у процесі <xliff:g id="PROCESS">%2$s</xliff:g>) не відповідає."</string>
- <string name="anr_process" msgid="1246866008169975783">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> не відповідає."</string>
- <string name="force_close" msgid="3653416315450806396">"Примус. закр."</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="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="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Повідом."</string>
<string name="wait" msgid="7147118217226317732">"Чекати"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Програму переадресовано"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"Гучн. сповіщ."</string>
<string name="volume_notification" msgid="2422265656744276715">"Гучність сповіщень"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Гучність"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Відкрита Wi-Fi мережа доступна"</item>
<item quantity="other" msgid="7915895323644292768">"Відкриті Wi-Fi мережі доступні"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Мережа Wi-Fi була вимкнена"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Мережа Wi-Fi була тимчасово вимкнена через погане з’єднання."</string>
+ <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_failed_message" msgid="6467545523417622335">"Не вдалося запустити Wi-Fi Direct"</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>. Натисніть ОК, щоб прийняти."</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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Мобільна мережа буде недоступною, поки ви не заміните SIM-карту."</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Помилка операції з USB"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Помилка очищення носія USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Помилка очищення карти 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"торкніться, щоб увімкнути"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертифікат безпеки"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Цей сертифікат дійсний."</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 227b1f6c2a94..30b7aad9877d 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"Mã tính năng đã hoàn tất."</string>
<string name="fcError" msgid="3327560126588500777">"Sự cố kết nối hoặc mã tính năng không hợp lệ."</string>
<string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"Trang Web có lỗi."</string>
+ <string name="httpError" msgid="6603022914760066338">"Đã xảy ra lỗi mạng."</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"Không thể tìm thấy URL."</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Không hỗ trợ lược đồ xác thực trang web."</string>
<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>
- <string name="httpErrorIO" msgid="5047872902739125260">"Máy chủ không thể liên lạc. Vui lòng thử lại sau."</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="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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Cho phép chủ nhân ràng buộc với giao diện cấp cao nhất của phương thức nhập. Không cần thiết cho các ứng dụng thông thường."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"liên kết với dịch vụ văn bản"</string>
<string name="permdesc_bindTextService" msgid="172508880651909350">"Cho phép chủ sở hữu nối kết với giao diện cấp cao nhất của dịch vụ văn bản (ví dụ: SpellCheckerService). Không nên sử dụng cho các ứng dụng thông thường."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"liên kết với dịch vụ VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Cho phép chủ nhân liên kết với giao diện cấp cao nhất của dịch vụ Vpn. Không cần thiết đối với ứng dụng thông thường."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"liên kết với hình nền"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Cho phép chủ nhân ràng buộc với giao diện cấp cao nhất của hình nền. Không cần thiết cho các ứng dụng thông thường."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"liên kết với dịch vụ tiện ích con"</string>
@@ -321,15 +327,15 @@
<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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"đọc dữ liệu tiểu sử"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"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>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"ghi dữ liệu tiểu sử"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"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_readCalendar" msgid="6898987798303840534">"Đọc sự kiện lịch"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"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. Các ứng dụng độc hại có thể sử dụng quyền này để gửi các sự kiện lịch của bạn cho những người khác."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"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. Các ứng dụng độc hại có thể sử dụng quyền này để gửi các sự kiện lịch của bạn cho những người khác."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"thêm hoặc sửa đổi các sự kiện lịch và gửi email cho khách"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Cho phép ứng dụng thêm hoặc thay đổi các sự kiện trên lịch của bạn, có thể gửi email cho khách. Các ứng dụng độc hại có thể sử dụng quyền này để xoá hoặc sửa đổi các sự kiện lịch của bạn hoặc gửi email cho khách."</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_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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"thêm hoặc sửa đổi các sự kiện lịch và gửi email cho khách mà chủ sở hữu không hề biết"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Cho phép ứng dụng gửi lời mời sự kiện với tư cách chủ sở hữu lịch và thêm, xóa, thay đổi các sự kiện mà bạn có thể sửa đổi trên thiết bị của mình, 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ể gửi email spam mà có vẻ đến từ chủ sở hữu lịch, sửa đổi các sự kiện mà chủ sở hữu không hề biết hoặc thêm những sự kiện giả mạo."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"các nguồn vị trí mô phỏng cho thử nghiệm"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Tạo nguồn vị trí mô phỏng cho thử nghiệm. Các ứng dụng độc hại có thể sử dụng quyền này để ghi đè vị trí và/hoặc trạng thái được trả về bởi các nguồn vị trí thực như nhà cung cấp GPS hoặc Mạng."</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"truy cập vào các lệnh của nhà cung cấp vị trí bổ sung"</string>
@@ -439,8 +445,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>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"ghi cài đặt Tên Điểm Truy cập"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"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>
+ <!-- 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_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>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Cho phép ứng dụng sửa đổi lịch sử hoặc dấu trang của Trình duyệt đượ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 Trình duyệt của bạn."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"đặt báo thức trong đồng hồ báo thức"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Cho phép ứng dụng đặt báo thức trong ứng dụng đồng hồ báo thức được cài đặt. Một số ứng dụng đồng hồ báo thức có thể không sử dụng tính năng này."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"thêm thư thoại"</string>
+ <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="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>
@@ -738,6 +750,16 @@
<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="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">
@@ -839,9 +861,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="pasteDisabled" msgid="7259254654641456570">"Không có gì để dán"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"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>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"Chọn tác vụ"</string>
<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="653922989522758100">"Rất tiếc!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"Ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> (quá trình <xliff:g id="PROCESS">%2$s</xliff:g>) đã dừng đột ngột. Vui lòng thử lại."</string>
- <string name="aerr_process" msgid="1551785535966089511">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> đã dừng đột ngột. Vui lòng thử lại."</string>
- <string name="anr_title" msgid="3100070910664756057">"Rất tiếc!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"Hoạt động <xliff:g id="ACTIVITY">%1$s</xliff:g> (trong ứng dụng <xliff:g id="APPLICATION">%2$s</xliff:g>) không có phản hồi."</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"Hoạt động <xliff:g id="ACTIVITY">%1$s</xliff:g> (đang xử lý <xliff:g id="PROCESS">%2$s</xliff:g>) không có phản hồi."</string>
- <string name="anr_application_process" msgid="4185842666452210193">"Ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> (đang xử lý <xliff:g id="PROCESS">%2$s</xliff:g>) không có phản hồi."</string>
- <string name="anr_process" msgid="1246866008169975783">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> không có phản hồi."</string>
- <string name="force_close" msgid="3653416315450806396">"Buộc đóng"</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="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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> không phản hồi. Bạn có muốn đóng ứng dụng này không?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> không phản hồi."\n\n"Bạn có muốn đóng quá trình này không?"</string>
+ <string name="force_close" msgid="8346072094521265605">"OK"</string>
<string name="report" msgid="4060218260984795706">"Báo cáo"</string>
<string name="wait" msgid="7147118217226317732">"Đợi"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Ứng dụng đã được chuyển hướng"</string>
@@ -901,18 +923,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>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <skip />
+ <!-- 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="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>
@@ -926,11 +941,11 @@
<item quantity="one" msgid="1634101450343277345">"Mở mạng Wi-Fi khả dụng"</item>
<item quantity="other" msgid="7915895323644292768">"Mở mạng Wi-Fi khả dụng"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Mạng Wi-Fi đã bị vô hiệu"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Mạng Wi-Fi đã tạm thời bị vô hiệu do kết nối lỗi."</string>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Không thể kết nối với Wi-Fi"</string>
+ <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>
- <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Không thể khởi động Wi-Fi Direct"</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_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>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"Mạng di động sẽ không khả dụng cho đến khi bạn thay thế 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_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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Thao tác USB không thành công"</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_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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Không thể xóa bộ nhớ USB."</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Không thể 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"đã chọn"</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="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>
@@ -1124,14 +1131,14 @@
<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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"chạm để bật"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<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>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-port/dimens.xml b/core/res/res/values-w360dp/dimens.xml
index bf0a3426aff7..0f5d656848e3 100644
--- a/core/res/res/values-port/dimens.xml
+++ b/core/res/res/values-w360dp/dimens.xml
@@ -20,5 +20,5 @@
<!-- The maximum number of action buttons that should be permitted within
an action bar/action mode. This will be used to determine how many
showAsAction="ifRoom" items can fit. "always" items can override this. -->
- <integer name="max_action_buttons">2</integer>
+ <integer name="max_action_buttons">3</integer>
</resources>
diff --git a/core/res/res/values-w500dp/dimens.xml b/core/res/res/values-w500dp/dimens.xml
new file mode 100644
index 000000000000..68841ca6e0a3
--- /dev/null
+++ b/core/res/res/values-w500dp/dimens.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+<resources>
+ <!-- The maximum number of action buttons that should be permitted within
+ an action bar/action mode. This will be used to determine how many
+ showAsAction="ifRoom" items can fit. "always" items can override this. -->
+ <integer name="max_action_buttons">4</integer>
+</resources>
diff --git a/core/res/res/values-w600dp/dimens.xml b/core/res/res/values-w600dp/dimens.xml
new file mode 100644
index 000000000000..83c45b51db8c
--- /dev/null
+++ b/core/res/res/values-w600dp/dimens.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+<resources>
+ <!-- The maximum number of action buttons that should be permitted within
+ an action bar/action mode. This will be used to determine how many
+ showAsAction="ifRoom" items can fit. "always" items can override this. -->
+ <integer name="max_action_buttons">5</integer>
+</resources>
diff --git a/core/res/res/values-w720dp/dimens.xml b/core/res/res/values-w720dp/dimens.xml
index 3d101038941f..c62c3f583562 100644
--- a/core/res/res/values-w720dp/dimens.xml
+++ b/core/res/res/values-w720dp/dimens.xml
@@ -29,4 +29,9 @@
This helps in aligning titles when some items have icons and some don't. When space is
at a premium, we don't pre-allocate any space. -->
<dimen name="preference_icon_minWidth">56dp</dimen>
+
+ <dimen name="preference_screen_header_padding_side">0dip</dimen>
+
+ <integer name="preference_screen_header_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
+ <integer name="preference_fragment_scrollbarStyle">0x0</integer> <!-- insideOverlay -->
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index f7047b324a0a..239ba96e42ba 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"功能代码已拨完。"</string>
<string name="fcError" msgid="3327560126588500777">"出现连接问题或功能代码无效。"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"确定"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"此网页包含错误。"</string>
+ <string name="httpError" msgid="6603022914760066338">"发生网络错误。"</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"找不到该网址。"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"不支持此网站身份验证方案。"</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"身份验证失败。"</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"通过代理服务器进行身份验证失败。"</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"未能连接到服务器。"</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"服务器无法通讯,请稍后重试。"</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_readSms" msgid="4085333708122372256">"读取短信或彩信"</string>
<string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"允许应用程序读取您的平板电脑或 SIM 卡中存储的短信。恶意应用程序可借此读取您的机密信息。"</string>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"允许应用程序读取您的手机或 SIM 卡中存储的短信。恶意应用程序可借此读取您的机密信息。"</string>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"允许手机用户绑定到 VPN 服务的顶级接口。普通应用程序绝不需要此权限。"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"绑定到壁纸"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"允许手机用户绑定到壁纸的顶级界面。应该从不需要将此权限授予普通应用程序。"</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"绑定到窗口小部件服务"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"读取个人资料数据"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"允许应用程序读取您的所有个人资料信息。恶意应用程序可能会利用此权限识别您的身份,并向他人发送您的个人信息。"</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"写入个人资料数据"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"允许应用程序修改您的个人资料信息。恶意应用程序可能会利用此权限清除或修改您的个人资料数据。"</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"读取日历活动"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"允许应用程序读取您平板电脑上存储的所有日历活动。恶意应用程序可借此将您的日历活动发送给其他人。"</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"允许应用程序读取您手机上存储的所有日历活动。恶意应用程序可借此将您的日历活动发送给其他人。"</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"添加或修改日历活动以及向邀请对象发送电子邮件"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"允许应用程序添加或更改日历中的活动,这可能会向邀请对象发送电子邮件。恶意应用程序可能会借此清除或修改您的日历活动,或者向邀请对象发送电子邮件。"</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_accessMockLocation" msgid="8688334974036823330">"使用模拟地点来源进行测试"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"创建模拟地点来源进行测试。恶意应用程序可能利用此选项覆盖由真实地点来源(如 GPS 或网络提供商)传回的地点和/或状态。"</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"访问额外的位置信息提供程序命令"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"允许应用程序查看所有网络的状态。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"完全的互联网访问权限"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"允许应用程序创建网络套接字。"</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"写入“接入点名称”设置"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"允许应用程序修改 APN 设置,例如任何 APN 的代理和端口。"</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_changeNetworkState" msgid="958884291454327309">"更改网络连接性"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"允许应用程序更改网络连接的状态。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"更改绑定的连接"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"允许应用程序修改存储在手机中的浏览器历史记录或书签。恶意应用程序可借此清除或修改浏览器数据。"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"在闹钟中设置警报"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"允许应用程序在安装的闹钟应用程序中设置警报。某些闹钟应用程序没有实现此功能。"</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"添加语音邮件"</string>
+ <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="save_password_message" msgid="767344687139195790">"是否希望浏览器记住此密码?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"暂不保存"</string>
<string name="save_password_remember" msgid="6491879678996749466">"记住"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 个月前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 个月前"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"剪切"</string>
<string name="copy" msgid="2681946229533511987">"复制"</string>
<string name="paste" msgid="5629880836805036433">"粘贴"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"剪贴板无内容"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"替换"</string>
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"选择一项操作"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"选择适用于 USB 设备的应用程序"</string>
<string name="noApplications" msgid="1691104391758345586">"没有应用程序可执行此操作。"</string>
- <string name="aerr_title" msgid="653922989522758100">"很抱歉!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"应用程序 <xliff:g id="APPLICATION">%1$s</xliff:g>(进程:<xliff:g id="PROCESS">%2$s</xliff:g>)意外停止,请重试。"</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> 进程意外停止,请重试。"</string>
- <string name="anr_title" msgid="3100070910664756057">"很抱歉!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"“<xliff:g id="ACTIVITY">%1$s</xliff:g>”活动(在“<xliff:g id="APPLICATION">%2$s</xliff:g>”应用程序中)无响应。"</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"“<xliff:g id="ACTIVITY">%1$s</xliff:g>”活动(在“<xliff:g id="PROCESS">%2$s</xliff:g>”进程中)无响应。"</string>
- <string name="anr_application_process" msgid="4185842666452210193">"“<xliff:g id="APPLICATION">%1$s</xliff:g>”应用程序(在“<xliff:g id="PROCESS">%2$s</xliff:g>”进程中)无响应。"</string>
- <string name="anr_process" msgid="1246866008169975783">"“<xliff:g id="PROCESS">%1$s</xliff:g>”进程无响应。"</string>
- <string name="force_close" msgid="3653416315450806396">"强行关闭"</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="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="force_close" msgid="8346072094521265605">"确定"</string>
<string name="report" msgid="4060218260984795706">"报告"</string>
<string name="wait" msgid="7147118217226317732">"等待"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"应用程序已重定向"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"闹钟音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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="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>
@@ -926,14 +941,14 @@
<item quantity="one" msgid="1634101450343277345">"打开可用的 Wi-Fi 网络"</item>
<item quantity="other" msgid="7915895323644292768">"打开可用的 Wi-Fi 网络"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"某个 Wi-Fi 网络已被停用"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"某个 Wi-Fi 网络由于连接效果较差,已暂时停用 。"</string>
+ <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_failed_message" msgid="6467545523417622335">"无法启动 Wi-Fi Direct"</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>
- <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"必须在对等设备 <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> 上输入 WPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>,才能继续进行连接设置"</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"必须在对端设备 <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> 上输入 WPS PIN“<xliff:g id="P2P_WPS_PIN">%1$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">"正在发送短信"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"在替换 SIM 卡前,您将无法访问移动网络。"</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,7 +986,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB 操作失败"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"USB 存储设备格式化失败。"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"点按即可启用"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"安全证书"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"该证书有效。"</string>
@@ -1149,6 +1156,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="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-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index c0ca37d1c4ff..e07c2939ff65 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -107,13 +107,13 @@
<string name="fcComplete" msgid="3118848230966886575">"功能碼輸入完成。"</string>
<string name="fcError" msgid="3327560126588500777">"連線發生問題或功能碼無效。"</string>
<string name="httpErrorOk" msgid="1191919378083472204">"確定"</string>
- <!-- outdated translation 2567300624552921790 --> <string name="httpError" msgid="6603022914760066338">"網頁內容錯誤。"</string>
+ <string name="httpError" msgid="6603022914760066338">"發生網路錯誤。"</string>
<string name="httpErrorLookup" msgid="4517085806977851374">"找不到網址。"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"不支援此網站驗證機制。"</string>
<string name="httpErrorAuth" msgid="7293960746955020542">"驗證失敗。"</string>
<string name="httpErrorProxyAuth" msgid="1788207010559081331">"透過 proxy 伺服器驗證失敗。"</string>
<string name="httpErrorConnect" msgid="7623096283505770433">"連線到伺服器失敗。"</string>
- <string name="httpErrorIO" msgid="5047872902739125260">"無法與伺服器溝通,請稍後再試一次 。"</string>
+ <!-- outdated translation 5047872902739125260 --> <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,6 +195,10 @@
<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_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>
@@ -264,6 +268,8 @@
<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="permdesc_bindVpnService" msgid="6011554199384584151">"允許應用程式繫結至 VPN 服務的頂層介面,一般應用程式不需使用這個選項。"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"連結至桌布"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"允許擁有人連結至桌布的最頂層介面,一般應用程式不需使用此選項。"</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"繫結至小工具服務"</string>
@@ -321,15 +327,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>
- <string name="permlab_readProfile" msgid="2211941946684590103">"讀取個人資料"</string>
- <string name="permdesc_readProfile" product="default" msgid="4732942280141331352">"允許應用程式讀取您的所有個人資訊。惡意應用程式可能會藉此識別您的身分,並將您的個人資訊傳送給其他人。"</string>
- <string name="permlab_writeProfile" msgid="6561668046361989220">"寫入個人資料"</string>
- <string name="permdesc_writeProfile" product="default" msgid="8040643023682531996">"允許應用程式修改您的個人資訊。惡意應用程式可能會藉此清除或修改您的個人資料。"</string>
- <string name="permlab_readCalendar" msgid="6898987798303840534">"讀取日曆活動"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"允許應用程式讀取平板電腦上儲存的所有日曆活動。請注意,惡意應用程式可能會利用這項功能將您的日曆活動傳送給他人。"</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"允許應用程式讀取手機上所有日曆資料。請注意,惡意應用程式可能會利用這項功能將您的日曆活動傳送給他人。"</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"新增或修改日曆活動,並傳送電子郵件給他人"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"允許應用程式在您的日曆上新增或變更活動,此時,應用程式可能會傳送電子郵件給他人。不過,若允許的是惡意應用程式,日曆活動可能會因此遭到刪除或竄改,惡意應用程式也可能傳送電子郵件騷擾他人。"</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_accessMockLocation" msgid="8688334974036823330">"模擬位置來源以供測試"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"建立模擬位置來源以供測試。請注意:惡意程式可能利用此功能覆寫 GPS 或電信業者傳回的位置及/或狀態。"</string>
<string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"接收額外的位置提供者指令"</string>
@@ -439,8 +445,8 @@
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"允許應用程式檢視網路狀態。"</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"網際網路完整存取"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"允許應用程式建立網路設定。"</string>
- <string name="permlab_writeApnSettings" msgid="7823599210086622545">"輸入存取點名稱設定"</string>
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"允許應用程式修改 APN 設定,例如:Proxy 及 APN 的連接埠。"</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_changeNetworkState" msgid="958884291454327309">"變更網路連線"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"允許應用程式變更網路連線狀態。"</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"變更網路共用設定"</string>
@@ -720,12 +726,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"允許應用程式修改儲存在電話上的瀏覽記錄或書籤。請注意:惡意應用程式可能會使用此選項來清除或修改您瀏覽器的資料。"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"在鬧鐘應用程式中設定鬧鈴"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"允許應用程式在安裝的鬧鐘應用程式中設定鬧鐘,某些鬧鐘應用程式可能無法執行這項功能。"</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"新增語音留言"</string>
+ <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="save_password_message" msgid="767344687139195790">"是否記住此密碼?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"現在不要"</string>
<string name="save_password_remember" msgid="6491879678996749466">"記住"</string>
@@ -738,6 +750,16 @@
<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="oneMonthDurationPast" msgid="7396384508953779925">"1 個月以前"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 個月前"</string>
<plurals name="num_seconds_ago">
@@ -839,9 +861,7 @@
<string name="cut" msgid="3092569408438626261">"剪下"</string>
<string name="copy" msgid="2681946229533511987">"複製"</string>
<string name="paste" msgid="5629880836805036433">"貼上"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"沒有可貼上的內容"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"取代"</string>
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"選取文字"</string>
@@ -864,15 +884,17 @@
<string name="chooseActivity" msgid="1009246475582238425">"選取一項操作"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"選取要以 USB 裝置存取的應用程式"</string>
<string name="noApplications" msgid="1691104391758345586">"沒有應用程式可執行此項操作。"</string>
- <string name="aerr_title" msgid="653922989522758100">"很抱歉!"</string>
- <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> 應用程式 (程序:<xliff:g id="PROCESS">%2$s</xliff:g>) 異常終止。請再試一次。"</string>
- <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> 異常終止。請再試一次。"</string>
- <string name="anr_title" msgid="3100070910664756057">"很抱歉!"</string>
- <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (應用程式:<xliff:g id="APPLICATION">%2$s</xliff:g>) 無回應。"</string>
- <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (程序:<xliff:g id="PROCESS">%2$s</xliff:g>) 無回應。"</string>
- <string name="anr_application_process" msgid="4185842666452210193">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (程序:<xliff:g id="PROCESS">%2$s</xliff:g>) 無回應。"</string>
- <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g> 程序無回應。"</string>
- <string name="force_close" msgid="3653416315450806396">"強制關閉"</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="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="force_close" msgid="8346072094521265605">"確定"</string>
<string name="report" msgid="4060218260984795706">"回報"</string>
<string name="wait" msgid="7147118217226317732">"等待"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"應用程式已重新導向"</string>
@@ -901,18 +923,11 @@
<string name="volume_alarm" msgid="1985191616042689100">"鬧鐘音量"</string>
<string name="volume_notification" msgid="2422265656744276715">"通知音量"</string>
<string name="volume_unknown" msgid="1400219669770445902">"音量"</string>
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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="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>
@@ -926,12 +941,12 @@
<item quantity="one" msgid="1634101450343277345">"開啟可用 Wi-Fi 網路"</item>
<item quantity="other" msgid="7915895323644292768">"開啟可用 Wi-Fi 網路"</item>
</plurals>
- <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"某個 Wi-Fi 網路已停用"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"某個 Wi-Fi 網路因連線品質不佳,已暫時停用。"</string>
+ <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_failed_message" msgid="6467545523417622335">"無法啟動 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_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>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"必須在對端裝置 <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> 上輸入 WPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>,才能繼續進行連線設定"</string>
<string name="select_character" msgid="3365550120617701745">"插入字元"</string>
@@ -941,7 +956,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>
- <string name="sim_removed_message" msgid="2064255102770489459">"您必須更換 SIM 卡,否則無法使用行動網路。"</string>
+ <!-- outdated translation 2064255102770489459 --> <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>
@@ -971,12 +986,12 @@
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"關閉 USB 儲存裝置時發生問題。請檢查您是否已卸載 USB Host,然後再試一次。"</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>
- <string name="dlg_error_title" msgid="8048999973837339174">"USB 操作失敗"</string>
+ <!-- outdated translation 8048999973837339174 --> <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>
@@ -1071,8 +1086,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"無法清除 USB 儲存裝置。"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"無法清除 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="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>
@@ -1096,22 +1111,14 @@
<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>
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <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="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>
@@ -1124,14 +1131,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>
- <string name="data_usage_limit_body" msgid="2182247539226163759">"輕按一下即可啟用"</string>
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <!-- 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) -->
<skip />
- <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<string name="ssl_certificate" msgid="6510040486049237639">"安全性憑證"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"憑證有效。"</string>
@@ -1151,4 +1158,6 @@
<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 />
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 257c0c930a94..15dee48386a6 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -155,8 +155,7 @@
<string name="fcError" msgid="3327560126588500777">"Inkinga yoxhumano noma ikhodi yesici engalungile."</string>
<!-- no translation found for httpErrorOk (1191919378083472204) -->
<skip />
- <!-- no translation found for httpError (6603022914760066338) -->
- <skip />
+ <string name="httpError" msgid="6603022914760066338">"Iphutha lenethiwekhi livelile."</string>
<!-- no translation found for httpErrorLookup (4517085806977851374) -->
<skip />
<!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
@@ -167,7 +166,7 @@
<skip />
<!-- no translation found for httpErrorConnect (7623096283505770433) -->
<skip />
- <!-- no translation found for httpErrorIO (5047872902739125260) -->
+ <!-- no translation found for httpErrorIO (4270874999047767599) -->
<skip />
<!-- no translation found for httpErrorTimeout (4743403703762883954) -->
<skip />
@@ -292,6 +291,10 @@
<!-- 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 />
<!-- 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>
@@ -389,6 +392,8 @@
<skip />
<!-- no translation found for permdesc_bindTextService (172508880651909350) -->
<skip />
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"hlanganisa kwinsizakalo ye-VPN"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwephephadonga. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"hlanganisa kwiphephadonga"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwephephadonga. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
<!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
@@ -467,19 +472,19 @@
<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 (2211941946684590103) -->
+ <!-- no translation found for permlab_readProfile (6824681438529842282) -->
<skip />
- <!-- no translation found for permdesc_readProfile (4732942280141331352) -->
+ <!-- no translation found for permdesc_readProfile (6335739730324727203) -->
<skip />
- <!-- no translation found for permlab_writeProfile (6561668046361989220) -->
+ <!-- no translation found for permlab_writeProfile (4679878325177177400) -->
<skip />
- <!-- no translation found for permdesc_writeProfile (8040643023682531996) -->
+ <!-- no translation found for permdesc_writeProfile (6431297330378229453) -->
<skip />
- <string name="permlab_readCalendar" msgid="6898987798303840534">"funda izenzakalo zekhalenda"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezigcinwe kwithebhulethi yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukuthumela izenzakalo zakho zekhalenda kwabanye abantu."</string>
- <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezigcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukuthumela izenzakalo zakho zekhalenda kwabanye abantu."</string>
- <string name="permlab_writeCalendar" msgid="3894879352594904361">"Yengeza noma guqula izenzakalo zekhalenda bese uthumelela izivakashi i-imeyli"</string>
- <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Ivumela uhlelo lokusebenza ukufaka noma ukushintsha izenzakalo ekhalendeni yakho, okungase kuthumele i-imeyli kubavakashi. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula izenzakalo zekhalenda noma ukuthumela abavakashi i-imeyli."</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>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"ngeza noma guqula izenzakalo zekhalenda bese uthumela ama-imeyili kuzivakashi ngaphandle kolwazi lomnikazi"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"Ivumela uhlelo lokusebenza ukuthumela izimemo njengomnikazi wekhalenda futhi ufake, ukhiphe, ushintshe izenzakalo ongakwazi ukuziguqula kwidivaysi yakho, kuhlanganise lezo zabangani noma osebenza nabo. Uhlelo lokusebenza olu-malicious olunalemvume lungase luthumele ama-imeyili angafuneki ukuba aphume kubanikazi bekhalenda, luguqule izenzakalo ngaphandle kolwazi lomnikazi, noma lufake izenzakalo mbumbulu ezintsha."</string>
<!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
<skip />
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Yenza imithombo yendawo ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njengabahlinzeki be-GPS noma Inethiwekhi."</string>
@@ -616,9 +621,9 @@
<!-- 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 (7823599210086622545) -->
+ <!-- no translation found for permlab_writeApnSettings (505660159675751896) -->
<skip />
- <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo ze-APN, njengemmeleli Nembobo yanoma iyiphi i-APN."</string>
+ <!-- outdated translation 7443433457842966680 --> <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo ze-APN, njengemmeleli Nembobo yanoma iyiphi i-APN."</string>
<!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
<skip />
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi."</string>
@@ -962,12 +967,18 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Ivumela izinhlelo zokusebenza ukuguqula umlando Wesiphequluli noma amabhukimakhi agcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukwesula noma ukuguqula idatha yakho Yesiphequluli."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"misa i-alamu ewashini le-alamu"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Ivumela uhlelo lokusebenza ukumisa i-alamu kuhlelo lokusebenza lewashi le-alawmu elifakiwe. Ezinye izinhlelo zokusebenza zewashi le-alamu zingase zingasebenzisi lesi sici."</string>
- <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
- <skip />
- <!-- no translation found for permdesc_addVoicemail (4828507394878206682) -->
- <skip />
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"engeza imeyili yezwi"</string>
+ <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 />
<!-- no translation found for save_password_message (767344687139195790) -->
<skip />
<!-- no translation found for save_password_notnow (6389675316706699758) -->
@@ -992,6 +1003,16 @@
<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 />
<!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
<skip />
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string>
@@ -1113,9 +1134,7 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Ayikho into yokunamathiselwa"</string>
- <!-- no translation found for replace (8333608224471746584) -->
- <skip />
+ <string name="replace" msgid="8333608224471746584">"Buyisela"</string>
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
@@ -1152,22 +1171,17 @@
<skip />
<!-- no translation found for noApplications (1691104391758345586) -->
<skip />
- <!-- no translation found for aerr_title (653922989522758100) -->
- <skip />
- <string name="aerr_application" msgid="4683614104336409186">"Inqubo yohlelo <xliff:g id="APPLICATION">%1$s</xliff:g> (lokusebenza <xliff:g id="PROCESS">%2$s</xliff:g>) ime ngokungalindelekile. Sicela uzame futhi"</string>
- <string name="aerr_process" msgid="1551785535966089511">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> imiswe ngokungalindelekile. Sicela uzame futhi."</string>
- <!-- no translation found for anr_title (3100070910664756057) -->
- <skip />
- <!-- no translation found for anr_activity_application (3538242413112507636) -->
- <skip />
- <!-- no translation found for anr_activity_process (5420826626009561014) -->
- <skip />
- <!-- no translation found for anr_application_process (4185842666452210193) -->
- <skip />
- <!-- no translation found for anr_process (1246866008169975783) -->
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <!-- no translation found for aerr_application (932628488013092776) -->
<skip />
- <!-- no translation found for force_close (3653416315450806396) -->
+ <!-- no translation found for aerr_process (4507058997035697579) -->
<skip />
+ <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>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> ayisabeli. Ungathanda ukuyivala?"</string>
+ <string name="anr_process" msgid="306819947562555821">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> ayisabeli."\n\n"Ungathanda ukuyivala?"</string>
+ <string name="force_close" msgid="8346072094521265605">"KULUNGILE"</string>
<string name="report" msgid="4060218260984795706">"Umbiko"</string>
<!-- no translation found for wait (7147118217226317732) -->
<skip />
@@ -1205,18 +1219,11 @@
<string name="volume_notification" msgid="2422265656744276715">"Ivolumu yesaziso"</string>
<!-- no translation found for volume_unknown (1400219669770445902) -->
<skip />
- <!-- no translation found for volume_icon_description_bluetooth (1903463583678473070) -->
- <skip />
- <!-- no translation found for volume_icon_description_ringer (4730973146425102943) -->
- <skip />
- <!-- no translation found for volume_icon_description_incall (4245391921367914422) -->
- <skip />
- <!-- no translation found for volume_icon_description_media (5376060645294131085) -->
- <skip />
- <!-- no translation found for volume_icon_description_notification (373288343560012393) -->
- <skip />
- <!-- no translation found for volume_panel_more_description (4168104985675856835) -->
- <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>
<!-- no translation found for ringtone_default (3789758980357696936) -->
<skip />
<!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
@@ -1234,15 +1241,13 @@
<item quantity="one" msgid="1634101450343277345">"Vula inethiwekhi ye-Wi-Fi etholakalayo"</item>
<item quantity="other" msgid="7915895323644292768">"Vula amanethiwekhi we-Wi-Fi atholakalayo"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ayikwazanga ukuxhuma kwi-Wi-Fi"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="2517058131278770509">"inoxhumano oluphansi lwe-inthanethi."</string>
<!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
<skip />
<!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
<skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
+ <!-- no translation found for wifi_p2p_failed_message (1820097493844848281) -->
<skip />
<!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
<skip />
@@ -1262,7 +1267,7 @@
<skip />
<!-- no translation found for sim_removed_title (6227712319223226185) -->
<skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
+ <!-- no translation found for sim_removed_message (2333164559970958645) -->
<skip />
<!-- no translation found for sim_done_button (827949989369963775) -->
<skip />
@@ -1303,7 +1308,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>
- <string name="dlg_error_title" msgid="8048999973837339174">"Umsebenzi we-USB wehlulekile"</string>
+ <!-- outdated translation 8048999973837339174 --> <string name="dlg_error_title" msgid="7323658469626514207">"Umsebenzi we-USB wehlulekile"</string>
<string name="dlg_ok" msgid="7376953167039865701">"KULUNGILE"</string>
<!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
<skip />
@@ -1413,8 +1418,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>
- <string name="format_error" product="nosdcard" msgid="4320339096529911637">"Yehlulekile ukusula isitoreji se-USB"</string>
- <string name="format_error" product="default" msgid="1343380371925238343">"Yehlulekile ukususa 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="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>
@@ -1441,22 +1446,14 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
- <!-- no translation found for checkbox_checked (7222044992652711167) -->
- <skip />
- <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
- <skip />
- <!-- no translation found for radiobutton_selected (8603599808486581511) -->
- <skip />
- <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
- <skip />
- <!-- no translation found for switch_on (551417728476977311) -->
- <skip />
- <!-- no translation found for switch_off (7249798614327155088) -->
- <skip />
- <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
- <skip />
- <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
- <skip />
+ <string name="checkbox_checked" msgid="7222044992652711167">"kuhloliwe"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"akuhloliwe"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"Okukhethiwe"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"akukhethiwe"</string>
+ <string name="switch_on" msgid="551417728476977311">"Ngomhla ka-"</string>
+ <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>
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1481,15 +1478,15 @@
<skip />
<!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
<skip />
- <!-- no translation found for data_usage_limit_body (2182247539226163759) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <!-- no translation found for data_usage_limit_body (4313857592916426843) -->
<skip />
- <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <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_mobile_limit_snoozed_title (279240572165412168) -->
- <skip />
- <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <!-- no translation found for data_usage_restricted_body (5087354814839059798) -->
<skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
@@ -1527,4 +1524,6 @@
<skip />
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
+ <!-- no translation found for list_delimeter (3975117572185494152) -->
+ <skip />
</resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index fe5ace87e64d..04e510be68d7 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -236,11 +236,8 @@
<item>@drawable/spinner_dropdown_background_up</item>
<item>@drawable/spinner_focused_holo_dark</item>
<item>@drawable/spinner_focused_holo_light</item>
- <item>@drawable/spinner_normal</item>
- <item>@drawable/spinner_press</item>
<item>@drawable/spinner_pressed_holo_dark</item>
<item>@drawable/spinner_pressed_holo_light</item>
- <item>@drawable/spinner_select</item>
<item>@drawable/cab_background_bottom_holo_dark</item>
<item>@drawable/cab_background_top_holo_light</item>
<item>@drawable/cab_background_bottom_holo_light</item>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index f63eb62379af..8db6b4f346a7 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -152,6 +152,18 @@
<!-- Text color, typeface, size, and style for small text inside of a popup menu. -->
<attr name="textAppearanceSmallPopupMenu" format="reference" />
+ <!-- The underline color and thickness for easy correct suggestion -->
+ <attr name="textAppearanceEasyCorrectSuggestion" format="reference" />
+
+ <!-- The underline color and thickness for misspelled suggestion -->
+ <attr name="textAppearanceMisspelledSuggestion" format="reference" />
+
+ <!-- The underline color -->
+ <attr name="textUnderlineColor" format="reference|color" />
+ <!-- The underline thickness, expressed as a percentage of the default underline thickness
+ (i.e., 100 means default thickness, and 200 means double thickness). -->
+ <attr name="textUnderlineThicknessPercentage" format="reference|integer" />
+
<!-- EditText text foreground color. -->
<attr name="editTextColor" format="reference|color" />
<!-- EditText background drawable. -->
@@ -224,6 +236,11 @@
<!-- The list item height for search results. @hide -->
<attr name="searchResultListItemHeight" format="dimension" />
+ <!-- The preferred TextAppearance for the primary text of list items. -->
+ <attr name="textAppearanceListItem" format="reference" />
+ <!-- The preferred TextAppearance for the primary text of small list items. -->
+ <attr name="textAppearanceListItemSmall" format="reference" />
+
<!-- The drawable for the list divider. -->
<attr name="listDivider" format="reference" />
<!-- The list divider used in alert dialogs. -->
@@ -3136,6 +3153,10 @@
<!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
<attr name="textAllCaps" />
</declare-styleable>
+ <declare-styleable name="SuggestionSpan">
+ <attr name="textUnderlineColor" />
+ <attr name="textUnderlineThicknessPercentage" />
+ </declare-styleable>
<!-- An <code>input-extras</code> is a container for extra data to supply to
an input method. Contains
one more more {@link #Extra <extra>} tags. -->
@@ -5248,9 +5269,9 @@
<!-- Specifies a background drawable for the action bar. -->
<attr name="background" />
<!-- Specifies a background drawable for a second stacked row of the action bar. -->
- <attr name="backgroundStacked" format="reference" />
+ <attr name="backgroundStacked" format="reference|color" />
<!-- Specifies a background drawable for the bottom component of a split action bar. -->
- <attr name="backgroundSplit" format="reference" />
+ <attr name="backgroundSplit" format="reference|color" />
<!-- Specifies a layout for custom navigation. Overrides navigationMode. -->
<attr name="customNavigationLayout" format="reference" />
<!-- Specifies a fixed height. -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 3f67d1ba6f64..74989e617eac 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -116,6 +116,7 @@
<item>"mobile_fota,10,0,2,60000,true"</item>
<item>"mobile_ims,11,0,2,60000,true"</item>
<item>"mobile_cbs,12,0,2,60000,true"</item>
+ <item>"wifi_p2p,13,1,0,-1,true"</item>
</string-array>
<!-- Array of ConnectivityManager.TYPE_xxxx constants for networks that may only
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 92953888dcb8..c522c1e90027 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -28,7 +28,7 @@
<!-- The maximum number of action buttons that should be permitted within
an action bar/action mode. This will be used to determine how many
showAsAction="ifRoom" items can fit. "always" items can override this. -->
- <integer name="max_action_buttons">3</integer>
+ <integer name="max_action_buttons">2</integer>
<dimen name="toast_y_offset">64dip</dimen>
<!-- Height of the status bar -->
<dimen name="status_bar_height">25dip</dimen>
@@ -76,9 +76,9 @@
<dimen name="multiwaveview_hit_radius">60dip</dimen>
<!-- Preference activity side margins -->
- <dimen name="preference_screen_side_margin">16dp</dimen>
+ <dimen name="preference_screen_side_margin">0dp</dimen>
<!-- Preference activity side margins negative-->
- <dimen name="preference_screen_side_margin_negative">16dp</dimen>
+ <dimen name="preference_screen_side_margin_negative">0dp</dimen>
<!-- Preference activity top margin -->
<dimen name="preference_screen_top_margin">0dp</dimen>
<!-- Preference activity bottom margin -->
@@ -88,7 +88,7 @@
<!-- Preference fragment padding, bottom -->
<dimen name="preference_fragment_padding_bottom">0dp</dimen>
<!-- Preference fragment padding, sides -->
- <dimen name="preference_fragment_padding_side">0dp</dimen>
+ <dimen name="preference_fragment_padding_side">16dp</dimen>
<!-- Weight of the left pane in a multi-pane preference layout. -->
<integer name="preferences_left_pane_weight">4</integer>
<!-- Weight of the right pane in a multi-pane preference layout. So the split is 40:60 -->
@@ -108,6 +108,11 @@
<!-- Preference activity, vertical padding for the header list -->
<dimen name="preference_screen_header_vertical_padding">0dp</dimen>
+ <dimen name="preference_screen_header_padding_side">16dip</dimen>
+ <integer name="preference_screen_header_scrollbarStyle">0x02000000</integer> <!-- outsideOverlay -->
+
+ <integer name="preference_fragment_scrollbarStyle">0x02000000</integer> <!-- outsideOverlay -->
+
<dimen name="preference_item_padding_side">8dip</dimen>
<dimen name="preference_item_padding_inner">8dip</dimen>
<dimen name="preference_child_padding_side">16dip</dimen>
@@ -125,6 +130,9 @@
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">160dip</dimen>
+ <!-- Preferred width of the search view. -->
+ <dimen name="search_view_preferred_width">320dip</dimen>
+
<!-- Dialog title height -->
<dimen name="alert_dialog_title_height">64dip</dimen>
<!-- Dialog button bar height -->
@@ -155,12 +163,12 @@
<dimen name="default_gap">16dip</dimen>
<!-- Text padding for dropdown items -->
- <dimen name="dropdownitem_text_padding_left">6dip</dimen>
+ <dimen name="dropdownitem_text_padding_left">8dip</dimen>
<!-- Text padding for dropdown items -->
- <dimen name="dropdownitem_text_padding_right">6dip</dimen>
+ <dimen name="dropdownitem_text_padding_right">8dip</dimen>
<!-- Width of the icon in a dropdown list -->
- <dimen name="dropdownitem_icon_width">48dip</dimen>
+ <dimen name="dropdownitem_icon_width">32dip</dimen>
</resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 730d971d05ea..a6bf1e0b6a16 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1792,6 +1792,9 @@
<public type="attr" name="actionBarItemBackground" />
<public type="attr" name="actionModeSplitBackground" />
+ <public type="attr" name="textAppearanceListItem" />
+ <public type="attr" name="textAppearanceListItemSmall" />
+
<public type="style" name="TextAppearance.SuggestionHighlight" />
<public type="style" name="Theme.Holo.Light.DarkActionBar" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 7d6d25c840e4..c80923d21246 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -225,7 +225,7 @@
<!-- Displayed when a web request failed because there was a connection error. -->
<string name="httpErrorConnect">The connection to the server was unsuccessful.</string>
<!-- Displayed when a web request failed because there was an input or output error. -->
- <string name="httpErrorIO">The server failed to communicate. Try again later.</string>
+ <string name="httpErrorIO">The server couldn\'t communicate. Try again later.</string>
<!-- Displayed when a web request failed because the request timed out -->
<string name="httpErrorTimeout">The connection to the server timed out.</string>
<!-- Displayed when a web request failed because the site tried to redirect us one too many times -->
@@ -1300,8 +1300,8 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_writeApnSettings">change/intercept network settings and traffic</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_writeApnSettings">Allows an application to change network settings and to intercept and inspect all network traffic,
- for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network
+ <string name="permdesc_writeApnSettings">Allows an application to change network settings and to intercept and inspect all network traffic,
+ for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network
packets without your knowledge.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -1857,7 +1857,7 @@
\n\nPlease try again in <xliff:g id="number">%d</xliff:g> seconds.
</string>
- <!-- For the unlock screen, Information message shown in dialog when user is almost at the limit
+ <!-- For the unlock screen, informational message shown in dialog when user is almost at the limit
where they will be locked out and may have to enter an alternate username/password to unlock the phone -->
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet">
You have incorrectly drawn your unlock pattern <xliff:g id="number">%d</xliff:g> times.
@@ -1865,7 +1865,8 @@
you will be asked to unlock your tablet using your Google sign-in.\n\n
Please try again in <xliff:g id="number">%d</xliff:g> seconds.
</string>
- <!-- For the unlock screen, Information message shown in dialog when user is almost at the limit
+
+ <!-- For the unlock screen, informational message shown in dialog when user is almost at the limit
where they will be locked out and may have to enter an alternate username/password to unlock the phone -->
<string name="lockscreen_failed_attempts_almost_glogin" product="default">
You have incorrectly drawn your unlock pattern <xliff:g id="number">%d</xliff:g> times.
@@ -1874,6 +1875,36 @@
Please try again in <xliff:g id="number">%d</xliff:g> seconds.
</string>
+ <!-- For the unlock screen, informational message shown in dialog when user is almost at the limit
+ where the device will be wiped. -->
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet">
+ You have incorrectly attempted to unlock the tablet <xliff:g id="number">%d</xliff:g> times.
+ After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts,
+ the tablet will be reset to factory default and all user data will be lost.
+ </string>
+
+ <!-- For the unlock screen, informational message shown in dialog when user is almost at the limit
+ where the device will be wiped. -->
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default">
+ You have incorrectly attempted to unlock the phone <xliff:g id="number">%d</xliff:g> times.
+ After <xliff:g id="number">%d</xliff:g> more unsuccessful attempts,
+ the phone will be reset to factory default and all user data will be lost.
+ </string>
+
+ <!-- For the unlock screen, informational message shown in dialog when user has exceeded the
+ maximum attempts and the device will now be wiped -->
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet">
+ 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>
+
+ <!-- For the unlock screen, informational message shown in dialog when user has exceeded the
+ maximum attempts and the device will now be wiped -->
+ <string name="lockscreen_failed_attempts_now_wiping" product="default">
+ 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>
+
<!-- On the unlock screen, countdown message shown while user is waiting to try again after too many
failed attempts -->
<string name="lockscreen_too_many_failed_attempts_countdown">Try again in <xliff:g id="number">%d</xliff:g> seconds.</string>
@@ -2181,6 +2212,22 @@
Browser\'s geolocation permissions. Malicious applications
can use this to allow sending location information to arbitrary web sites.</string>
+ <!-- Title of an application permission which allows the application to verify whether
+ a different package is able to be installed by some internal logic. [CHAR LIMIT=40] -->
+ <string name="permlab_packageVerificationAgent">verify packages</string>
+ <!-- Description of an application permission which allows the application to verify whether
+ a different package is able to be installed by some internal heuristic. [CHAR LIMIT=NONE] -->
+ <string name="permdesc_packageVerificationAgent">Allows the application to verify a package is
+ installable.</string>
+
+ <!-- Title of an application permission which allows the application to verify whether
+ a different package is able to be installed by some internal heuristic. [CHAR LIMIT=40] -->
+ <string name="permlab_bindPackageVerifier">bind to a package verifier</string>
+ <!-- Description of an application permission which allows the application to verify whether
+ a different package is able to be installed by some internal heuristic. [CHAR LIMIT=NONE] -->
+ <string name="permdesc_bindPackageVerifier">Allows the holder to make requests of
+ package verifiers. Should never be needed for normal applications.</string>
+
<!-- If the user enters a password in a form on a website, a dialog will come up asking if they want to save the password. Text in the save password dialog, asking if the browser should remember a password. -->
<string name="save_password_message">Do you want the browser to remember this password?</string>
<!-- If the user enters a password in a form on a website, a dialog will come up asking if they want to save the password. Button in the save password dialog, saying not to remember this password. -->
@@ -2212,6 +2259,16 @@
<!-- This is the default button label in the system-wide search UI.
It is also used by the home screen's search "widget". It should be short -->
<string name="search_go">Search</string>
+ <!-- SearchView accessibility description for search button [CHAR LIMIT=NONE] -->
+ <string name="searchview_description_search">Search</string>
+ <!-- SearchView accessibility description for search text field [CHAR LIMIT=NONE] -->
+ <string name="searchview_description_query">Search query</string>
+ <!-- SearchView accessibility description for clear button [CHAR LIMIT=NONE] -->
+ <string name="searchview_description_clear">Clear query</string>
+ <!-- SearchView accessibility description for submit button [CHAR LIMIT=NONE] -->
+ <string name="searchview_description_submit">Submit query</string>
+ <!-- SearchView accessibility description for voice button [CHAR LIMIT=NONE] -->
+ <string name="searchview_description_voice">Voice search</string>
<!-- String used to display the date. This is the string to say something happened 1 month ago. -->
<string name="oneMonthDurationPast">1 month ago</string>
@@ -2474,10 +2531,10 @@
<!-- Title of the alert when an application has crashed. -->
<string name="aerr_title"></string>
<!-- Text of the alert that is displayed when an application has crashed. -->
- <string name="aerr_application"><xliff:g id="application">%1$s</xliff:g> has stopped by mistake.</string>
+ <string name="aerr_application">Unfortunately, <xliff:g id="application">%1$s</xliff:g> has stopped.</string>
<!-- Text of the alert that is displayed when an application has crashed. -->
- <string name="aerr_process">The process <xliff:g id="process">%1$s</xliff:g> has
- stopped by mistake.</string>
+ <string name="aerr_process">Unfortunately, the process <xliff:g id="process">%1$s</xliff:g> has
+ stopped.</string>
<!-- Title of the alert when an application is not responding. -->
<string name="anr_title"></string>
<!-- Text of the alert that is displayed when an application is not responding. -->
@@ -2514,6 +2571,20 @@
<string name="smv_process">The process <xliff:g id="process">%1$s</xliff:g> has
has violated its self-enforced StrictMode policy.</string>
+ <!-- [CHAR LIMIT=40] Title of dialog that is shown when performing a system upgrade. -->
+ <string name="android_upgrading_title">Android is upgrading...</string>
+
+ <!-- [CHAR LIMIT=NONE] Message shown in upgrading dialog for each .apk that is optimized. -->
+ <string name="android_upgrading_apk">Optimizing application
+ <xliff:g id="number" example="123">%1$d</xliff:g> of
+ <xliff:g id="number" example="123">%2$d</xliff:g>.</string>
+
+ <!-- [CHAR LIMIT=NONE] Message to show in upgrading dialog when reached the point of starting apps. -->
+ <string name="android_upgrading_starting_apps">Starting applications.</string>
+
+ <!-- [CHAR LIMIT=NONE] Message to show in upgrading dialog when the bulk of the upgrade work is done. -->
+ <string name="android_upgrading_complete">Finishing boot.</string>
+
<!-- Notification text to tell the user that a heavy-weight application is running. -->
<string name="heavy_weight_notification"><xliff:g id="app">%1$s</xliff:g> running</string>
@@ -2603,7 +2674,7 @@
<!-- Wi-Fi p2p dialog title-->
<string name="wifi_p2p_dialog_title">Wi-Fi Direct</string>
<string name="wifi_p2p_turnon_message">Start Wi-Fi Direct operation. This will turn off Wi-Fi client/hotspot operation.</string>
- <string name="wifi_p2p_failed_message">Failed to start Wi-Fi Direct</string>
+ <string name="wifi_p2p_failed_message">Couldn\'t start Wi-Fi Direct</string>
<string name="wifi_p2p_pbc_go_negotiation_request_message">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">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">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>
@@ -2702,7 +2773,7 @@
<!-- USB_STORAGE_KILL_STORAGE_USERS dialog message text -->
<string name="dlg_confirm_kill_storage_users_text">If you turn on USB storage, some applications you are using will stop and may be unavailable until you turn off USB storage.</string>
<!-- USB_STORAGE_ERROR dialog dialog-->
- <string name="dlg_error_title">USB operation failed</string>
+ <string name="dlg_error_title">USB operation unsuccessful</string>
<!-- USB_STORAGE_ERROR dialog ok button-->
<string name="dlg_ok">OK</string>
@@ -2956,9 +3027,9 @@
<!-- Text for progress dialog while erasing SD card [CHAR LIMIT=NONE] -->
<string name="progress_erasing" product="default">Erasing SD card...</string>
<!-- Text for message to user that an error happened when formatting USB storage [CHAR LIMIT=NONE] -->
- <string name="format_error" product="nosdcard">Failed to erase USB storage.</string>
+ <string name="format_error" product="nosdcard">Couldn\'t erase USB storage.</string>
<!-- Text for message to user that an error happened when formatting SD card [CHAR LIMIT=NONE] -->
- <string name="format_error" product="default">Failed to erase SD card.</string>
+ <string name="format_error" product="default">Couldn\'t erase SD card.</string>
<!-- Text for message to user that SD card has been removed while in use [CHAR LIMIT=NONE] -->
<string name="media_bad_removal">SD card was removed before being unmounted.</string>
<!-- Text for message to user USB storage is currently being checked [CHAR LIMIT=NONE] -->
@@ -3042,6 +3113,26 @@
<!-- Description of the not pressed state of a ToggleButton. [CHAR LIMIT=NONE] -->
<string name="togglebutton_not_pressed">not pressed</string>
+ <!-- KeyboardView - accessibility support -->
+ <!-- Description of the Alt button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_alt">Alt</string>
+ <!-- Description of the Cancel button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_cancel">Cancel</string>
+ <!-- Description of the Delete button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_delete">Delete</string>
+ <!-- Description of the Done button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_done">Done</string>
+ <!-- Description of the Mode change button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_mode_change">Mode change</string>
+ <!-- Description of the Shift button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_shift">Shift</string>
+ <!-- Description of the Enter button in a KeyboardView. [CHAR LIMIT=NONE] -->
+ <string name="keyboardview_keycode_enter">Enter</string>
+
+ <!-- Announce that a headset is required to hear keyboard keys while typing a password. [CHAR LIMIT=NONE] -->
+ <string name="keyboard_headset_required_to_hear_password">Key. Headset required to hear
+ keys while typing a password.</string>
+
<!-- Content description for the action bar "home" affordance. [CHAR LIMIT=NONE] -->
<string name="action_bar_home_description">Navigate home</string>
<!-- Content description for the action bar "up" affordance. [CHAR LIMIT=NONE] -->
@@ -3073,7 +3164,7 @@
<!-- Notification title when mobile data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
<string name="data_usage_mobile_limit_title">Mobile data disabled</string>
<!-- Notification body when data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
- <string name="data_usage_limit_body">tap to enable</string>
+ <string name="data_usage_limit_body">Touch to enable</string>
<!-- Notification title when 2G-3G data usage has exceeded limit threshold. [CHAR LIMIT=32] -->
<string name="data_usage_3g_limit_snoozed_title">2G-3G data limit exceeded</string>
@@ -3084,6 +3175,11 @@
<!-- Notification body when data usage has exceeded limit threshold. [CHAR LIMIT=32] -->
<string name="data_usage_limit_snoozed_body"><xliff:g id="size" example="3.8GB">%s</xliff:g> over specified limit</string>
+ <!-- Notification title when background data usage is limited. [CHAR LIMIT=32] -->
+ <string name="data_usage_restricted_title">Background data restricted</string>
+ <!-- Notification body when background data usage is limited. [CHAR LIMIT=32] -->
+ <string name="data_usage_restricted_body">Touch to remove restriction</string>
+
<!-- SSL Certificate dialogs -->
<!-- Title for an SSL Certificate dialog -->
<string name="ssl_certificate">Security certificate</string>
@@ -3127,4 +3223,7 @@
<!-- Description of for the status bar's icon that the device is locked for accessibility. [CHAR LIMIT=NONE] -->
<string name="status_bar_device_locked">Device locked.</string>
+ <!-- Delimeter used between each item in a textual list; for example "Alpha, Beta". [CHAR LIMIT=3] -->
+ <string name="list_delimeter">", "</string>
+
</resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index d20d16c764bf..94c6e41b3f03 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -243,6 +243,18 @@ please see styles_device_defaults.xml.
<item name="android:textStyle">bold</item>
</style>
+ <style name="TextAppearance.Suggestion">
+ <item name="android:textUnderlineThicknessPercentage">200</item>
+ </style>
+
+ <style name="TextAppearance.EasyCorrectSuggestion" parent="TextAppearance.Suggestion">
+ <item name="android:textUnderlineColor">@color/holo_blue_dark</item>
+ </style>
+
+ <style name="TextAppearance.MisspelledSuggestion" parent="TextAppearance.Suggestion">
+ <item name="android:textUnderlineColor">@color/holo_red_light</item>
+ </style>
+
<!-- Widget Styles -->
<style name="Widget">
@@ -1751,19 +1763,27 @@ please see styles_device_defaults.xml.
<item name="android:button">@android:drawable/btn_star_holo_dark</item>
</style>
- <!-- The holo style for smaller screens actually uses the non-holo layout,
- which is more compact. values-xlarge defines an alternative version
- for the real holo look on a large screen. -->
<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
- <item name="android:textAppearance">@style/TextAppearance.Holo.Widget.TabWidget</item>
<item name="android:tabStripLeft">@null</item>
<item name="android:tabStripRight">@null</item>
<item name="android:tabStripEnabled">false</item>
- <item name="android:divider">@null</item>
- <item name="android:gravity">left|center_vertical</item>
+ <item name="android:divider">?android:attr/dividerVertical</item>
+ <item name="android:showDividers">middle</item>
+ <item name="android:dividerPadding">8dip</item>
+ <item name="android:measureWithLargestChild">true</item>
<item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
</style>
+ <style name="Widget.Holo.Tab" parent="Widget.Holo.ActionBar.TabView">
+ <item name="android:layout_width">0dip</item>
+ <item name="android:layout_weight">1</item>
+ <item name="android:minWidth">80dip</item>
+ </style>
+
+ <style name="Widget.Holo.TabText" parent="Widget.Holo.ActionBar.TabText">
+ <item name="android:maxWidth">180dip</item>
+ </style>
+
<style name="Widget.Holo.WebTextView" parent="Widget.WebTextView">
</style>
@@ -1772,6 +1792,8 @@ please see styles_device_defaults.xml.
<style name="Widget.Holo.DropDownItem" parent="Widget.DropDownItem">
<item name="android:textAppearance">@style/TextAppearance.Holo.Widget.DropDownItem</item>
+ <item name="android:paddingLeft">8dp</item>
+ <item name="android:paddingRight">8dp</item>
</style>
<style name="Widget.Holo.DropDownItem.Spinner">
@@ -1779,6 +1801,8 @@ please see styles_device_defaults.xml.
<style name="Widget.Holo.TextView.SpinnerItem" parent="Widget.TextView.SpinnerItem">
<item name="android:textAppearance">@style/TextAppearance.Holo.Widget.TextView.SpinnerItem</item>
+ <item name="android:paddingLeft">8dp</item>
+ <item name="android:paddingRight">8dp</item>
</style>
<style name="Widget.Holo.KeyboardView" parent="Widget.KeyboardView">
@@ -1843,9 +1867,6 @@ please see styles_device_defaults.xml.
<item name="android:paddingRight">16dip</item>
</style>
- <style name="Widget.Holo.Tab" parent="Widget.Holo.ActionBar.TabView">
- </style>
-
<style name="Widget.Holo.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">
<item name="android:divider">?android:attr/actionBarDivider</item>
<item name="android:showDividers">middle</item>
@@ -1858,6 +1879,8 @@ please see styles_device_defaults.xml.
<item name="android:textSize">12sp</item>
<item name="android:textStyle">bold</item>
<item name="android:textAllCaps">true</item>
+ <item name="android:ellipsize">marquee</item>
+ <item name="android:maxLines">2</item>
</style>
<style name="Widget.Holo.ActionMode" parent="Widget.ActionMode">
@@ -2340,7 +2363,7 @@ please see styles_device_defaults.xml.
<style name="Widget.Holo.PreferenceFrameLayout">
<item name="android:borderTop">0dip</item>
- <item name="android:borderBottom">@dimen/preference_fragment_padding_side</item>
+ <item name="android:borderBottom">@dimen/preference_fragment_padding_bottom</item>
<item name="android:borderLeft">@dimen/preference_fragment_padding_side</item>
<item name="android:borderRight">@dimen/preference_fragment_padding_side</item>
</style>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 397278ccac69..dd8bdd85938a 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -88,7 +88,10 @@ please see themes_device_defaults.xml.
<item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverse</item>
<item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.SearchResult.Title</item>
<item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.SearchResult.Subtitle</item>
-
+
+ <item name="textAppearanceEasyCorrectSuggestion">@android:style/TextAppearance.EasyCorrectSuggestion</item>
+ <item name="textAppearanceMisspelledSuggestion">@android:style/TextAppearance.MisspelledSuggestion</item>
+
<item name="textAppearanceButton">@android:style/TextAppearance.Widget.Button</item>
<item name="editTextColor">?android:attr/textColorPrimaryInverse</item>
@@ -119,6 +122,8 @@ please see themes_device_defaults.xml.
<item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeight</item>
<item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeight</item>
<item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
+ <item name="textAppearanceListItem">?android:attr/textAppearanceLarge</item>
+ <item name="textAppearanceListItemSmall">?android:attr/textAppearanceLarge</item>
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
@@ -326,7 +331,7 @@ please see themes_device_defaults.xml.
<item name="searchViewSearchIcon">@android:drawable/ic_search</item>
<item name="searchViewGoIcon">@android:drawable/ic_go</item>
<item name="searchViewVoiceIcon">@android:drawable/ic_voice_search</item>
- <item name="searchViewEditQuery">@android:drawable/ic_commit</item>
+ <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_holo_dark</item>
<item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
<item name="searchDialogTheme">@style/Theme.SearchBar</item>
@@ -917,6 +922,7 @@ please see themes_device_defaults.xml.
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeightSmall</item>
+ <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
@@ -1219,6 +1225,7 @@ please see themes_device_defaults.xml.
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeightSmall</item>
+ <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
diff --git a/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java b/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
index 73c92b08d876..be740d3ec529 100644
--- a/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
+++ b/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
import android.net.NetworkStats;
+import android.net.NetworkStats.Entry;
import android.net.TrafficStats;
import android.net.wifi.WifiManager;
import android.os.Bundle;
@@ -35,6 +36,8 @@ import com.android.bandwidthtest.util.BandwidthTestUtil;
import com.android.bandwidthtest.util.ConnectionUtil;
import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
/**
* Test that downloads files from a test server and reports the bandwidth metrics collected.
@@ -97,6 +100,7 @@ public class BandwidthTest extends InstrumentationTestCase {
File tmpSaveFile = new File(BASE_DIR + File.separator + TMP_FILENAME);
assertTrue(BandwidthTestUtil.DownloadFromUrl(targetUrl, tmpSaveFile));
NetworkStats prof_stats = TrafficStats.stopDataProfiling(mContext);
+ Log.d(LOG_TAG, prof_stats.toString());
NetworkStats post_test_stats = fetchDataFromProc(mUid);
NetworkStats proc_stats = post_test_stats.subtract(pre_test_stats);
@@ -138,7 +142,7 @@ public class BandwidthTest extends InstrumentationTestCase {
NetworkStats prof_stats = TrafficStats.stopDataProfiling(mContext);
NetworkStats post_test_stats = fetchDataFromProc(downloadManagerUid);
NetworkStats proc_stats = post_test_stats.subtract(pre_test_stats);
-
+ Log.d(LOG_TAG, prof_stats.toString());
// Output measurements to instrumentation out, so that it can be compared to that of
// the server.
Bundle results = new Bundle();
@@ -164,7 +168,8 @@ public class BandwidthTest extends InstrumentationTestCase {
File snd_stat = new File (root_filepath + "tcp_snd");
int tx = BandwidthTestUtil.parseIntValueFromFile(snd_stat);
NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1);
- stats.addValues(NetworkStats.IFACE_ALL, uid, NetworkStats.TAG_NONE, rx, 0, tx, 0);
+ stats.addValues(NetworkStats.IFACE_ALL, uid, NetworkStats.SET_DEFAULT,
+ NetworkStats.TAG_NONE, rx, 0, tx, 0, 0);
return stats;
}
@@ -193,11 +198,37 @@ public class BandwidthTest extends InstrumentationTestCase {
Log.e(LOG_TAG, "Empty bundle provided.");
return;
}
+ // Merge stats across all sets.
+ Map<Integer, Entry> totalStats = new HashMap<Integer, Entry>();
for (int i = 0; i < stats.size(); ++i) {
- android.net.NetworkStats.Entry entry = stats.getValues(i, null);
+ Entry statsEntry = stats.getValues(i, null);
+ // We are only interested in the all inclusive stats.
+ if (statsEntry.tag != 0) {
+ continue;
+ }
+ Entry mapEntry = null;
+ if (totalStats.containsKey(statsEntry.uid)) {
+ mapEntry = totalStats.get(statsEntry.uid);
+ switch (statsEntry.set) {
+ case NetworkStats.SET_ALL:
+ mapEntry.rxBytes = statsEntry.rxBytes;
+ mapEntry.txBytes = statsEntry.txBytes;
+ break;
+ case NetworkStats.SET_DEFAULT:
+ case NetworkStats.SET_FOREGROUND:
+ mapEntry.rxBytes += statsEntry.rxBytes;
+ mapEntry.txBytes += statsEntry.txBytes;
+ break;
+ default:
+ Log.w(LOG_TAG, "Invalid state found in NetworkStats.");
+ }
+ } else {
+ totalStats.put(statsEntry.uid, statsEntry);
+ }
+ }
+ // Ouput merged stats to bundle.
+ for (Entry entry : totalStats.values()) {
results.putInt(label + "uid", entry.uid);
- results.putString(label + "iface", entry.iface);
- results.putInt(label + "tag", entry.tag);
results.putLong(label + "tx", entry.txBytes);
results.putLong(label + "rx", entry.rxBytes);
}
diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java
index 69ad0f45229f..47ba88af4735 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java
@@ -16,6 +16,7 @@
package android.net;
+import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.TAG_NONE;
import android.test.suitebuilder.annotation.SmallTest;
@@ -31,14 +32,14 @@ public class NetworkStatsTest extends TestCase {
public void testFindIndex() throws Exception {
final NetworkStats stats = new NetworkStats(TEST_START, 3)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 11)
- .addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 12);
-
- assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE));
- assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE));
- assertEquals(0, stats.findIndex(TEST_IFACE, 100, TAG_NONE));
- assertEquals(-1, stats.findIndex(TEST_IFACE, 6, TAG_NONE));
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11)
+ .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12);
+
+ assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE));
+ assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE));
+ assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE));
+ assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE));
}
public void testAddEntryGrow() throws Exception {
@@ -47,98 +48,99 @@ public class NetworkStatsTest extends TestCase {
assertEquals(0, stats.size());
assertEquals(2, stats.internalSize());
- stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3);
- stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4);
+ stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3);
+ stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4);
assertEquals(2, stats.size());
assertEquals(2, stats.internalSize());
- stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7);
- stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8);
- stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10);
+ stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7);
+ stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8);
+ stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10);
assertEquals(5, stats.size());
assertTrue(stats.internalSize() >= 5);
- assertValues(stats, 0, TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3);
- assertValues(stats, 1, TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4);
- assertValues(stats, 2, TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7);
- assertValues(stats, 3, TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8);
- assertValues(stats, 4, TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10);
+ assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3);
+ assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4);
+ assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7);
+ assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8);
+ assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10);
}
public void testCombineExisting() throws Exception {
final NetworkStats stats = new NetworkStats(TEST_START, 10);
- stats.addValues(TEST_IFACE, 1001, TAG_NONE, 512L, 4L, 256L, 2L, 10);
- stats.addValues(TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2);
- stats.combineValues(TEST_IFACE, 1001, TAG_NONE, -128L, -1L, -128L, -1L, -1);
+ stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 10);
+ stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2);
+ stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L, -128L, -1L, -1);
- assertValues(stats, 0, TEST_IFACE, 1001, TAG_NONE, 384L, 3L, 128L, 1L, 9);
- assertValues(stats, 1, TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2);
+ assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 384L, 3L, 128L, 1L, 9);
+ assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2);
// now try combining that should create row
- stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
- assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
- stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3);
- assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 256L, 2L, 256L, 2L, 6);
+ stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
+ assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
+ stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
+ assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 256L, 2L, 256L, 2L, 6);
}
public void testSubtractIdenticalData() throws Exception {
final NetworkStats before = new NetworkStats(TEST_START, 2)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
final NetworkStats after = new NetworkStats(TEST_START, 2)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
final NetworkStats result = after.subtract(before);
// identical data should result in zero delta
- assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0);
+ assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
+ assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
}
public void testSubtractIdenticalRows() throws Exception {
final NetworkStats before = new NetworkStats(TEST_START, 2)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
final NetworkStats after = new NetworkStats(TEST_START, 2)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1025L, 9L, 2L, 1L, 15)
- .addValues(TEST_IFACE, 101, TAG_NONE, 3L, 1L, 1028L, 9L, 20);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1025L, 9L, 2L, 1L, 15)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 1028L, 9L, 20);
final NetworkStats result = after.subtract(before);
// expect delta between measurements
- assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 1L, 1L, 2L, 1L, 4);
- assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 3L, 1L, 4L, 1L, 8);
+ assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 1L, 4);
+ assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 4L, 1L, 8);
}
public void testSubtractNewRows() throws Exception {
final NetworkStats before = new NetworkStats(TEST_START, 2)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
final NetworkStats after = new NetworkStats(TEST_START, 3)
- .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12)
- .addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
+ .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
+ .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12)
+ .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
final NetworkStats result = after.subtract(before);
// its okay to have new rows
- assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 2, TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
+ assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
+ assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
+ assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
}
- private static void assertValues(NetworkStats stats, int index, String iface, int uid, int tag,
- long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
+ 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);
assertEquals(iface, entry.iface);
assertEquals(uid, entry.uid);
+ assertEquals(set, entry.set);
assertEquals(tag, entry.tag);
assertEquals(rxBytes, entry.rxBytes);
assertEquals(rxPackets, entry.rxPackets);
diff --git a/core/tests/coretests/src/android/provider/SettingsProviderTest.java b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
index b82e698c100e..3e96dc45e9c1 100644
--- a/core/tests/coretests/src/android/provider/SettingsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
@@ -20,11 +20,16 @@ import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.net.Uri;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.List;
/** Unit test for SettingsProvider. */
public class SettingsProviderTest extends AndroidTestCase {
@@ -191,4 +196,49 @@ public class SettingsProviderTest extends AndroidTestCase {
assertEquals("test1,test2",
Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED));
}
+
+ @SmallTest
+ public void testSettings() {
+ assertCanBeHandled(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_ADD_ACCOUNT));
+ assertCanBeHandled(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_APN_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.parse("package:" + getContext().getPackageName())));
+ assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_DATE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_DEVICE_INFO_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_INTERNAL_STORAGE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_LOCALE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_MEMORY_CARD_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_PRIVACY_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_QUICK_LAUNCH_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SEARCH_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SECURITY_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SOUND_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SYNC_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_SYSTEM_UPDATE_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_USER_DICTIONARY_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_WIFI_IP_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_WIFI_SETTINGS));
+ assertCanBeHandled(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
+ }
+
+ private void assertCanBeHandled(final Intent intent) {
+ PackageManager packageManager = mContext.getPackageManager();
+ List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0);
+ assertNotNull(resolveInfoList);
+ // one or more activity can handle this intent.
+ assertTrue(resolveInfoList.size() > 0);
+ }
}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 05bd6264a996..0353a471a5d6 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -155,6 +155,7 @@
<assign-permission name="android.permission.DEVICE_POWER" uid="shell" />
<assign-permission name="android.permission.INSTALL_LOCATION_PROVIDER" uid="shell" />
<assign-permission name="android.permission.BACKUP" uid="shell" />
+ <assign-permission name="android.permission.FORCE_STOP_PACKAGES" uid="shell" />
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="media" />
<assign-permission name="android.permission.ACCESS_DRM" uid="media" />
diff --git a/data/fonts/Lohit_Hindi.ttf b/data/fonts/Lohit_Hindi.ttf
new file mode 100644
index 000000000000..73caae34aac0
--- /dev/null
+++ b/data/fonts/Lohit_Hindi.ttf
Binary files differ
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index 6ac615df2af4..1bee47a6a867 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -46,6 +46,11 @@
</family>
<family>
<fileset>
+ <file>Lohit_Hindi.ttf</file>
+ </fileset>
+ </family>
+ <family>
+ <fileset>
<file>DroidSansFallback.ttf</file>
</fileset>
</family>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 73fb11155f3b..d8c1fa2a83ad 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -31,6 +31,7 @@ PRODUCT_COPY_FILES := \
frameworks/base/data/fonts/DroidSerif-Italic.ttf:system/fonts/DroidSerif-Italic.ttf \
frameworks/base/data/fonts/DroidSerif-BoldItalic.ttf:system/fonts/DroidSerif-BoldItalic.ttf \
frameworks/base/data/fonts/DroidSansMono.ttf:system/fonts/DroidSansMono.ttf \
+ frameworks/base/data/fonts/Lohit_Hindi.ttf:system/fonts/Lohit_Hindi.ttf \
frameworks/base/data/fonts/Clockopia.ttf:system/fonts/Clockopia.ttf \
frameworks/base/data/fonts/DroidSansFallback.ttf:system/fonts/DroidSansFallback.ttf \
frameworks/base/data/fonts/AndroidClock.ttf:system/fonts/AndroidClock.ttf \
diff --git a/docs/html/guide/developing/tools/adt.html b/docs/html/guide/developing/tools/adt.html
deleted file mode 100644
index 5ba2ef5be745..000000000000
--- a/docs/html/guide/developing/tools/adt.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/sdk/eclipse-adt.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/sdk/eclipse-adt.html">click here</a>.</p>
-</body>
-</html> \ No newline at end of file
diff --git a/docs/html/guide/developing/tools/adt.jd b/docs/html/guide/developing/tools/adt.jd
new file mode 100644
index 000000000000..e48a5ae5b230
--- /dev/null
+++ b/docs/html/guide/developing/tools/adt.jd
@@ -0,0 +1,528 @@
+page.title=Android Developer Tools
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#tools">SDK Tools Integration</a></li>
+
+ <li><a href="#editors">Code Editors</a>
+ <ol>
+ <li><a href="#resource-linking">Resource linking enhancements</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#graphical-editor">Graphical Layout Editor</a>
+ <ol>
+ <li><a href="#canvas">Canvas and outline view</a></li>
+ <li><a href="#palette">Palette</a></li>
+ <li><a href="#config-chooser">Configuration chooser</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#refactoring">Layout Factoring Support</a></li>
+
+ </ol>
+
+ <h2>Related videos</h2>
+
+ <ol>
+ <li><a href="{@docRoot}videos/index.html#v=Oq05KqjXTvs">Android Developer Tools
+ Google I/O Session</a>
+ </li>
+ </ol>
+
+ <h2>See also</h2>
+
+ <ol>
+ <li><a href="http://tools.android.com/recent">Android Tools change blog</a></li>
+ </ol>
+ </div>
+ </div>
+
+ <p>ADT (Android Developer Tools) is a plugin for Eclipse that provides a suite of
+ tools that are integrated with the Eclipse IDE. It offers you access to many features that help
+ you develop Android applications quickly. ADT
+ provides GUI access to many of the command line SDK tools as well as a UI design tool for rapid
+ prototyping, designing, and building of your application's user interface.</p>
+
+ <p>Because ADT is a plugin for Eclipse, you get the functionality of a well-established IDE,
+ along with Android-specific features that are bundled with ADT. The following
+ describes important features of Eclipse and ADT:</p>
+
+ <dl>
+ <dt><strong>Integrated Android project creation, building, packaging, installation, and
+ debugging</strong></dt>
+
+ <dd>ADT integrates many development workflow tasks into Eclipse, making it easy for you to
+ rapidly develop and test your Android applications.</dd>
+
+ <dt><strong>SDK Tools integration</strong></dt>
+
+ <dd>Many of the <a href="#tools">SDK tools</a> are integrated into Eclipse's menus,
+ perspectives, or as a part of background processes ran by ADT.</dd>
+
+ <dt><strong>Java programming language and XML editors</strong></dt>
+
+ <dd>The Java programming language editor contains common IDE features such as compile time
+ syntax checking, auto-completion, and integrated documentation for the Android framework APIs.
+ ADT also provides custom XML editors that let you
+ edit Android-specific XML files in a form-based UI. A graphical layout editor lets you design
+ user interfaces with a drag and drop interface.</dd>
+
+ <dt><strong>Integrated documentation for Android framework APIs</strong></dt>
+ <dd>You can access documentation by hovering over classes, methods, or variables.</dd>
+ </dl>
+
+ <p>You can find the most up-to-date and more detailed information about changes and new features
+on the <a href="http://tools.android.com/recent">Recent Changes</a> page at the Android Tools
+Project site.</p>
+
+ <h2 id="tools">SDK Tools Integration</h2>
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Need help designing icons?</h2>
+ <p>The <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android
+ Asset Studio</a> is a web-based tool that lets you generate icons from existing images,
+ clipart, or text. It also generates the icons with different DPIs for different screen sizes and
+ types.</p>
+
+ </div>
+ </div>
+
+ <p>Many of the tools that you can start or run from the command line are integrated into ADT.
+ They include:</p>
+
+ <ul>
+ <li><a href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Traceview</a>:
+ Allows you to profile your program's execution
+ (<strong>Window &gt; Open Perspective &gt; Traceview</strong>). </li>
+
+ <li><a href="{@docRoot}guide/developing/tools/android.html">android</a>: Provides access to
+ the Android SDK and AVD Manager. Other <code>android</code> features such as creating or
+ updating projects (application and library) are integrated throughout the Eclipse IDE
+ (<strong>Window &gt; Android SDK and AVD Manager</strong>). </li>
+
+ <li><a href="{@docRoot}guide/developing/debugging/debugging-ui.html#HierarchyViewer">Hierarchy
+ Viewer</a>: Allows you to visualize your application's view hierarchy to find inefficiencies
+ (<strong>Window &gt; Open Perspective &gt; Hierarchy Viewer</strong>).</li>
+
+ <li><a href="{@docRoot}guide/developing/debugging/debugging-ui.html#pixelperfect">Pixel
+ Perfect</a>: Allows you to closely examine your UI to help with designing and building.
+ (<strong>Window &gt; Open Perspective &gt; Pixel Perfect</strong>).</li>
+
+ <li><a href="{@docRoot}guide/developing/debugging/ddms.html">DDMS</a>: Provides
+ debugging features including: screen capturing, thread and heap information, and logcat
+ (<strong>Window &gt; Open Perspective &gt; DDMS</strong>).</li>
+
+ <li><a href="{@docRoot}guide/developing/tools/adb.html">adb</a>: Provides access to
+ a device from your development system. Some features of
+ <code>adb</code> are integrated into ADT such as project installation (Eclipse run menu),
+ file transfer, device enumeration, and logcat (DDMS). You must access the more advanced
+ features of <code>adb</code>, such as shell commands, from the command line.</li>
+
+ <li><a href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a>: Allows code obfuscation,
+ shrinking, and optimization. ADT integrates ProGuard as part of the build, if you <a href=
+ "{@docRoot}guide/developing/tools/proguard.html#enabling">enable it</a>.</li>
+ </ul>
+
+<h2 id="editors">Code Editors</h2>
+
+ <p>In addition to Eclipse's standard editor features, ADT provides custom XML editors to help
+ you create and edit Android manifests, resources, menus, and layouts in a form-based or graphical
+ mode. Double-clicking on an XML file in Eclipse's package explorer opens the
+ appropriate XML editor.
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Google I/O Session Video</h2>
+ <p>View the segment on the <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=30m50s">XML editors</a> for more
+ information.</p>
+ </div>
+ </div>
+
+ <p class="note"><strong>Note:</strong> You can edit Android-specific XML files (such as a layout
+or manifest) in both a graphical mode and also an XML markup mode. You can switch between
+these modes with the pair of tabs at the bottom of each custom XML editor.</p>
+
+ <p>In addition, some special file types that don't have custom editors, such as drawables, animations,
+ and color files offer editing enhancements such as XML tag completion.</p>
+
+<p>ADT provides the following custom, form-based XML editors:</p>
+
+ <dl>
+
+ <dt><strong>Graphical Layout Editor</strong></dt>
+
+ <dd>Edit and design your XML layout files with a drag and drop interface. The layout editor
+ renders your interface as well, offering you a preview as you design your layouts. This editor
+ is invoked when you open an XML file with a view declared (usually declared in
+ <code>res/layout</code>. For more information, see <a href="#graphical-editor">Graphical Layout
+ Editor</a>.</dd>
+
+ <dt><strong>Android Manifest Editor</strong></dt>
+
+ <dd>Edit Android manifests with a simple graphical interface. This editor is invoked
+ when you open an <code>AndroidManifest.xml</code> file.</dd>
+
+ <dt><strong>Menu Editor</strong></dt>
+
+ <dd>Edit menu groups and items with a simple graphical interface. This editor is
+ invoked when you open an XML file with a <code>&lt;menu&gt;</code> declared (usually located in
+ the <code>res/menu</code> folder).</dd>
+
+ <dt><strong>Resources Editor</strong></dt>
+
+ <dd>Edit resources with a simple graphical interface. This editor is invoked when
+ you open an XML file with a <code>&lt;resources&gt;</code> tag declared.</dd>
+
+ <dt><strong>XML Resources Editor</strong></dt>
+
+ <dd>Edit XML resources with a simple graphical interface. This editor is invoked
+ when you open an XML file.</dd>
+ </dl>
+
+
+ <h3 id="resource-linking">Resource linking enhancements</h3>
+ <p>In addition to the normal code editing features of Eclipse, ADT provides enhancements to the Android
+ development experience that allow you to quickly jump to declarations of various types of resources such
+ as strings or layout files. You can access these enhancements by holding down the control key and
+ clicking on the following items:
+
+ <ul>
+
+ <li>A resource identifier, such as <code>R.id.button1</code>, jumps
+ to the XML definition of the view.</li>
+
+ <li>A declaration in the <code>R.java</code> file, such as <code>public
+ static final int Button01=0x7f050000"</code>, jumps to the corresponding XML definition.</li>
+
+ <li>An activity or service definition in your manifest, such as
+ <code>&lt;activity android:name=".TestActivity"&gt;</code>, jumps to the corresponding Java class. You can
+ jump from an activity definition (or service definition) into the corresponding Java class.</li>
+
+ <li>You can jump to any value definition (e.g. <code>@string:foo</code>), regardless of
+which XML file
+ "foo" is defined in.</li>
+
+ <li>Any file-based declaration, such as <code>@layout/bar</code>, opens the file.</li>
+
+ <li>Non-XML resources, such as <code>@drawable/icon</code>, launches
+ Eclipse's default application for the given file type, which in this case is an
+ image.</li>
+
+ <li><code>@android</code> namespace resources opens the resources found in
+ the SDK install area.</li>
+
+ <li>Custom views in XML layouts, such as <code>&lt;foo.bar.MyView&gt;&lt;/foo.bar.MyView&gt;</code>,
+ or <code>&lt;view class="foo.bar.MyView"&gt;</code>) jump to the corresponding custom view classes.</li>
+
+ <li>An XML attribute such as <code>@android:string/ok</code> or <code>android.R.string.id</code> in Java code
+ opens the file that declares the strings. The XML tab opens when doing this, not
+ the form-based editor.</li>
+
+ </ul>
+
+ <h2 id="graphical-editor">Graphical Layout Editor</h2>
+
+ <p>ADT provides many features to allow you to design and build your application's user interface.
+ Many of these features are in the graphical layout editor, which you can access by opening one of
+ your application's XML layout files in Eclipse.
+ </p>
+
+ <p>The graphical layout editor is the main screen that you use to visually design and build your
+ UI. It is split up into the following parts:</p>
+
+ <dl>
+ <dt><strong>Canvas</strong></dt>
+
+ <dd>In the middle of the editor is the canvas. It provides the rendered view of your
+ layout and supports dragging and dropping of UI widgets
+ directly from the palette. You can select the platform version used to render the items in
+ the canvas. Each platform version has its own look and feel, which might be the similar to or
+ radically different from another platform version. The canvas renders the appropriate look
+ and feel for the currently selected platform version.
+ This platform version does not need to be the same as the version that your
+ application targets.
+
+ <p>The canvas also provides
+ context-sensitive actions in the layout actions bar, such as adjusting layout margins and
+orientation.
+ The layout actions bar displays available actions depending on the selected UI element in the
+ canvas.</p>
+ </dd>
+
+ <dt><strong>Outline</strong></dt>
+
+ <dd>On the right side of the editor is the outline view. It displays a hierarchical
+ view of your layout where you can do things such as reorder of views. The outline
+ view exposes similar functionality as the canvas but displays your layout in an ordered
+ list instead of a rendered preview.</dd>
+
+ <dt><strong>Palette</strong></dt>
+
+ <dd>On the left side of the editor is the palette. It provides a set of widgets that
+ you can drag onto the canvas. The palette shows rendered previews of the
+ widgets for easy lookup of desired UI widgets.</dd>
+
+ <dt><strong>Configuration Chooser</strong></dt>
+
+ <dd>At the top of the editor is the configuration chooser.
+ It provides options to change a layout's rendering mode or screen type.</dd>
+ </dl>
+
+ <img src="{@docRoot}images/layout_editor.png" alt="graphical layout editor screenshot"
+ height="500" id="layout-editor" name="layout-editor">
+
+ <p class="img-caption"><strong>Figure 1.</strong> Graphical layout editor</p>
+
+ <h3 id="canvas">Canvas and outline view</h3>
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Google I/O Session Video</h2>
+
+ <p>View the segment on the <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m16s">canvas and outline view</a> and the
+ <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs#t=11m43s">layout actions bar</a>
+ for more information.
+ </p>
+ </div>
+ </div>
+
+ <p>The canvas is the area where you can drag and drop UI widgets from the palette to design your
+ layout. The canvas offers a rendered preview of your layout depending on factors such as the
+ selected platform version, screen orientation, and currently selected theme that you specify in
+ the <a href="#configuration-chooser">configuration chooser</a>. You can also drag and drop
+ items into the outline view, which displays your layout in a hierarchical list. The outline view
+ exposes much of the same functionality as the canvas but offers another method of organization
+ that is beneficial for ordering and quickly selecting items. When you right-click a specific item
+ in the canvas or outline view, you can access a context-sensitive menu that lets you modify the
+ following attributes of the layout or view:</p>
+
+ <dl>
+ <dt><strong>View and layout properties</strong></dt>
+
+ <dd>
+ When you right-click a view or layout in the canvas or outline view, it brings up a
+ context-sensitive menu that lets you set things such as:
+
+ <ul>
+ <li>ID of the view or layout</li>
+
+ <li>Text of the view</li>
+
+ <li>Layout width</li>
+
+ <li>Layout height</li>
+
+ <li>Properties such as alpha or clickable</li>
+ </ul>
+ </dd>
+
+ <dt><strong>Animation preview and creation</strong></dt>
+
+ <dd>
+ If your layout or view is animated, you can preview the animation directly in the canvas
+ (when you select Android 3.0 or later as the platform version in the configuration chooser).
+ Right-click an item in the canvas and select <strong>Play Animation</strong>. If
+ animation is not associated with item, an option is available in the menu to create one.
+
+ <p>View the segment on the <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=28m30s">animation features</a> for more
+ information.</p>
+ </dd>
+
+ <dt><strong>Extract as Include</strong></dt>
+
+ <dd>You can extract parts of a current layout into its own layout file,
+ which you can then include in any layout with a single line of XML. See <a href=
+ "#extract-as-include">Layout Refactoring Support</a> for more information.</dd>
+ </dl>
+
+ <h4>Other canvas features</h4>
+
+ <p>The canvas has additional features not available in the outline view:</p>
+
+ <ul>
+
+ <li>Edit views with the layout actions bar: The context-sensitive layout actions bar allows you to
+ edit how a view is laid out in your UI. The available actions depend on the currently
+ selected view and its parent layout. Some common actions include
+ toggling the fill mode of the view and specifying margins. For instance, if you select a
+ {@link android.widget.Button}
+ in a {@link android.widget.LinearLayout}, you see actions related to the {@link
+android.widget.LinearLayout}, such as a toggle to switch
+ between horizontal and vertical layout, and a toggle to control whether its children are
+ aligned along their text baseline. You will also see toolbar actions to control the individual
+ layout attributes of the child, such as whether the child should stretch out to match its
+ parent's width and height, a dropdown action to set the child's layout gravity, a button to open
+ a margin editor, and a layout weight editor.</li>
+
+ <li>Edit a nested layout in its current context: If you are editing a layout
+ that includes another layout, you can edit the included layout in the layout that included
+ it.</li>
+
+ <li>Preview drag and drop location: When you drag and drop a UI widget onto the canvas, ruler
+ markers appear showing you the approximate location of the UI widget depending on the
+ type of layout, such as {@link android.widget.RelativeLayout} or {@link
+ android.widget.LinearLayout}.</li>
+
+ <li>Preview animations: You can preview view and layout animations when you select Android 2.1
+ or later for the platform version in the configuration bar.</li>
+
+ <li>Render layouts in real-time: Layouts are rendered as accurately as possible according to
+ the platform version, including the appropriate system and action bars.</li>
+
+ <li>Support for fragments: Fragments can be rendered in the same screen as the layout that
+ includes the fragments.</li>
+
+ </ul>
+
+ <img src="{@docRoot}images/canvas.png" alt="screenshot of the canvas" height="553">
+
+ <p class="img-caption"><strong>Figure 2.</strong> Canvas portion of the layout editor showing
+ a rendered preview of an application</p>
+
+ <img src=
+ "{@docRoot}images/layout_outline.png" alt="screenshot of the outline view" height="185">
+
+ <p class="img-caption"><strong>Figure 3.</strong> Outline view showing current layout's structure</p>
+
+ <h3 id="palette">Palette</h3>
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Google I/O Session Video</h2>
+
+ <p>View the segment on the <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m53s">palette</a> for more information.</p>
+ </div>
+ </div>
+
+ <p>The palette contains the UI widgets that you can drag and drop onto the canvas and add to your
+ layout. The pallete categorizes the widgets and shows rendered previews
+ for easier lookup. The main features of the palette include:</p>
+
+ <ul>
+ <li>Different modes of rendered previews include: icons only, icons and text, tiny previews,
+ small previews, and previews (rendered in real size). Previews are only available for layouts
+ rendered with the latest revisions of Android 2.1 (API Level 7) or later.</li>
+
+ <li>Custom views in your project or library projects are added under custom views
+ category.</li>
+
+ <li>Arrange UI widgets alphabetically or by category.</li>
+ </ul>
+ <img src="{@docRoot}images/palette.png" alt="palette screenshot" height="566">
+
+ <p class="img-caption"><strong>Figure 4.</strong> Palette showing available UI widgets</p>
+
+ <h3 id="config-chooser">Configuration chooser</h3>
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Google I/O Session Video</h2>
+
+ <p>View the segment on the <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=12m51s">configuration chooser</a> for more
+ information.</p>
+ </div>
+ </div>
+
+
+ <p>The configuration chooser allows you to create and configure different configurations of
+ a layout for different situations, such as one for landscape and one for portrait mode. You can
+ set the following options for each configuration of a layout:
+ </p>
+ <ul>
+ <li>Screen type combo box: Predefined screen settings for common device configurations. You
+ can also create your own by selecting <strong>Custom...</strong>.</li>
+
+ <li>Screen orientation combo box: Portrait or Landscape screen orientation.</li>
+
+ <li>Theme combo box: Predefined themes or a custom theme that you have created.</li>
+
+ <li>Platform combo box: Platform version used to render the canvas and palette as well as
+ displaying appropriate themes.</li>
+
+ <li>Custom layout combo boxes: The locale, dock, and time of day combo boxes let you select
+ different versions of the same layout depending on the device's current state. You can
+ create a new version of a layout with the <strong>Create</strong> button.</li>
+ </ul>
+
+ <img src="{@docRoot}images/layout_bar.png" alt=
+ "configuration chooser screenshot" height="50" id="configuration-chooser" name="configuration chooser">
+
+ <p class="img-caption"><strong>Figure 5.</strong> Configuration chooser</p>
+
+ <h2 id="refactoring">Layout Refactoring Support</h2>
+
+ <div class="sidebox-wrapper">
+ <div class="sidebox">
+ <h2>Google I/O Session Video</h2>
+
+ <p>View the segment on <a href=
+ "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=18m00s">refactoring features</a> for a rundown
+of the more important refactoring features.</p>
+
+ </div>
+ </div>
+
+ <p>In both the graphical and XML layout editor, there are many features that help you quickly
+ refactor your layouts. The following list describes the major refactoring support:</p>
+
+ <dl>
+
+ <dt><strong>Change layout</strong></dt>
+ <dd>This lets you change the layout on the fly and re-renders the canvas for you.
+ You can apply this refactoring to any layout and the layout is converted to the new type if
+ possible. In many cases, the opening and closing tags of the layout's XML element are changed
+ along with things such as ID attributes and their references. However, for some supported
+ types, ADT attempts to preserve the layout, such as changing a {@link
+ android.widget.LinearLayout} to a {@link android.widget.RelativeLayout}.</dd>
+
+ <dt><strong>Change widget</strong></dt>
+ <dd>This lets you select one or more widgets and converts them to a new widget type. In
+ addition to changing the element name, it also removes any
+ attributes that are not supported by the new widget type and adds in any mandatory attributes
+ required by the new widget type. If the current ID of a widget includes the
+ current widget type in its ID (such as a <code>&lt;Button&gt;</code> widget named
+ <code>"button1"</code>), then the ID is changed to match the new widget type and all
+ references are updated.</dd>
+
+ <dt id="extract-as-include"><strong>Extract as include</strong></dt>
+ <dd>This lets you extract views inside of an existing layout into their own separate layout
+ file. An <code>include</code> tag that points to the newly created layout file is inserted
+ into the existing layout file. Right-click the view or layout and select <strong>Extract as
+ Include...</strong>.</dd>
+
+ <dt><strong>Extract string</strong></dt>
+ <dd>Extract strings from either XML or Java files into their own separate resource file.</dd>
+
+ <dt><strong>Extract style</strong></dt>
+ <dd>Extract style-related attributes from a layout and define them in a new
+ <code>styles.xml</code> file. You can select multiple views and this refactoring extracts all
+ of the same styles into one style and assigns that style to all the views that use it.</dd>
+
+ <dt><strong>Wrap-in container</strong></dt>
+ <dd>This lets you select one or more sibling elements and wrap them in a new container. This
+ can be applied to the root element as well, in which case the namespace declaration attributes
+ will be transferred to the new root. This refactoring also transfers <code>layout_</code>
+ attribute references to the new root, For example, suppose you have a {@link android.widget.RelativeLayout}.
+ If other widgets have layout constraints pointing to your widget, wrapping the widget causes
+ these constraints to point to the parent instead.</dd>
+
+ <dt><strong>Quick Assistant</strong></dt>
+ <dd>Provides refactoring suggestions depending on the current context. Press
+ <strong>Ctrl-1</strong> (or <strong>Cmd-1</strong> on
+ Mac) in an editor, and Eclipse provides a list of possible refactorings depending on the
+ context. The Quick Assistant provides fast access to all of the above refactorings, where applicable.
+ For example, if you are editing an XML value and decide you want to extract it out
+ as a string, place the text cursor in the string and press Ctrl-1 to see the refactoring context
+ menu.</dd>
+ </dl>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index a647cd39fd77..9c3a0bea18e8 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -244,7 +244,7 @@
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/opengl.html">
<span class="en">3D with OpenGL</span>
- </a></li>
+ </a><span class="new">updated</span></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
<span class="en">Property Animation</span>
</a></li>
@@ -569,6 +569,7 @@
</a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/developing/tools/adb.html">adb</a></li>
+ <li><a href="<?cs var:toroot ?>guide/developing/tools/adt.html">ADT</a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/developing/tools/android.html">android</a></li>
<li><a href="<?cs var:toroot ?>guide/developing/tools/bmgr.html">bmgr</a>
<li><a href="<?cs var:toroot ?>guide/developing/tools/dmtracedump.html">dmtracedump</a></li>
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index cc467f2ce8a1..b750858f1e6a 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -8,22 +8,37 @@ parent.link=index.html
<h2>In this document</h2>
<ol>
- <li><a href="#basics">The Basics</a></li>
+ <li><a href="#basics">The Basics</a>
+ <ol>
+ <li><a href="#packages">OpenGL packages</a></li>
+ </ol>
+ <li><a href="#manifest">Declaring OpenGL Requirements</a></li>
+ </li>
+ <li><a href="#coordinate-mapping">Mapping Coordinates for Drawn Objects</a>
+ <ol>
+ <li><a href="#proj-es1">Projection and camera in ES 1.0</a></li>
+ <li><a href="#proj-es1">Projection and camera in ES 2.0</a></li>
+ </ol>
+ </li>
<li><a href="#compatibility">OpenGL Versions and Device Compatibility</a>
<ol>
- <li><a href="#textures">Texture Compression Support</a></li>
- <li><a href="#declare-compression">Declaring Use of Compressed Textures</a></li>
+ <li><a href="#textures">Texture compression support</a></li>
+ <li><a href="#gl-extension-query">Determining OpenGL Extensions</a></li>
</ol>
</li>
+ <li><a href="#choosing-version">Choosing an OpenGL API Version</a></li>
</ol>
<h2>Key classes</h2>
<ol>
<li>{@link android.opengl.GLSurfaceView}</li>
<li>{@link android.opengl.GLSurfaceView.Renderer}</li>
- <li>{@link javax.microedition.khronos.opengles}</li>
- <li>{@link android.opengl}</li>
</ol>
- <h2>Related Samples</h2>
+ <h2>Related tutorials</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0</a></li>
+ <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL ES 2.0</a></li>
+ </ol>
+ <h2>Related samples</h2>
<ol>
<li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
GLSurfaceViewActivity.html">GLSurfaceViewActivity</a></li>
@@ -46,11 +61,11 @@ GLSurfaceView</a></li>
</div>
<p>Android includes support for high performance 2D and 3D graphics with the Open Graphics Library
-(OpenGL) API&mdash;specifically, the OpenGL ES API. OpenGL is a cross-platform graphics API that
-specifies a standard software interface for 3D graphics processing hardware. OpenGL ES is a flavor
-of the OpenGL specification intended for embedded devices. The OpenGL ES 1.0 and 1.1 API
-specifications have been supported since Android 1.0. Beginning with Android 2.2 (API
-Level 8), the framework supports the OpenGL ES 2.0 API specification.</p>
+(OpenGL), specifically, the OpenGL ES API. OpenGL is a cross-platform graphics API that specifies a
+standard software interface for 3D graphics processing hardware. OpenGL ES is a flavor of the OpenGL
+specification intended for embedded devices. The OpenGL ES 1.0 and 1.1 API specifications have been
+supported since Android 1.0. Beginning with Android 2.2 (API Level 8), the framework supports the
+OpenGL ES 2.0 API specification.</p>
<p class="note"><b>Note:</b> The specific API provided by the Android framework is similar to the
J2ME JSR239 OpenGL ES API, but is not identical. If you are familiar with J2ME JSR239
@@ -71,18 +86,19 @@ understanding how to implement these classes in an activity should be your first
</p>
<dl>
- <dt>{@link android.opengl.GLSurfaceView}</dt>
- <dd>This class is a container on which you can draw and manipulate objects using OpenGL API calls.
- This class is similar in function to a {@link android.view.SurfaceView}, except that it is
- specifically for use with OpenGL. You can use this class by simply creating an instance of
- {@link android.opengl.GLSurfaceView} and adding your
+ <dt><strong>{@link android.opengl.GLSurfaceView}</strong></dt>
+ <dd>This class is a {@link android.view.View} where you can draw and manipulate objects using
+ OpenGL API calls and is similar in function to a {@link android.view.SurfaceView}. You can use
+ this class by creating an instance of {@link android.opengl.GLSurfaceView} and adding your
{@link android.opengl.GLSurfaceView.Renderer Renderer} to it. However, if you want to capture
touch screen events, you should extend the {@link android.opengl.GLSurfaceView} class to
- implement the touch listeners, as shown in the <a
+ implement the touch listeners, as shown in OpenGL Tutorials for
+ <a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html#touch">ES 1.0</a>,
+ <a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html#touch">ES 2.0</a> and the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity
.html">TouchRotateActivity</a> sample.</dd>
- <dt>{@link android.opengl.GLSurfaceView.Renderer}</dt>
+ <dt><strong>{@link android.opengl.GLSurfaceView.Renderer}</strong></dt>
<dd>This interface defines the methods required for drawing graphics in an OpenGL {@link
android.opengl.GLSurfaceView}. You must provide an implementation of this interface as a
separate class and attach it to your {@link android.opengl.GLSurfaceView} instance using
@@ -119,6 +135,7 @@ href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics
</dd>
</dl>
+<h3 id="packages">OpenGL packages</h3>
<p>Once you have established a container view for OpenGL using {@link
android.opengl.GLSurfaceView} and {@link android.opengl.GLSurfaceView.Renderer}, you can begin
calling OpenGL APIs using the following classes:</p>
@@ -126,8 +143,17 @@ calling OpenGL APIs using the following classes:</p>
<ul>
<li>OpenGL ES 1.0/1.1 API Packages
<ul>
+ <li>{@link android.opengl} - This package provides a static interface to the OpenGL ES
+1.0/1.1 classes and better performance than the javax.microedition.khronos package interfaces.
+ <ul>
+ <li>{@link android.opengl.GLES10}</li>
+ <li>{@link android.opengl.GLES10Ext}</li>
+ <li>{@link android.opengl.GLES11}</li>
+ <li>{@link android.opengl.GLES10Ext}</li>
+ </ul>
+ </li>
<li>{@link javax.microedition.khronos.opengles} - This package provides the standard
-implementation of OpenGL ES 1.0 and 1.1.
+implementation of OpenGL ES 1.0/1.1.
<ul>
<li>{@link javax.microedition.khronos.opengles.GL10}</li>
<li>{@link javax.microedition.khronos.opengles.GL10Ext}</li>
@@ -136,42 +162,255 @@ implementation of OpenGL ES 1.0 and 1.1.
<li>{@link javax.microedition.khronos.opengles.GL11ExtensionPack}</li>
</ul>
</li>
- <li>{@link android.opengl} - This package provides a static interface to the OpenGL classes
- above. These interfaces were added with Android 1.6 (API Level 4).
- <ul>
- <li>{@link android.opengl.GLES10}</li>
- <li>{@link android.opengl.GLES10Ext}</li>
- <li>{@link android.opengl.GLES11}</li>
- <li>{@link android.opengl.GLES10Ext}</li>
- </ul>
- </li>
</ul>
</li>
<li>OpenGL ES 2.0 API Class
<ul>
- <li>{@link android.opengl.GLES20 android.opengl.GLES20}</li>
+ <li>{@link android.opengl.GLES20 android.opengl.GLES20} - This package provides the
+interface to OpenGL ES 2.0 and is available starting with Android 2.2 (API Level 8).</li>
</ul>
</li>
</ul>
+<p>If you'd like to start building an app with OpenGL right away, have a look at the tutorials for
+<a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0</a> or
+<a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL ES 2.0</a>!
+</p>
+
+<h2 id="manifest">Declaring OpenGL Requirements</h2>
+<p>If your application uses OpenGL features that are not available on all devices, you must include
+these requirements in your <a
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a></code> file.
+Here are the most common OpenGL manifest declarations:</p>
+
+<ul>
+ <li><strong>OpenGL ES version requirements</strong> - If your application only supports OpenGL ES
+2.0, you must declare that requirement by adding the following settings to your manifest as
+shown below.
+
+<pre>
+ &lt;!-- Tell the system this app requires OpenGL ES 2.0. --&gt;
+ &lt;uses-feature android:glEsVersion="0x00020000" android:required="true" /&gt;
+</pre>
+
+ <p>Adding this declaration causes the Android Market to restrict your application from being
+ installed on devices that do not support OpenGL ES 2.0.</p>
+ </li>
+ <li><strong>Texture compression requirements</strong> - If your application uses texture
+compression formats, you must declare the formats your application supports in your manifest file
+using <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a>. For more information about available texture compression
+formats, see <a href="#textures">Texture compression support</a>.
+
+<p>Declaring texture compression requirements in your manifest hides your application from users
+with devices that do not support at least one of your declared compression types. For more
+information on how Android Market filtering works for texture compressions, see the <a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html#market-texture-filtering">
+Android Market and texture compression filtering</a> section of the {@code
+&lt;supports-gl-texture&gt;} documentation.</p>
+ </li>
+</ul>
+
+
+<h2 id="coordinate-mapping">Mapping Coordinates for Drawn Objects</h2>
+
+<p>One of the basic problems in displaying graphics on Android devices is that their screens can
+vary in size and shape. OpenGL assumes a square, uniform coordinate system and, by default, happily
+draws those coordinates onto your typically non-square screen as if it is perfectly square.</p>
+
+<img src="{@docRoot}images/opengl/coordinates.png">
+<p class="img-caption">
+ <strong>Figure 1.</strong> Default OpenGL coordinate system (left) mapped to a typical Android
+device screen (right).
+</p>
+
+<p>The illustration above shows the uniform coordinate system assumed for an OpenGL frame on the
+left, and how these coordinates actually map to a typical device screen in landscape orientation
+on the right. To solve this problem, you can apply OpenGL projection modes and camera views to
+transform coordinates so your graphic objects have the correct proportions on any display.</p>
+
+<p>In order to apply projection and camera views, you create a projection matrix and a camera view
+matrix and apply them to the OpenGL rendering pipeline. The projection matrix recalculates the
+coordinates of your graphics so that they map correctly to Android device screens. The camera view
+matrix creates a transformation that renders objects from a specific eye position.</p>
+
+<h3 id="proj-es1">Projection and camera view in OpenGL ES 1.0</h3>
+<p>In the ES 1.0 API, you apply projection and camera view by creating each matrix and then
+adding them to the OpenGL environment.</p>
+
+<ol>
+<li><strong>Projection matrix</strong> - Create a projection matrix using the geometry of the
+device screen in order to recalculate object coordinates so they are drawn with correct proportions.
+The following example code demonstrates how to modify the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
+int, int) onSurfaceChanged()} method of a {@link android.opengl.GLSurfaceView.Renderer}
+implementation to create a projection matrix based on the screen's aspect ratio and apply it to the
+OpenGL rendering environment.
+
+<pre>
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+ gl.glViewport(0, 0, width, height);
+
+ // make adjustments for screen ratio
+ float ratio = (float) width / height;
+ gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
+ gl.glLoadIdentity(); // reset the matrix to its default state
+ gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
+ }
+</pre>
+</li>
+
+<li><strong>Camera transformation matrix</strong> - Once you have adjusted the coordinate system
+using a projection matrix, you must also apply a camera view. The following example code shows how
+to modify the {@link
+android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
+onDrawFrame()} method of a {@link android.opengl.GLSurfaceView.Renderer}
+implementation to apply a model view and use the
+{@link android.opengl.GLU#gluLookAt(javax.microedition.khronos.opengles.GL10, float, float, float,
+float, float, float, float, float, float) GLU.gluLookAt()} utility to create a viewing tranformation
+which simulates a camera position.
+
+<pre>
+ public void onDrawFrame(GL10 gl) {
+ ...
+ // Set GL_MODELVIEW transformation mode
+ gl.glMatrixMode(GL10.GL_MODELVIEW);
+ gl.glLoadIdentity(); // reset the matrix to its default state
+
+ // When using GL_MODELVIEW, you must set the camera view
+ GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+ ...
+ }
+</pre>
+</li>
+</ol>
+
+<p>For a complete example of how to apply projection and camera views with OpenGL ES 1.0, see the <a
+href="{@docRoot}resources/tutorials/opengl/opengl-es10.html#projection-and-views">OpenGL ES 1.0
+tutorial</a>.</p>
+
+
+<h3 id="proj-es2">Projection and camera view in OpenGL ES 2.0</h3>
+<p>In the ES 2.0 API, you apply projection and camera view by first adding a matrix member to
+the vertex shaders of your graphics objects. With this matrix member added, you can then
+generate and apply projection and camera viewing matrices to your objects.</p>
+
+<ol>
+<li><strong>Add matrix to vertex shaders</strong> - Create a variable for the view projection matrix
+and include it as a multiplier of the shader's position. In the following example vertex shader
+code, the included {@code uMVPMatrix} member allows you to apply projection and camera viewing
+matrices to the coordinates of objects that use this shader.
+
+<pre>
+ private final String vertexShaderCode =
+
+ // This matrix member variable provides a hook to manipulate
+ // the coordinates of objects that use this vertex shader
+ "uniform mat4 uMVPMatrix; \n" +
+
+ "attribute vec4 vPosition; \n" +
+ "void main(){ \n" +
+
+ // the matrix must be included as part of gl_Position
+ " gl_Position = uMVPMatrix * vPosition; \n" +
+
+ "} \n";
+</pre>
+ <p class="note"><strong>Note:</strong> The example above defines a single transformation matrix
+member in the vertex shader into which you apply a combined projection matrix and camera view
+matrix. Depending on your application requirements, you may want to define separate projection
+matrix and camera viewing matrix members in your vertex shaders so you can change them
+independently.</p>
+</li>
+<li><strong>Access the shader matrix</strong> - After creating a hook in your vertex shaders to
+apply projection and camera view, you can then access that variable to apply projection and
+camera viewing matrices. The following code shows how to modify the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
+javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} method of a {@link
+android.opengl.GLSurfaceView.Renderer} implementation to access the matrix
+variable defined in the vertex shader above.
+
+<pre>
+ public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+ ...
+ muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+ ...
+ }
+</pre>
+</li>
+<li><strong>Create projection and camera viewing matrices</strong> - Generate the projection and
+viewing matrices to be applied the graphic objects. The following example code shows how to modify
+the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
+javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} and {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
+int, int) onSurfaceChanged()} methods of a {@link android.opengl.GLSurfaceView.Renderer}
+implementation to create camera view matrix and a projection matrix based on the screen aspect ratio
+of the device.
+
+<pre>
+ public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+ ...
+ // Create a camera view matrix
+ Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+ }
+
+ public void onSurfaceChanged(GL10 unused, int width, int height) {
+ GLES20.glViewport(0, 0, width, height);
+
+ float ratio = (float) width / height;
+
+ // create a projection matrix from device screen geometry
+ Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
+ }
+</pre>
+</li>
+
+<li><strong>Apply projection and camera viewing matrices</strong> - To apply the projection and
+camera view transformations, multiply the matrices together and then set them into the vertex
+shader. The following example code shows how modify the {@link
+android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
+onDrawFrame()} method of a {@link android.opengl.GLSurfaceView.Renderer} implementation to combine
+the projection matrix and camera view created in the code above and then apply it to the graphic
+objects to be rendered by OpenGL.
+
+<pre>
+ public void onDrawFrame(GL10 unused) {
+ ...
+ // Combine the projection and camera view matrices
+ Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
+
+ // Apply the combined projection and camera view transformations
+ GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+
+ // Draw objects
+ ...
+ }
+</pre>
+</li>
+</ol>
+<p>For a complete example of how to apply projection and camera view with OpenGL ES 2.0, see the <a
+href="{@docRoot}resources/tutorials/opengl/opengl-es20.html#projection-and-views">OpenGL ES 2.0
+tutorial</a>.</p>
+
+
<h2 id="compatibility">OpenGL Versions and Device Compatibility</h2>
-<p>
- The OpenGL ES 1.0 and 1.1 API specifications have been supported since Android 1.0.
+<p>The OpenGL ES 1.0 and 1.1 API specifications have been supported since Android 1.0.
Beginning with Android 2.2 (API Level 8), the framework supports the OpenGL ES 2.0 API
specification. OpenGL ES 2.0 is supported by most Android devices and is recommended for new
applications being developed with OpenGL. For information about the relative number of
Android-powered devices that support a given version of OpenGL ES, see the <a
href="{@docRoot}resources/dashboard/opengl.html">OpenGL ES Versions Dashboard</a>.</p>
+
<h3 id="textures">Texture compression support</h3>
<p>Texture compression can significantly increase the performance of your OpenGL application by
reducing memory requirements and making more efficient use of memory bandwidth. The Android
framework provides support for the ETC1 compression format as a standard feature, including a {@link
-android.opengl.ETC1Util} utility class and the {@code etc1tool} compression tool (located in your
-Android SDK at {@code &lt;sdk&gt;/tools/}).</p>
-
-<p>For an example of an Android application that uses texture compression, see the <a
+android.opengl.ETC1Util} utility class and the {@code etc1tool} compression tool (located in the
+Android SDK at {@code &lt;sdk&gt;/tools/}). For an example of an Android application that uses
+texture compression, see the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
CompressedTextureActivity.html">CompressedTextureActivity</a> code sample.
</p>
@@ -184,34 +423,110 @@ alpha channel. If your application requires textures with an alpha channel, you
investigate other texture compression formats available on your target devices.</p>
<p>Beyond the ETC1 format, Android devices have varied support for texture compression based on
-their GPU chipsets. You should investigate texture compression support on the the devices you are
-are targeting to determine what compression types your application should support.</p>
+their GPU chipsets and OpenGL implementations. You should investigate texture compression support on
+the the devices you are are targeting to determine what compression types your application should
+support. In order to determine what texture formats are supported on a given device, you must <a
+href="#gl-extension-query">query the device</a> and review the <em>OpenGL extension names</em>,
+which identify what texture compression formats (and other OpenGL features) are supported by the
+device. Some commonly supported texture compression formats are as follows:</p>
-<p>To determine if texture compression formats other than ETC1 are supported on a particular
-device:</p>
+<ul>
+ <li><strong>ATITC (ATC)</strong> - ATI texture compression (ATITC or ATC) is available on a
+wide variety of devices and supports fixed rate compression for RGB textures with and without
+an alpha channel. This format may be represented by several OpenGL extension names, for example:
+ <ul>
+ <li>{@code GL_AMD_compressed_ATC_texture}</li>
+ <li>{@code GL_ATI_texture_compression_atitc}</li>
+ </ul>
+ </li>
+ <li><strong>PVRTC</strong> - PowerVR texture compression (PVRTC) is available on a wide
+variety of devices and supports 2-bit and 4-bit per pixel textures with or without an alpha channel.
+This format is represented by the following OpenGL extension name:
+ <ul>
+ <li>{@code GL_IMG_texture_compression_pvrtc}</li>
+ </ul>
+ </li>
+ <li><strong>S3TC (DXT<em>n</em>/DXTC)</strong> - S3 texture compression (S3TC) has several
+format variations (DXT1 to DXT5) and is less widely available. The format supports RGB textures with
+4-bit alpha or 8-bit alpha channels. This format may be represented by several OpenGL extension
+names, for example:
+ <ul>
+ <li>{@code GL_OES_texture_compression_S3TC}</li>
+ <li>{@code GL_EXT_texture_compression_s3tc}</li>
+ <li>{@code GL_EXT_texture_compression_dxt1}</li>
+ <li>{@code GL_EXT_texture_compression_dxt3}</li>
+ <li>{@code GL_EXT_texture_compression_dxt5}</li>
+ </ul>
+ </li>
+ <li><strong>3DC</strong> - 3DC texture compression (3DC) is a less widely available format that
+supports RGB textures with an an alpha channel. This format is represented by the following OpenGL
+extension name:</li>
+ <ul>
+ <li>{@code GL_AMD_compressed_3DC_texture}</li>
+ </ul>
+</ul>
+
+<p class="warning"><strong>Warning:</strong> These texture compression formats are <em>not
+supported</em> on all devices. Support for these formats can vary by manufacturer and device. For
+information on how to determine what texture compression formats are on a particular device, see
+the next section.
+</p>
+
+<p class="note"><strong>Note:</strong> Once you decide which texture compression formats your
+application will support, make sure you declare them in your manifest using <a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;
+</a>. Using this declaration enables filtering by external services such as Android Market, so that
+your app is installed only on devices that support the formats your app requires. For details, see
+<a
+href="{@docRoot}guide/topics/graphics/opengl.html#manifest">OpenGL manifest declarations</a>.</p>
+
+<h3 id="gl-extension-query">Determining OpenGL extensions</h3>
+<p>Implementations of OpenGL vary by Android device in terms of the extensions to the OpenGL ES API
+that are supported. These extensions include texture compressions, but typically also include other
+extensions to the OpenGL feature set.</p>
+
+<p>To determine what texture compression formats, and other OpenGL extensions, are supported on a
+particular device:</p>
<ol>
<li>Run the following code on your target devices to determine what texture compression
formats are supported:
<pre>
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);
</pre>
- <p class="warning"><b>Warning:</b> The results of this call vary by device! You must run this
-call on several target devices to determine what compression types are commonly supported on
-your target devices.</p>
+ <p class="warning"><b>Warning:</b> The results of this call <em>vary by device!</em> You
+must run this call on several target devices to determine what compression types are commonly
+supported.</p>
</li>
- <li>Review the output of this method to determine what extensions are supported on the
+ <li>Review the output of this method to determine what OpenGL extensions are supported on the
device.</li>
</ol>
-<h3 id="declare-compression">Declaring compressed textures</h3>
-<p>Once you have decided which texture compression types your application will support, you
-must declare them in your manifest file using <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">
-&lt;supports-gl-texture&gt;</a>. Declaring this information in your manifest file hides your
-application from users with devices that do not support at least one of your declared
-compression types. For more information on how Android Market filtering works for texture
-compressions, see the <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html#market-texture-filtering">
-Android Market and texture compression filtering</a> section of the {@code
-&lt;supports-gl-texture&gt;} documentation.
+<h2 id="choosing-version">Choosing an OpenGL API Version</h2>
+
+<p>OpenGL ES API version 1.0 (and the 1.1 extensions) and version 2.0 both provide high
+performance graphics interfaces for creating 3D games, visualizations and user interfaces. Graphics
+programming for the OpenGL ES 1.0/1.1 API versus ES 2.0 differs significantly, and so developers
+should carefully consider the following factors before starting development with either API:</p>
+
+<ul>
+ <li><strong>Performance</strong> - In general, OpenGL ES 2.0 provides faster graphics performance
+than the ES 1.0/1.1 APIs. However, the performance difference can vary depending on the Android
+device your OpenGL application is running on, due to differences in the implementation of the OpenGL
+graphics pipeline.</li>
+ <li><strong>Device Compatibility</strong> - Developers should consider the types of devices,
+Android versions and the OpenGL ES versions available to their customers. For more information
+on OpenGL compatibility across devices, see the <a href="#compatibility">OpenGL Versions and Device
+Compatibility</a> section.</li>
+ <li><strong>Coding Convenience</strong> - The OpenGL ES 1.0/1.1 API provides a fixed function
+pipeline and convenience functions which are not available in the ES 2.0 API. Developers who are new
+to OpenGL may find coding for OpenGL ES 1.0/1.1 faster and more convenient.</li>
+ <li><strong>Graphics Control</strong> - The OpenGL ES 2.0 API provides a higher degree
+of control by providing a fully programmable pipeline through the use of shaders. With more
+direct control of the graphics processing pipeline, developers can create effects that would be
+very difficult to generate using the 1.0/1.1 API.</li>
+</ul>
+
+<p>While performance, compatibility, convenience, control and other factors may influence your
+decision, you should pick an OpenGL API version based on what you think provides the best experience
+for your users.</p>
diff --git a/docs/html/images/canvas.png b/docs/html/images/canvas.png
new file mode 100644
index 000000000000..471657a7bf6d
--- /dev/null
+++ b/docs/html/images/canvas.png
Binary files differ
diff --git a/docs/html/images/layout_bar.png b/docs/html/images/layout_bar.png
new file mode 100644
index 000000000000..9ae677c63cd8
--- /dev/null
+++ b/docs/html/images/layout_bar.png
Binary files differ
diff --git a/docs/html/images/layout_editor.png b/docs/html/images/layout_editor.png
new file mode 100644
index 000000000000..12cbe07d941b
--- /dev/null
+++ b/docs/html/images/layout_editor.png
Binary files differ
diff --git a/docs/html/images/layout_outline.png b/docs/html/images/layout_outline.png
new file mode 100644
index 000000000000..b128cf2cdee2
--- /dev/null
+++ b/docs/html/images/layout_outline.png
Binary files differ
diff --git a/docs/html/images/opengl/coordinates.png b/docs/html/images/opengl/coordinates.png
new file mode 100644
index 000000000000..7180cd5cecf3
--- /dev/null
+++ b/docs/html/images/opengl/coordinates.png
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es10-1.png b/docs/html/images/opengl/helloopengl-es10-1.png
new file mode 100644
index 000000000000..9aa2376ed720
--- /dev/null
+++ b/docs/html/images/opengl/helloopengl-es10-1.png
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es10-2.png b/docs/html/images/opengl/helloopengl-es10-2.png
new file mode 100644
index 000000000000..cdfd9c70539a
--- /dev/null
+++ b/docs/html/images/opengl/helloopengl-es10-2.png
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es20-1.png b/docs/html/images/opengl/helloopengl-es20-1.png
new file mode 100644
index 000000000000..1f76c22cb23b
--- /dev/null
+++ b/docs/html/images/opengl/helloopengl-es20-1.png
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es20-2.png b/docs/html/images/opengl/helloopengl-es20-2.png
new file mode 100644
index 000000000000..0fbbe60010e3
--- /dev/null
+++ b/docs/html/images/opengl/helloopengl-es20-2.png
Binary files differ
diff --git a/docs/html/images/palette.png b/docs/html/images/palette.png
new file mode 100644
index 000000000000..a892846274d5
--- /dev/null
+++ b/docs/html/images/palette.png
Binary files differ
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 0fc10bf746ce..720e14314c2a 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -782,6 +782,26 @@ var ANDROID_RESOURCES = [
}
},
{
+ tags: ['tutorial', 'gl', 'new'],
+ path: 'tutorials/opengl/opengl-es10.html',
+ title: {
+ en: 'OpenGL ES 1.0'
+ },
+ description: {
+ en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
+ }
+ },
+ {
+ tags: ['tutorial', 'gl', 'new'],
+ path: 'tutorials/opengl/opengl-es20.html',
+ title: {
+ en: 'OpenGL ES 2.0'
+ },
+ description: {
+ en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
+ }
+ },
+ {
tags: ['tutorial', 'testing'],
path: 'tutorials/testing/helloandroid_test.html',
title: {
diff --git a/docs/html/resources/tutorials/opengl/opengl-es10.jd b/docs/html/resources/tutorials/opengl/opengl-es10.jd
new file mode 100644
index 000000000000..35707667e8ac
--- /dev/null
+++ b/docs/html/resources/tutorials/opengl/opengl-es10.jd
@@ -0,0 +1,532 @@
+page.title=OpenGL ES 1.0
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
+@jd:body
+
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#creating">Create an Activity with GLSurfaceView</a></li>
+ <li>
+ <a href="#drawing">Draw a Shape on GLSurfaceView</a>
+ <ol>
+ <li><a href="#define-triangle">Define a Triangle</a></li>
+ <li><a href="#draw-triangle">Draw the Triangle</a></li>
+ </ol>
+ </li>
+ <li><a href="#projection-and-views">Apply Projection and Camera Views</a></li>
+ <li><a href="#motion">Add Motion</a></li>
+ <li><a href="#touch">Respond to Touch Events</a></li>
+ </ol>
+ <h2 id="code-samples-list">Related Samples</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+index.html">API Demos - graphics</a></li>
+ <li><a
+ href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+GLSurfaceViewActivity.html">OpenGL ES 1.0 Sample</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+TouchRotateActivity.html">TouchRotateActivity</a></li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a></li>
+ <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL
+ES 2.0</a></li>
+ </ol>
+ </div>
+ </div>
+
+<p>This tutorial shows you how to create a simple Android application that uses the OpenGL ES 1.0
+API to perform some basic graphics operations. You'll learn how to:</p>
+
+<ul>
+ <li>Create an activity using {@link android.opengl.GLSurfaceView} and {@link
+android.opengl.GLSurfaceView.Renderer}</li>
+ <li>Create and draw a graphic object</li>
+ <li>Define a projection to correct for screen geometry</li>
+ <li>Define a camera view</li>
+ <li>Rotate a graphic object</li>
+ <li>Make graphics touch-interactive</li>
+</ul>
+
+<p>The Android framework supports both the OpenGL ES 1.0/1.1 and OpenGL ES 2.0 APIs. You should
+carefully consider which version of the OpenGL ES API (1.0/1.1 or 2.0) is most appropriate for your
+needs. For more information, see
+<a href="{@docRoot}guide/topics/graphics/opengl.html#choosing-version">Choosing an OpenGL API
+Version</a>. If you would prefer to use OpenGL ES 2.0, see the <a
+href="{@docRoot}resources/tutorials/opengl/opengl-es20.jd">OpenGL ES 2.0 tutorial</a>.</p>
+
+<p>Before you start, you should understand how to create a basic Android application. If you do not
+know how to create an app, follow the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello
+World Tutorial</a> to familiarize yourself with the process.</p>
+
+<h2 id="creating">Create an Activity with GLSurfaceView</h2>
+
+<p>To get started using OpenGL, you must implement both a {@link android.opengl.GLSurfaceView} and a
+{@link android.opengl.GLSurfaceView.Renderer}. The {@link android.opengl.GLSurfaceView} is the main
+view type for applications that use OpenGL and the {@link android.opengl.GLSurfaceView.Renderer}
+controls what is drawn within that view. (For more information about these classes, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.)</p>
+
+<p>To create an activity using {@code GLSurfaceView}:</p>
+
+<ol>
+ <li>Start a new Android project that targets Android 1.6 (API Level 4) or higher.
+ </li>
+ <li>Name the project <strong>HelloOpenGLES10</strong> and make sure it includes an activity called
+{@code HelloOpenGLES10}.
+ </li>
+ <li>Modify the {@code HelloOpenGLES10} class as follows:
+<pre>
+package com.example.android.apis.graphics;
+
+import android.app.Activity;
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.os.Bundle;
+
+public class HelloOpenGLES10 extends Activity {
+
+ private GLSurfaceView mGLView;
+
+ &#64;Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Create a GLSurfaceView instance and set it
+ // as the ContentView for this Activity.
+ mGLView = new HelloOpenGLES10SurfaceView(this);
+ setContentView(mGLView);
+ }
+
+ &#64;Override
+ protected void onPause() {
+ super.onPause();
+ // The following call pauses the rendering thread.
+ // If your OpenGL application is memory intensive,
+ // you should consider de-allocating objects that
+ // consume significant memory here.
+ mGLView.onPause();
+ }
+
+ &#64;Override
+ protected void onResume() {
+ super.onResume();
+ // The following call resumes a paused rendering thread.
+ // If you de-allocated graphic objects for onPause()
+ // this is a good place to re-allocate them.
+ mGLView.onResume();
+ }
+}
+
+class HelloOpenGLES10SurfaceView extends GLSurfaceView {
+
+ public HelloOpenGLES10SurfaceView(Context context){
+ super(context);
+
+ // Set the Renderer for drawing on the GLSurfaceView
+ setRenderer(new HelloOpenGLES10Renderer());
+ }
+}
+</pre>
+ <p class="note"><strong>Note:</strong> You will get a compile error for the {@code
+HelloOpenGLES10Renderer} class reference. That's expected; you will fix this error in the next step.
+ </p>
+
+ <p>As shown above, this activity uses a single {@link android.opengl.GLSurfaceView} for its
+view. Notice that this activity implements crucial lifecycle callbacks for pausing and resuming its
+work.</p>
+
+ <p>The {@code HelloOpenGLES10SurfaceView} class in this example code above is just a thin wrapper
+for an instance of {@link android.opengl.GLSurfaceView} and is not strictly necessary for this
+example. However, if you want your application to monitor and respond to touch screen
+events&#8212;and we are guessing you do&#8212;you must extend {@link android.opengl.GLSurfaceView}
+to add touch event listeners, which you will learn how to do in the <a href="#touch">Reponding to
+Touch Events</a> section.</p>
+
+ <p>In order to draw graphics in the {@link android.opengl.GLSurfaceView}, you must define an
+implementation of {@link android.opengl.GLSurfaceView.Renderer}. In the next step, you create
+a renderer class to complete this OpenGL application.</p>
+ </li>
+
+ <li>Create a new file for the following class {@code HelloOpenGLES10Renderer}, which implements
+the {@link android.opengl.GLSurfaceView.Renderer} interface:
+
+<pre>
+package com.example.android.apis.graphics;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.opengl.GLSurfaceView;
+
+public class HelloOpenGLES10Renderer implements GLSurfaceView.Renderer {
+
+ public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+ // Set the background frame color
+ gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+ }
+
+ public void onDrawFrame(GL10 gl) {
+ // Redraw background color
+ gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
+ }
+
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+ gl.glViewport(0, 0, width, height);
+ }
+
+}
+</pre>
+ <p>This minimal implementation of {@link android.opengl.GLSurfaceView.Renderer} provides the
+code structure needed to use OpenGL drawing methods:
+<ul>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
+ javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} is called once to set up the
+{@link android.opengl.GLSurfaceView}
+environment.</li>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
+ onDrawFrame()} is called for each redraw of the {@link
+android.opengl.GLSurfaceView}.</li>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
+ int, int) onSurfaceChanged()} is called if the geometry of the {@link
+android.opengl.GLSurfaceView} changes, for example when the device's screen orientation
+changes.</li>
+</ul>
+ </p>
+ <p>For more information about these methods, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.
+</p>
+ </li>
+</ol>
+
+<p>The code example above creates a simple Android application that displays a grey screen using
+OpenGL ES 1.0 calls. While this application does not do anything very interesting, by creating these
+classes, you have layed the foundation needed to start drawing graphic elements with OpenGL ES
+1.0.</p>
+
+<p>If you are familiar with the OpenGL ES APIs, these classes should give you enough information
+to use the OpenGL ES 1.0 API and create graphics. However, if you need a bit more help getting
+started with OpenGL, head on to the next sections for a few more hints.</p>
+
+<h2 id="drawing">Draw a Shape on GLSurfaceView</h2>
+
+<p>Once you have implemented a {@link android.opengl.GLSurfaceView.Renderer}, the next step is to
+draw something with it. This section shows you how to define and draw a triangle.</p>
+
+<h3 id="define-triangle">Define a Triangle</h3>
+
+<p>OpenGL allows you to define objects using coordinates in three-dimensional space. So, before you
+ can draw a triangle, you must define its coordinates. In OpenGL, the typical way to do this is to
+ define a vertex array for the coordinates.</p>
+
+<p>By default, OpenGL ES assumes a coordinate system where [0,0,0] (X,Y,Z) specifies the center of
+ the {@link android.opengl.GLSurfaceView} frame, [1,1,0] is the top right corner of the frame and
+[-1,-1,0] is bottom left corner of the frame.</p>
+
+<p>To define a vertex array for a triangle:</p>
+
+<ol>
+ <li>In your {@code HelloOpenGLES10Renderer} class, add new member variable to contain the
+vertices of a triangle shape:
+<pre>
+ private FloatBuffer triangleVB;
+</pre>
+ </li>
+
+ <li>Create a method, {@code initShapes()} which populates this member variable:
+<pre>
+ private void initShapes(){
+
+ float triangleCoords[] = {
+ // X, Y, Z
+ -0.5f, -0.25f, 0,
+ 0.5f, -0.25f, 0,
+ 0.0f, 0.559016994f, 0
+ };
+
+ // initialize vertex Buffer for triangle
+ ByteBuffer vbb = ByteBuffer.allocateDirect(
+ // (# of coordinate values * 4 bytes per float)
+ triangleCoords.length * 4);
+ vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order
+ triangleVB = vbb.asFloatBuffer(); // create a floating point buffer from the ByteBuffer
+ triangleVB.put(triangleCoords); // add the coordinates to the FloatBuffer
+ triangleVB.position(0); // set the buffer to read the first coordinate
+
+ }
+</pre>
+ <p>This method defines a two-dimensional triangle with three equal sides.</p>
+ </li>
+ <li>Modify your {@code onSurfaceCreated()} method to initialize your triangle:
+ <pre>
+ public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+
+ // Set the background frame color
+ gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+
+ // initialize the triangle vertex array
+ initShapes();
+ }
+</pre>
+ <p class="caution"><strong>Caution:</strong> Shapes and other static objects should be initialized
+ once in your {@code onSurfaceCreated()} method for best performance. Avoid initializing the
+ new objects in {@code onDrawFrame()}, as this causes the system to re-create the objects
+ for every frame redraw and slows down your application.
+ </p>
+ </li>
+
+</ol>
+
+<p>You have now defined a triangle shape, but if you run the application, nothing appears. What?!
+You also have to tell OpenGL to draw the triangle, which you'll do in the next section.
+</p>
+
+
+<h3 id="draw-triangle">Draw the Triangle</h3>
+
+<p>Before you can draw your triangle, you must tell OpenGL that you are using vertex arrays. After
+that setup step, you can call the drawing APIs to display the triangle.</p>
+
+<p>To draw the triangle:</p>
+
+<ol>
+ <li>Add the {@code glEnableClientState()} method to the end of {@code onSurfaceCreated()} to
+enable vertex arrays.
+<pre>
+ // Enable use of vertex arrays
+ gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
+</pre>
+ <p>At this point, you are ready to draw the triangle object in the OpenGL view.</p>
+ </li>
+
+ <li>Add the following code to the end of your {@code onDrawFrame()} method to draw the triangle.
+<pre>
+ // Draw the triangle
+ gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 0.0f);
+ gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleVB);
+ gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
+</pre>
+ </li>
+ <li id="squashed-triangle">Run the app! Your application should look something like this:
+ </li>
+</ol>
+
+<img src="{@docRoot}images/opengl/helloopengl-es10-1.png">
+<p class="img-caption">
+ <strong>Figure 1.</strong> Triangle drawn without a projection or camera view.
+</p>
+
+<p>There are a few problems with this example. First of all, it is not going to impress your
+friends. Secondly, the triangle is a bit squashed and changes shape when you change the screen
+orientation of the device. The reason the shape is skewed is due to the fact that the object is
+being rendered in a frame which is not perfectly square. You'll fix that problem using a projection
+and camera view in the next section.</p>
+
+<p>Lastly, because the triangle is stationary, the system is redrawing the object repeatedly in
+exactly the same place, which is not the most efficient use of the OpenGL graphics pipeline. In the
+<a href="#motion">Add Motion</a> section, you'll make this shape rotate and justify
+this use of processing power.</p>
+
+<h2 id="projection-and-views">Apply Projection and Camera View</h2>
+
+<p>One of the basic problems in displaying graphics is that Android device displays are typically
+not square and, by default, OpenGL happily maps a perfectly square, uniform coordinate
+system onto your typically non-square screen. To solve this problem, you can apply an OpenGL
+projection mode and camera view (eye point) to transform the coordinates of your graphic objects
+so they have the correct proportions on any display. For more information about OpenGL coordinate
+mapping, see <a href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">Mapping
+Coordinates for Drawn Objects</a>.</p>
+
+<p>To apply projection and camera view transformations to your triangle:
+</p>
+<ol>
+ <li>Modify your {@code onSurfaceChanged()} method to enable {@link
+ javax.microedition.khronos.opengles.GL10#GL_PROJECTION GL10.GL_PROJECTION} mode, calculate the
+ screen ratio and apply the ratio as a transformation of the object coordinates.
+<pre>
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+ gl.glViewport(0, 0, width, height);
+
+ // make adjustments for screen ratio
+ float ratio = (float) width / height;
+ gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
+ gl.glLoadIdentity(); // reset the matrix to its default state
+ gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
+ }
+</pre>
+ </li>
+
+ <li>Next, modify your {@code onDrawFrame()} method to apply the {@link
+javax.microedition.khronos.opengles.GL10#GL_MODELVIEW GL_MODELVIEW} mode and set
+a view point using {@link android.opengl.GLU#gluLookAt(javax.microedition.khronos.opengles.GL10,
+float, float, float, float, float, float, float, float, float) GLU.gluLookAt()}.
+<pre>
+ public void onDrawFrame(GL10 gl) {
+ // Redraw background color
+ gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
+
+ // Set GL_MODELVIEW transformation mode
+ gl.glMatrixMode(GL10.GL_MODELVIEW);
+ gl.glLoadIdentity(); // reset the matrix to its default state
+
+ // When using GL_MODELVIEW, you must set the view point
+ GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+
+ // Draw the triangle
+ ...
+ }
+</pre>
+ </li>
+ <li>Run the updated application and you should see something like this:</li>
+</ol>
+
+<img src="{@docRoot}images/opengl/helloopengl-es10-2.png">
+<p class="img-caption">
+ <strong>Figure 2.</strong> Triangle drawn with a projection and camera view applied.
+</p>
+
+<p>Now that you have applied this transformation, the triangle has three equal sides, instead of the
+<a href="#squashed-triangle">squashed triangle</a> in the earlier version.</p>
+
+<h2 id="motion">Add Motion</h2>
+
+<p>While it may be an interesting exercise to create static graphic objects with OpenGL ES, chances
+are you want at least <em>some</em> of your objects to move. In this section, you'll add motion to
+your triangle by rotating it.</p>
+
+<p>To add rotation to your triangle:</p>
+<ol>
+ <li>Modify your {@code onDrawFrame()} method to rotate the triangle object:
+<pre>
+ public void onDrawFrame(GL10 gl) {
+ ...
+ // When using GL_MODELVIEW, you must set the view point
+ GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+
+ // Create a rotation for the triangle
+ long time = SystemClock.uptimeMillis() % 4000L;
+ float angle = 0.090f * ((int) time);
+ gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);
+
+ // Draw the triangle
+ ...
+ }
+</pre>
+ </li>
+ <li>Run the application and your triangle should rotate around its center.</li>
+</ol>
+
+
+<h2 id="touch">Respond to Touch Events</h2>
+<p>Making objects move according to a preset program like the rotating triangle is useful for
+getting some attention, but what if you want to have users interact with your OpenGL graphics? In
+this section, you'll learn how listen for touch events to let users interact with objects in your
+{@code HelloOpenGLES10SurfaceView}.</p>
+
+<p>The key to making your OpenGL application touch interactive is expanding your implementation of
+{@link android.opengl.GLSurfaceView} to override the {@link
+android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} to listen for touch events.
+Before you do that, however, you'll modify the renderer class to expose the rotation angle of the
+triangle. Afterwards, you'll modify the {@code HelloOpenGLES10SurfaceView} to process touch events
+and pass that data to your renderer.</p>
+
+<p>To make your triangle rotate in response to touch events:</p>
+
+<ol>
+ <li>Modify your {@code HelloOpenGLES10Renderer} class to include a new, public member so that
+your {@code HelloOpenGLES10SurfaceView} class is able to pass new rotation values your renderer:
+<pre>
+ public float mAngle;
+</pre>
+ </li>
+ <li>In your {@code onDrawFrame()} method, comment out the code that generates an angle and
+replace the {@code angle} variable with {@code mAngle}.
+<pre>
+ // Create a rotation for the triangle (Boring! Comment this out:)
+ // long time = SystemClock.uptimeMillis() % 4000L;
+ // float angle = 0.090f * ((int) time);
+
+ // Use the mAngle member as the rotation value
+ gl.glRotatef(mAngle, 0.0f, 0.0f, 1.0f);
+</pre>
+ </li>
+ <li>In your {@code HelloOpenGLES10SurfaceView} class, add the following member variables.
+<pre>
+ private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
+ private HelloOpenGLES10Renderer mRenderer;
+ private float mPreviousX;
+ private float mPreviousY;
+</pre>
+ </li>
+ <li>In the constructor method for {@code HelloOpenGLES10SurfaceView}, set the {@code mRenderer}
+member so you have a handle to pass in rotation input and set the render mode to {@link
+android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY}.
+<pre>
+ public HelloOpenGLES10SurfaceView(Context context){
+ super(context);
+ // set the mRenderer member
+ mRenderer = new HelloOpenGLES10Renderer();
+ setRenderer(mRenderer);
+
+ // Render the view only when there is a change
+ setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
+ }
+</pre>
+ </li>
+ <li>In your {@code HelloOpenGLES10SurfaceView} class, override the {@link
+android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} method to listen for touch
+events and pass them to your renderer.
+<pre>
+ &#64;Override
+ public boolean onTouchEvent(MotionEvent e) {
+ // MotionEvent reports input details from the touch screen
+ // and other input controls. In this case, you are only
+ // interested in events where the touch position changed.
+
+ float x = e.getX();
+ float y = e.getY();
+
+ switch (e.getAction()) {
+ case MotionEvent.ACTION_MOVE:
+
+ float dx = x - mPreviousX;
+ float dy = y - mPreviousY;
+
+ // reverse direction of rotation above the mid-line
+ if (y &gt; getHeight() / 2) {
+ dx = dx * -1 ;
+ }
+
+ // reverse direction of rotation to left of the mid-line
+ if (x &lt; getWidth() / 2) {
+ dy = dy * -1 ;
+ }
+
+ mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
+ requestRender();
+ }
+
+ mPreviousX = x;
+ mPreviousY = y;
+ return true;
+ }
+</pre>
+ <p class="note"><strong>Note:</strong> Touch events return pixel coordinates which <em>are not the
+same</em> as OpenGL coordinates. Touch coordinate [0,0] is the bottom-left of the screen and the
+highest value [max_X, max_Y] is the top-right corner of the screen. To match touch events to OpenGL
+graphic objects, you must translate touch coordinates into OpenGL coordinates.</p>
+ </li>
+ <li>Run the application and drag your finger or cursor around the screen to rotate the
+triangle.</li>
+</ol>
+<p>For another example of OpenGL touch event functionality, see <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+TouchRotateActivity.html">TouchRotateActivity</a>.</p> \ No newline at end of file
diff --git a/docs/html/resources/tutorials/opengl/opengl-es20.jd b/docs/html/resources/tutorials/opengl/opengl-es20.jd
new file mode 100644
index 000000000000..889dd5030f2c
--- /dev/null
+++ b/docs/html/resources/tutorials/opengl/opengl-es20.jd
@@ -0,0 +1,652 @@
+page.title=OpenGL ES 2.0
+parent.title=Tutorials
+parent.link=../../browser.html?tag=tutorial
+@jd:body
+
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#creating">Create an Activity with GLSurfaceView</a></li>
+ <li>
+ <a href="#drawing">Draw a Shape on GLSurfaceView</a>
+ <ol>
+ <li><a href="#define-triangle">Define a Triangle</a></li>
+ <li><a href="#draw-triangle">Draw the Triangle</a></li>
+ </ol>
+ </li>
+ <li><a href="#projection-and-views">Apply Projection and Camera Views</a></li>
+ <li><a href="#motion">Add Motion</a></li>
+ <li><a href="#touch">Respond to Touch Events</a></li>
+ </ol>
+ <h2 id="code-samples-list">Related Samples</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+index.html">API Demos - graphics</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+GLES20Activity.html">OpenGL ES 2.0 Sample</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+TouchRotateActivity.html">TouchRotateActivity</a></li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a></li>
+ <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL
+ES 1.0</a></li>
+ </ol>
+ </div>
+ </div>
+
+<p>This tutorial shows you how to create a simple Android application that uses the OpenGL ES 2.0
+API to perform some basic graphics operations. You'll learn how to:</p>
+
+<ul>
+ <li>Create an activity using {@link android.opengl.GLSurfaceView} and {@link
+android.opengl.GLSurfaceView.Renderer}</li>
+ <li>Create and draw a graphic object</li>
+ <li>Define a projection to correct for screen geometry</li>
+ <li>Define a camera view</li>
+ <li>Rotate a graphic object</li>
+ <li>Make graphics touch interactive</li>
+</ul>
+
+<p>The Android framework supports both the OpenGL ES 1.0/1.1 and OpenGL ES 2.0 APIs. You should
+carefully consider which version of the OpenGL ES API (1.0/1.1 or 2.0) is most appropriate for your
+needs. For more information, see
+<a href="{@docRoot}guide/topics/graphics/opengl.html#choosing-version">Choosing an OpenGL API
+Version</a>. If you would prefer to use OpenGL ES 1.0, see the <a
+href="{@docRoot}resources/tutorials/opengl/opengl-es10.jd">OpenGL ES 1.0 tutorial</a>.</p>
+
+<p>Before you start, you should understand how to create a basic Android application. If you do not
+know how to create an app, follow the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello
+World Tutorial</a> to familiarize yourself with the process.</p>
+
+<p class="caution"><strong>Caution:</strong> OpenGL ES 2.0 <em>is currently not supported</em> by
+the Android Emulator. You must have a physical test device running Android 2.2 (API Level 8) or
+higher in order to run and test the example code in this tutorial.</p>
+
+<h2 id="creating">Create an Activity with GLSurfaceView</h2>
+
+<p>To get started using OpenGL, you must implement both a {@link android.opengl.GLSurfaceView} and a
+{@link android.opengl.GLSurfaceView.Renderer}. The {@link android.opengl.GLSurfaceView} is the main
+view type for applications that use OpenGL and the {@link android.opengl.GLSurfaceView.Renderer}
+controls what is drawn within that view. (For more information about these classes, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.)</p>
+
+<p>To create an activity using {@code GLSurfaceView}:</p>
+
+<ol>
+ <li>Start a new Android project that targets Android 2.2 (API Level 8) or higher.
+ </li>
+ <li>Name the project <strong>HelloOpenGLES20</strong> and make sure it includes an activity called
+{@code HelloOpenGLES20}.
+ </li>
+ <li>Modify the {@code HelloOpenGLES20} class as follows:
+<pre>
+package com.example.android.apis.graphics;
+
+import android.app.Activity;
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.os.Bundle;
+
+public class HelloOpenGLES20 extends Activity {
+
+ private GLSurfaceView mGLView;
+
+ &#64;Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Create a GLSurfaceView instance and set it
+ // as the ContentView for this Activity
+ mGLView = new HelloOpenGLES20SurfaceView(this);
+ setContentView(mGLView);
+ }
+
+ &#64;Override
+ protected void onPause() {
+ super.onPause();
+ // The following call pauses the rendering thread.
+ // If your OpenGL application is memory intensive,
+ // you should consider de-allocating objects that
+ // consume significant memory here.
+ mGLView.onPause();
+ }
+
+ &#64;Override
+ protected void onResume() {
+ super.onResume();
+ // The following call resumes a paused rendering thread.
+ // If you de-allocated graphic objects for onPause()
+ // this is a good place to re-allocate them.
+ mGLView.onResume();
+ }
+}
+
+class HelloOpenGLES20SurfaceView extends GLSurfaceView {
+
+ public HelloOpenGLES20SurfaceView(Context context){
+ super(context);
+
+ // Create an OpenGL ES 2.0 context.
+ setEGLContextClientVersion(2);
+ // Set the Renderer for drawing on the GLSurfaceView
+ setRenderer(new HelloOpenGLES20Renderer());
+ }
+}
+</pre>
+ <p class="note"><strong>Note:</strong> You will get a compile error for the {@code
+HelloOpenGLES20Renderer} class reference. That's expected; you will fix this error in the next step.
+ </p>
+
+ <p>As shown above, this activity uses a single {@link android.opengl.GLSurfaceView} for its
+view. Notice that this activity implements crucial lifecycle callbacks for pausing and resuming its
+work.</p>
+
+ <p>The {@code HelloOpenGLES20SurfaceView} class in this example code above is just a thin wrapper
+for an instance of {@link android.opengl.GLSurfaceView} and is not strictly necessary for this
+example. However, if you want your application to monitor and respond to touch screen
+events&#8212;and we are guessing you do&#8212;you must extend {@link android.opengl.GLSurfaceView}
+to add touch event listeners, which you will learn how to do in the <a href="#touch">Reponding to
+Touch Events</a> section.</p>
+
+ <p>In order to draw graphics in the {@link android.opengl.GLSurfaceView}, you must define an
+implementation of {@link android.opengl.GLSurfaceView.Renderer}. In the next step, you create
+a renderer class to complete this OpenGL application.</p>
+ </li>
+
+ <li>Create a new file for the following class {@code HelloOpenGLES20Renderer}, which implements
+the {@link android.opengl.GLSurfaceView.Renderer} interface:
+
+<pre>
+package com.example.android.apis.graphics;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView;
+
+public class HelloOpenGLES20Renderer implements GLSurfaceView.Renderer {
+
+ public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+
+ // Set the background frame color
+ GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+ }
+
+ public void onDrawFrame(GL10 unused) {
+
+ // Redraw background color
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
+ }
+
+ public void onSurfaceChanged(GL10 unused, int width, int height) {
+ GLES20.glViewport(0, 0, width, height);
+ }
+
+}
+</pre>
+ <p>This minimal implementation of {@link android.opengl.GLSurfaceView.Renderer} provides the
+code structure needed to use OpenGL drawing methods:
+<ul>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
+ javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} is called once to set up the
+{@link android.opengl.GLSurfaceView}
+environment.</li>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
+ onDrawFrame()} is called for each redraw of the {@link
+android.opengl.GLSurfaceView}.</li>
+ <li>{@link
+ android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
+ int, int) onSurfaceChanged()} is called if the geometry of the {@link
+android.opengl.GLSurfaceView} changes, for example when the device's screen orientation
+changes.</li>
+</ul>
+ </p>
+ <p>For more information about these methods, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.
+</p>
+ </li>
+</ol>
+
+<p>The code example above creates a simple Android application that displays a grey screen using
+OpenGL ES 2.0 calls. While this application does not do anything very interesting, by creating these
+classes, you have layed the foundation needed to start drawing graphic elements with OpenGL ES
+2.0.</p>
+
+<p>If you are familiar with the OpenGL ES APIs, these classes should give you enough information
+to use the OpenGL ES 2.0 API and create graphics. However, if you need a bit more help getting
+started with OpenGL, head on to the next sections for a few more hints.</p>
+
+<p class="note"><strong>Note:</strong> If your application requires OpenGL 2.0, make sure you
+declare this in your manifest:</p>
+<pre>
+ &lt;!-- Tell the system this app requires OpenGL ES 2.0. --&gt;
+ &lt;uses-feature android:glEsVersion="0x00020000" android:required="true" /&gt;
+</pre>
+<p>For more information, see <a
+href="{@docRoot}guide/topics/graphics/opengl.html#manifest">OpenGL manifest declarations</a> in the
+<em>3D with OpenGL</em> document.</p>
+
+
+<h2 id="drawing">Draw a Shape on GLSurfaceView</h2>
+
+<p>Once you have implemented a {@link android.opengl.GLSurfaceView.Renderer}, the next step is to
+draw something with it. This section shows you how to define and draw a triangle.</p>
+
+<h3 id="define-triangle">Define a Triangle</h3>
+
+<p>OpenGL allows you to define objects using coordinates in three-dimensional space. So, before you
+ can draw a triangle, you must define its coordinates. In OpenGL, the typical way to do this is to
+ define a vertex array for the coordinates.</p>
+
+<p>By default, OpenGL ES assumes a coordinate system where [0,0,0] (X,Y,Z) specifies the center of
+ the {@link android.opengl.GLSurfaceView} frame, [1,1,0] is the top-right corner of the frame and
+[-1,-1,0] is bottom-left corner of the frame.</p>
+
+<p>To define a vertex array for a triangle:</p>
+
+<ol>
+ <li>In your {@code HelloOpenGLES20Renderer} class, add new member variable to contain the
+vertices of a triangle shape:
+<pre>
+ private FloatBuffer triangleVB;
+</pre>
+ </li>
+
+ <li>Create a method, {@code initShapes()} which populates this member variable:
+<pre>
+ private void initShapes(){
+
+ float triangleCoords[] = {
+ // X, Y, Z
+ -0.5f, -0.25f, 0,
+ 0.5f, -0.25f, 0,
+ 0.0f, 0.559016994f, 0
+ };
+
+ // initialize vertex Buffer for triangle
+ ByteBuffer vbb = ByteBuffer.allocateDirect(
+ // (# of coordinate values * 4 bytes per float)
+ triangleCoords.length * 4);
+ vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order
+ triangleVB = vbb.asFloatBuffer(); // create a floating point buffer from the ByteBuffer
+ triangleVB.put(triangleCoords); // add the coordinates to the FloatBuffer
+ triangleVB.position(0); // set the buffer to read the first coordinate
+
+ }
+</pre>
+ <p>This method defines a two-dimensional triangle shape with three equal sides.</p>
+ </li>
+ <li>Modify your {@code onSurfaceCreated()} method to initialize your triangle:
+<pre>
+ public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+
+ // Set the background frame color
+ GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+
+ // initialize the triangle vertex array
+ initShapes();
+ }
+</pre>
+ <p class="caution"><strong>Caution:</strong> Shapes and other static objects should be initialized
+ once in your {@code onSurfaceCreated()} method for best performance. Avoid initializing the
+ new objects in {@code onDrawFrame()}, as this causes the system to re-create the objects
+ for every frame redraw and slows down your application.
+ </p>
+ </li>
+
+</ol>
+
+<p>You have now defined a triangle shape, but if you run the application, nothing appears. What?!
+You also have to tell OpenGL to draw the triangle, which you'll do in the next section.
+</p>
+
+
+<h3 id="draw-triangle">Draw the Triangle</h3>
+
+<p>The OpenGL ES 2.0 requires a bit more code than OpenGL ES 1.0/1.1 in order to draw objects. In
+this section, you'll create vertex and fragment shaders, a shader loader, apply the shaders, enable
+the use of vertex arrays for your triangle and, finally, draw it on screen.</p>
+
+<p>To draw the triangle:</p>
+
+<ol>
+ <li>In your {@code HelloOpenGLES20Renderer} class, define a vertex shader and a fragment
+shader. Shader code is defined as a string which is compiled and run by the OpenGL ES 2.0 rendering
+engine.
+<pre>
+ private final String vertexShaderCode =
+ "attribute vec4 vPosition; \n" +
+ "void main(){ \n" +
+ " gl_Position = vPosition; \n" +
+ "} \n";
+
+ private final String fragmentShaderCode =
+ "precision mediump float; \n" +
+ "void main(){ \n" +
+ " gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" +
+ "} \n";
+</pre>
+ <p>The vertex shader controls how OpenGL positions and draws the vertices of shapes in space.
+The fragment shader controls what OpenGL draws <em>between</em> the vertices of shapes.</p>
+ </li>
+ <li>In your {@code HelloOpenGLES20Renderer} class, create a method for loading the shaders.
+<pre>
+ private int loadShader(int type, String shaderCode){
+
+ // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
+ // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
+ int shader = GLES20.glCreateShader(type);
+
+ // add the source code to the shader and compile it
+ GLES20.glShaderSource(shader, shaderCode);
+ GLES20.glCompileShader(shader);
+
+ return shader;
+ }
+</pre>
+ </li>
+
+ <li>Add the following members to your {@code HelloOpenGLES20Renderer} class for an OpenGL
+Program and the positioning control for your triangle.
+<pre>
+ private int mProgram;
+ private int maPositionHandle;
+</pre>
+ <p>In OpenGL ES 2.0, you attach vertex and fragment shaders to a <em>Program</em> and then
+apply the program to the OpenGL graphics pipeline.</p>
+ </li>
+
+ <li>Add the following code to the end of your {@code onSurfaceCreated()} method to load the
+shaders and attach them to an OpenGL Program.
+<pre>
+ int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
+ int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
+
+ mProgram = GLES20.glCreateProgram(); // create empty OpenGL Program
+ GLES20.glAttachShader(mProgram, vertexShader); // add the vertex shader to program
+ GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
+ GLES20.glLinkProgram(mProgram); // creates OpenGL program executables
+
+ // get handle to the vertex shader's vPosition member
+ maPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
+</pre>
+ <p>At this point, you are ready to draw the triangle object in the OpenGL view.</p>
+ </li>
+
+ <li>Add the following code to the end of your {@code onDrawFrame()} method apply the OpenGL
+program you created, load the triangle object and draw the triangle.
+<pre>
+ // Add program to OpenGL environment
+ GLES20.glUseProgram(mProgram);
+
+ // Prepare the triangle data
+ GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, triangleVB);
+ GLES20.glEnableVertexAttribArray(maPositionHandle);
+
+ // Draw the triangle
+ GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
+</pre>
+ </li>
+ <li id="squashed-triangle">Run the app! Your application should look something like this:
+ </li>
+</ol>
+
+<img src="{@docRoot}images/opengl/helloopengl-es20-1.png">
+<p class="img-caption">
+ <strong>Figure 1.</strong> Triangle drawn without a projection or camera view.
+</p>
+
+<p>There are a few problems with this example. First of all, it is not going to impress your
+friends. Secondly, the triangle is a bit squashed and changes shape when you change the screen
+orientation of the device. The reason the shape is skewed is due to the fact that the object is
+being rendered in a frame which is not perfectly square. You'll fix that problem using a projection
+and camera view in the next section.</p>
+
+<p>Lastly, because the triangle is stationary, the system is redrawing the object repeatedly in
+exactly the same place, which is not the most efficient use of the OpenGL graphics pipeline. In the
+<a href="#motion">Add Motion</a> section, you'll make this shape rotate and justify
+this use of processing power.</p>
+
+<h2 id="projection-and-views">Apply Projection and Camera View</h2>
+
+<p>One of the basic problems in displaying graphics is that Android device displays are typically
+not square and, by default, OpenGL happily maps a perfectly square, uniform coordinate
+system onto your typically non-square screen. To solve this problem, you can apply an OpenGL
+projection mode and camera view (eye point) to transform the coordinates of your graphic objects
+so they have the correct proportions on any display. For more information about OpenGL coordinate
+mapping, see <a href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">Mapping
+Coordinates for Drawn Objects</a>.</p>
+
+<p>To apply projection and camera view transformations to your triangle:
+</p>
+<ol>
+ <li>Add the following members to your {@code HelloOpenGLES20Renderer} class.
+<pre>
+ private int muMVPMatrixHandle;
+ private float[] mMVPMatrix = new float[16];
+ private float[] mMMatrix = new float[16];
+ private float[] mVMatrix = new float[16];
+ private float[] mProjMatrix = new float[16];
+</pre>
+ </li>
+ <li>Modify your {@code vertexShaderCode} string to add a variable for a model view
+projection matrix.
+<pre>
+ private final String vertexShaderCode =
+ // This matrix member variable provides a hook to manipulate
+ // the coordinates of the objects that use this vertex shader
+ "uniform mat4 uMVPMatrix; \n" +
+
+ "attribute vec4 vPosition; \n" +
+ "void main(){ \n" +
+
+ // the matrix must be included as a modifier of gl_Position
+ " gl_Position = uMVPMatrix * vPosition; \n" +
+
+ "} \n";
+</pre>
+ </li>
+ <li>Modify the {@code onSurfaceChanged()} method to calculate the device screen ratio and
+create a projection matrix.
+<pre>
+ public void onSurfaceChanged(GL10 unused, int width, int height) {
+ GLES20.glViewport(0, 0, width, height);
+
+ float ratio = (float) width / height;
+
+ // this projection matrix is applied to object coodinates
+ // in the onDrawFrame() method
+ Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
+ }
+</pre>
+ </li>
+ <li>Add the following code to the end of your {@code onSurfaceChanged()} method to
+reference the {@code uMVPMatrix} shader matrix variable you added in step 2.
+<pre>
+ muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+</pre>
+ </li>
+ <li>Add the following code to the end of your {@code onSurfaceChanged()} method to define
+a camera view matrix.
+<pre>
+ Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+</pre>
+ </li>
+ <li>Finally, modify your {@code onDrawFrame()} method to combine the projection and
+camera view matrices and then apply the combined transformation to the OpenGL rendering pipeline.
+<pre>
+ public void onDrawFrame(GL10 unused) {
+ ...
+ // Apply a ModelView Projection transformation
+ Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
+ GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+
+ // Draw the triangle
+ ...
+ }
+</pre>
+ </li>
+ <li>Run the updated application and you should see something like this:</li>
+</ol>
+
+<img src="{@docRoot}images/opengl/helloopengl-es20-2.png">
+<p class="img-caption">
+ <strong>Figure 2.</strong> Triangle drawn with a projection and camera view applied.
+</p>
+
+<p>Now that you have applied this transformation, the triangle has three equal sides, instead of the
+<a href="#squashed-triangle">squashed triangle</a> in the earlier version.</p>
+
+<h2 id="motion">Add Motion</h2>
+
+<p>While it may be an interesting exercise to create static graphic objects with OpenGL ES, chances
+are you want at least <em>some</em> of your objects to move. In this section, you'll add motion to
+your triangle by rotating it.</p>
+
+<p>To add rotation to your triangle:</p>
+<ol>
+ <li>Add an additional tranformation matrix member to your {@code HelloOpenGLES20Renderer}
+class.
+ <pre>
+ private float[] mMMatrix = new float[16];
+ </pre>
+ </li>
+ <li>Modify your {@code onDrawFrame()} method to rotate the triangle object.
+<pre>
+ public void onDrawFrame(GL10 gl) {
+ ...
+
+ // Create a rotation for the triangle
+ long time = SystemClock.uptimeMillis() % 4000L;
+ float angle = 0.090f * ((int) time);
+ Matrix.setRotateM(mMMatrix, 0, angle, 0, 0, 1.0f);
+ Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
+ Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
+
+ // Apply a ModelView Projection transformation
+ GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+
+ // Draw the triangle
+ ...
+ }
+</pre>
+ </li>
+ <li>Run the application and your triangle should rotate around its center.</li>
+</ol>
+
+
+<h2 id="touch">Respond to Touch Events</h2>
+<p>Making objects move according to a preset program like the rotating triangle is useful for
+getting some attention, but what if you want to have users interact with your OpenGL graphics? In
+this section, you'll learn how listen for touch events to let users interact with objects in your
+{@code HelloOpenGLES20SurfaceView}.</p>
+
+<p>The key to making your OpenGL application touch interactive is expanding your implementation of
+{@link android.opengl.GLSurfaceView} to override the {@link
+android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} to listen for touch events.
+Before you do that, however, you'll modify the renderer class to expose the rotation angle of the
+triangle. Afterwards, you'll modify the {@code HelloOpenGLES20SurfaceView} to process touch events
+and pass that data to your renderer.</p>
+
+<p>To make your triangle rotate in response to touch events:</p>
+
+<ol>
+ <li>Modify your {@code HelloOpenGLES20Renderer} class to include a new, public member so that
+your {@code HelloOpenGLES10SurfaceView} class is able to pass new rotation values your renderer:
+<pre>
+ public float mAngle;
+</pre>
+ </li>
+ <li>In your {@code onDrawFrame()} method, comment out the code that generates an angle and
+replace the {@code angle} variable with {@code mAngle}.
+<pre>
+ // Create a rotation for the triangle (Boring! Comment this out:)
+ // long time = SystemClock.uptimeMillis() % 4000L;
+ // float angle = 0.090f * ((int) time);
+
+ // Use the mAngle member as the rotation value
+ Matrix.setRotateM(mMMatrix, 0, mAngle, 0, 0, 1.0f);
+</pre>
+ </li>
+ <li>In your {@code HelloOpenGLES20SurfaceView} class, add the following member variables.
+<pre>
+ private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
+ private HelloOpenGLES20Renderer mRenderer;
+ private float mPreviousX;
+ private float mPreviousY;
+</pre>
+ </li>
+ <li>In the constructor method for {@code HelloOpenGLES20SurfaceView}, set the {@code mRenderer}
+member so you have a handle to pass in rotation input and set the render mode to {@link
+android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY}.<pre>
+ public HelloOpenGLES20SurfaceView(Context context){
+ super(context);
+ // Create an OpenGL ES 2.0 context.
+ setEGLContextClientVersion(2);
+
+ // set the mRenderer member
+ mRenderer = new HelloOpenGLES20Renderer();
+ setRenderer(mRenderer);
+
+ // Render the view only when there is a change
+ setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
+ }
+</pre>
+ </li>
+ <li>In your {@code HelloOpenGLES20SurfaceView} class, override the {@link
+android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} method to listen for touch
+events and pass them to your renderer.
+<pre>
+ &#64;Override
+ public boolean onTouchEvent(MotionEvent e) {
+ // MotionEvent reports input details from the touch screen
+ // and other input controls. In this case, you are only
+ // interested in events where the touch position changed.
+
+ float x = e.getX();
+ float y = e.getY();
+
+ switch (e.getAction()) {
+ case MotionEvent.ACTION_MOVE:
+
+ float dx = x - mPreviousX;
+ float dy = y - mPreviousY;
+
+ // reverse direction of rotation above the mid-line
+ if (y &gt; getHeight() / 2) {
+ dx = dx * -1 ;
+ }
+
+ // reverse direction of rotation to left of the mid-line
+ if (x &lt; getWidth() / 2) {
+ dy = dy * -1 ;
+ }
+
+ mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
+ requestRender();
+ }
+
+ mPreviousX = x;
+ mPreviousY = y;
+ return true;
+ }
+</pre>
+ <p class="note"><strong>Note:</strong> Touch events return pixel coordinates which <em>are not the
+same</em> as OpenGL coordinates. Touch coordinate [0,0] is the bottom-left of the screen and the
+highest value [max_X, max_Y] is the top-right corner of the screen. To match touch events to OpenGL
+graphic objects, you must translate touch coordinates into OpenGL coordinates.</p>
+ </li>
+ <li>Run the application and drag your finger or cursor around the screen to rotate the
+triangle.</li>
+</ol>
+<p>For another example of OpenGL touch event functionality, see <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
+TouchRotateActivity.html">TouchRotateActivity</a>.</p> \ No newline at end of file
diff --git a/docs/html/sdk/ndk/overview.jd b/docs/html/sdk/ndk/overview.jd
index 93c664dac5a4..85599f76600d 100644
--- a/docs/html/sdk/ndk/overview.jd
+++ b/docs/html/sdk/ndk/overview.jd
@@ -457,7 +457,8 @@ adb install bin/NativeActivity-debug.apk
<li>Mac OS X 10.4.8 or later (x86 only)</li>
- <li>Linux (32- or 64-bit, tested on Linux Ubuntu Dapper Drake)</li>
+ <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
+later)</li>
</ul>
<h4>Required development tools</h4>
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 49dbbca5a6f3..6698d311124e 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -277,10 +277,19 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
*/
public boolean setDrawableByLayerId(int id, Drawable drawable) {
final ChildDrawable[] layers = mLayerState.mChildren;
- drawable.setCallback(this);
for (int i = mLayerState.mNum - 1; i >= 0; i--) {
if (layers[i].mId == id) {
+ if (layers[i].mDrawable != null) {
+ if (drawable != null) {
+ Rect bounds = layers[i].mDrawable.getBounds();
+ drawable.setBounds(bounds);
+ }
+ layers[i].mDrawable.setCallback(null);
+ }
+ if (drawable != null) {
+ drawable.setCallback(this);
+ }
layers[i].mDrawable = drawable;
return true;
}
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index b6614965b0f5..6c91dfc724c8 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -597,13 +597,24 @@ public:
// CameraHardwareInterface.autoFocus in this mode.
static const char FOCUS_MODE_EDOF[];
// Continuous auto focus mode intended for video recording. The camera
- // continuously tries to focus. This is ideal for shooting video.
- // Applications still can call CameraHardwareInterface.takePicture in this
- // mode but the subject may not be in focus. Auto focus starts when the
- // parameter is set. Applications should not call
- // CameraHardwareInterface.autoFocus in this mode. To stop continuous focus,
- // applications should change the focus mode to other modes.
+ // continuously tries to focus. This is the best choice for video
+ // recording because the focus changes smoothly . Applications still can
+ // call CameraHardwareInterface.takePicture in this mode but the subject may
+ // not be in focus. Auto focus starts when the parameter is set.
+ // Applications should not call CameraHardwareInterface.autoFocus in this
+ // mode. To stop continuous focus, applications should change the focus mode
+ // to other modes.
static const char FOCUS_MODE_CONTINUOUS_VIDEO[];
+ // Continuous auto focus mode intended for taking pictures. The camera
+ // continuously tries to focus. The speed of focus change is more aggressive
+ // than FOCUS_MODE_CONTINUOUS_VIDEO. Auto focus starts when the parameter is
+ // set. If applications call autoFocus in this mode, the focus callback will
+ // immediately return with a boolean that indicates the focus is sharp or
+ // not. The apps can then decide if they want to take a picture immediately
+ // or to change the focus mode to auto, and run a full autofocus cycle. To
+ // stop continuous focus, applications should change the focus mode to other
+ // modes.
+ static const char FOCUS_MODE_CONTINUOUS_PICTURE[];
private:
DefaultKeyedVector<String8,String8> mMap;
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h
index a6fb12e29638..493993d6d983 100644
--- a/include/gui/SurfaceTexture.h
+++ b/include/gui/SurfaceTexture.h
@@ -275,7 +275,7 @@ private:
enum BufferState {
// FREE indicates that the buffer is not currently being used and
// will not be used in the future until it gets dequeued and
- // subseqently queued by the client.
+ // subsequently queued by the client.
FREE = 0,
// DEQUEUED indicates that the buffer has been dequeued by the
diff --git a/include/media/MediaProfiles.h b/include/media/MediaProfiles.h
index 69d50011d16f..4b023d146018 100644
--- a/include/media/MediaProfiles.h
+++ b/include/media/MediaProfiles.h
@@ -140,6 +140,19 @@ public:
int getVideoEditorCapParamByName(const char *name) const;
/**
+ * Returns the value for the given param name for the video editor export codec format
+ * param or -1 if error.
+ * Supported param name are:
+ * videoeditor.export.profile - export video profile
+ * videoeditor.export.level - export video level
+ * Supported param codec are:
+ * 1 for h263
+ * 2 for h264
+ * 3 for mpeg4
+ */
+ int getVideoEditorExportParamByName(const char *name, int codec) const;
+
+ /**
* Returns the audio encoders supported.
*/
Vector<audio_encoder> getAudioEncoders() const;
@@ -332,7 +345,14 @@ private:
int mCameraId;
Vector<int> mLevels;
};
-
+ struct ExportVideoProfile {
+ ExportVideoProfile(int codec, int profile, int level)
+ :mCodec(codec),mProfile(profile),mLevel(level) {}
+ ~ExportVideoProfile() {}
+ int mCodec;
+ int mProfile;
+ int mLevel;
+ };
struct VideoEditorCap {
VideoEditorCap(int inFrameWidth, int inFrameHeight,
int outFrameWidth, int outFrameHeight)
@@ -374,6 +394,7 @@ private:
static AudioEncoderCap* createAudioEncoderCap(const char **atts);
static VideoEditorCap* createVideoEditorCap(
const char **atts, MediaProfiles *profiles);
+ static ExportVideoProfile* createExportVideoProfile(const char **atts);
static CamcorderProfile* createCamcorderProfile(
int cameraId, const char **atts, Vector<int>& cameraIds);
@@ -418,6 +439,8 @@ private:
static void createDefaultImageEncodingQualityLevels(MediaProfiles *profiles);
static void createDefaultImageDecodingMaxMemory(MediaProfiles *profiles);
static void createDefaultVideoEditorCap(MediaProfiles *profiles);
+ static void createDefaultExportVideoProfiles(MediaProfiles *profiles);
+
static VideoEncoderCap* createDefaultH263VideoEncoderCap();
static VideoEncoderCap* createDefaultM4vVideoEncoderCap();
static AudioEncoderCap* createDefaultAmrNBEncoderCap();
@@ -475,6 +498,7 @@ private:
RequiredProfiles *mRequiredProfileRefs;
Vector<int> mCameraIds;
VideoEditorCap* mVideoEditorCap;
+ Vector<ExportVideoProfile*> mVideoEditorExportProfiles;
};
}; // namespace android
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index f13e9bb5ac47..e965f1402445 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -36,6 +36,7 @@ struct ACodec : public AHierarchicalStateMachine {
kWhatShutdownCompleted = 'scom',
kWhatFlushCompleted = 'fcom',
kWhatOutputFormatChanged = 'outC',
+ kWhatError = 'erro',
};
ACodec();
@@ -58,7 +59,6 @@ private:
struct OutputPortSettingsChangedState;
struct ExecutingToIdleState;
struct IdleToLoadedState;
- struct ErrorState;
struct FlushingState;
enum {
@@ -102,7 +102,6 @@ private:
sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState;
sp<ExecutingToIdleState> mExecutingToIdleState;
sp<IdleToLoadedState> mIdleToLoadedState;
- sp<ErrorState> mErrorState;
sp<FlushingState> mFlushingState;
AString mComponentName;
diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h
index dba98a32c325..6b31ca4cb8bb 100644
--- a/include/surfaceflinger/ISurfaceComposer.h
+++ b/include/surfaceflinger/ISurfaceComposer.h
@@ -132,9 +132,10 @@ public:
virtual status_t turnElectronBeamOff(int32_t mode) = 0;
virtual status_t turnElectronBeamOn(int32_t mode) = 0;
- /* verify that an ISurface was created by SurfaceFlinger.
+ /* verify that an ISurfaceTexture was created by SurfaceFlinger.
*/
- virtual bool authenticateSurface(const sp<ISurface>& surface) const = 0;
+ virtual bool authenticateSurfaceTexture(
+ const sp<ISurfaceTexture>& surface) const = 0;
};
// ----------------------------------------------------------------------------
diff --git a/include/ui/KeycodeLabels.h b/include/ui/KeycodeLabels.h
index 8383957cdfde..2efe8ca0ee50 100755
--- a/include/ui/KeycodeLabels.h
+++ b/include/ui/KeycodeLabels.h
@@ -278,6 +278,8 @@ static const KeycodeLabel AXES[] = {
{ "WHEEL", 21 },
{ "GAS", 22 },
{ "BRAKE", 23 },
+ { "DISTANCE", 24 },
+ { "TILT", 25 },
{ "GENERIC_1", 32 },
{ "GENERIC_2", 33 },
{ "GENERIC_3", 34 },
diff --git a/include/utils/String16.h b/include/utils/String16.h
index 584f53f30065..360f407c36b5 100644
--- a/include/utils/String16.h
+++ b/include/utils/String16.h
@@ -156,7 +156,7 @@ inline String16& String16::operator+=(const String16& other)
inline String16 String16::operator+(const String16& other) const
{
- String16 tmp;
+ String16 tmp(*this);
tmp += other;
return tmp;
}
diff --git a/libs/camera/CameraParameters.cpp b/libs/camera/CameraParameters.cpp
index 51b96c1fe9dd..0eb5d50db2c5 100644
--- a/libs/camera/CameraParameters.cpp
+++ b/libs/camera/CameraParameters.cpp
@@ -160,6 +160,7 @@ const char CameraParameters::FOCUS_MODE_MACRO[] = "macro";
const char CameraParameters::FOCUS_MODE_FIXED[] = "fixed";
const char CameraParameters::FOCUS_MODE_EDOF[] = "edof";
const char CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO[] = "continuous-video";
+const char CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE[] = "continuous-picture";
CameraParameters::CameraParameters()
: mMap()
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index c1156d5c86c5..030a83e9675e 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -31,6 +31,8 @@
#include <ui/DisplayInfo.h>
+#include <gui/ISurfaceTexture.h>
+
#include <utils/Log.h>
// ---------------------------------------------------------------------------
@@ -166,35 +168,36 @@ public:
return reply.readInt32();
}
- virtual bool authenticateSurface(const sp<ISurface>& surface) const
+ virtual bool authenticateSurfaceTexture(
+ const sp<ISurfaceTexture>& surfaceTexture) const
{
Parcel data, reply;
int err = NO_ERROR;
err = data.writeInterfaceToken(
ISurfaceComposer::getInterfaceDescriptor());
if (err != NO_ERROR) {
- LOGE("ISurfaceComposer::authenticateSurface: error writing "
+ LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
"interface descriptor: %s (%d)", strerror(-err), -err);
return false;
}
- err = data.writeStrongBinder(surface->asBinder());
+ err = data.writeStrongBinder(surfaceTexture->asBinder());
if (err != NO_ERROR) {
- LOGE("ISurfaceComposer::authenticateSurface: error writing strong "
- "binder to parcel: %s (%d)", strerror(-err), -err);
+ LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
+ "strong binder to parcel: %s (%d)", strerror(-err), -err);
return false;
}
err = remote()->transact(BnSurfaceComposer::AUTHENTICATE_SURFACE, data,
&reply);
if (err != NO_ERROR) {
- LOGE("ISurfaceComposer::authenticateSurface: error performing "
- "transaction: %s (%d)", strerror(-err), -err);
+ LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
+ "performing transaction: %s (%d)", strerror(-err), -err);
return false;
}
int32_t result = 0;
err = reply.readInt32(&result);
if (err != NO_ERROR) {
- LOGE("ISurfaceComposer::authenticateSurface: error retrieving "
- "result: %s (%d)", strerror(-err), -err);
+ LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
+ "retrieving result: %s (%d)", strerror(-err), -err);
return false;
}
return result != 0;
@@ -291,8 +294,9 @@ status_t BnSurfaceComposer::onTransact(
} break;
case AUTHENTICATE_SURFACE: {
CHECK_INTERFACE(ISurfaceComposer, data, reply);
- sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
- int32_t result = authenticateSurface(surface) ? 1 : 0;
+ sp<ISurfaceTexture> surfaceTexture =
+ interface_cast<ISurfaceTexture>(data.readStrongBinder());
+ int32_t result = authenticateSurfaceTexture(surfaceTexture) ? 1 : 0;
reply->writeInt32(result);
} break;
default:
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index 2c702511de51..54d04aada8b1 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -342,9 +342,6 @@ sp<IBinder> Surface::asBinder() const {
int Surface::query(int what, int* value) const {
switch (what) {
- case NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER:
- *value = 1;
- return NO_ERROR;
case NATIVE_WINDOW_CONCRETE_TYPE:
*value = NATIVE_WINDOW_SURFACE;
return NO_ERROR;
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index 7ac43431f1d1..ac9b33b61cd8 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -36,6 +36,10 @@
#include <utils/Log.h>
#include <utils/String8.h>
+
+#define ALLOW_DEQUEUE_CURRENT_BUFFER false
+
+
namespace android {
// Transform matrices
@@ -294,9 +298,22 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
if (state == BufferSlot::DEQUEUED) {
dequeuedCount++;
}
- if (state == BufferSlot::FREE /*|| i == mCurrentTexture*/) {
- foundSync = i;
- if (i != mCurrentTexture) {
+
+ // if buffer is FREE it CANNOT be current
+ LOGW_IF((state == BufferSlot::FREE) && (mCurrentTexture==i),
+ "dequeueBuffer: buffer %d is both FREE and current!", i);
+
+ if (ALLOW_DEQUEUE_CURRENT_BUFFER) {
+ if (state == BufferSlot::FREE || i == mCurrentTexture) {
+ foundSync = i;
+ if (i != mCurrentTexture) {
+ found = i;
+ break;
+ }
+ }
+ } else {
+ if (state == BufferSlot::FREE) {
+ foundSync = i;
found = i;
break;
}
@@ -325,7 +342,7 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
}
// we're in synchronous mode and didn't find a buffer, we need to wait
- // for for some buffers to be consumed
+ // for some buffers to be consumed
tryAgain = mSynchronousMode && (foundSync == INVALID_BUFFER_SLOT);
if (tryAgain) {
mDequeueCondition.wait(mMutex);
@@ -482,17 +499,16 @@ status_t SurfaceTexture::queueBuffer(int buf, int64_t timestamp,
mSlots[buf].mScalingMode = mNextScalingMode;
mSlots[buf].mTimestamp = timestamp;
mDequeueCondition.signal();
+
+ *outWidth = mDefaultWidth;
+ *outHeight = mDefaultHeight;
+ *outTransform = 0;
} // scope for the lock
// call back without lock held
if (listener != 0) {
listener->onFrameAvailable();
}
-
- *outWidth = mDefaultWidth;
- *outHeight = mDefaultHeight;
- *outTransform = 0;
-
return OK;
}
@@ -847,6 +863,7 @@ void SurfaceTexture::freeBufferLocked(int i) {
void SurfaceTexture::freeAllBuffersLocked() {
LOGW_IF(!mQueue.isEmpty(),
"freeAllBuffersLocked called but mQueue is not empty");
+ mCurrentTexture = INVALID_BUFFER_SLOT;
for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
freeBufferLocked(i);
}
@@ -860,6 +877,7 @@ void SurfaceTexture::freeAllBuffersExceptHeadLocked() {
Fifo::iterator front(mQueue.begin());
head = *front;
}
+ mCurrentTexture = INVALID_BUFFER_SLOT;
for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
if (i != head) {
freeBufferLocked(i);
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index e91be84c48a6..5a35b4d482e2 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -18,6 +18,8 @@
//#define LOG_NDEBUG 0
#include <gui/SurfaceTextureClient.h>
+#include <surfaceflinger/ISurfaceComposer.h>
+#include <surfaceflinger/SurfaceComposerClient.h>
#include <utils/Log.h>
@@ -234,7 +236,15 @@ int SurfaceTextureClient::query(int what, int* value) const {
}
break;
case NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER:
- *value = 0;
+ {
+ sp<ISurfaceComposer> composer(
+ ComposerService::getComposerService());
+ if (composer->authenticateSurfaceTexture(mSurfaceTexture)) {
+ *value = 1;
+ } else {
+ *value = 0;
+ }
+ }
return NO_ERROR;
case NATIVE_WINDOW_CONCRETE_TYPE:
*value = NATIVE_WINDOW_SURFACE_TEXTURE_CLIENT;
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index dd75497c19a9..a8ae5c6eebd9 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -203,6 +203,10 @@ struct Layer {
return texTransform;
}
+ inline mat4& getTransform() {
+ return transform;
+ }
+
/**
* Bounds of the layer.
*/
@@ -282,6 +286,11 @@ private:
*/
mat4 texTransform;
+ /**
+ * Optional transform.
+ */
+ mat4 transform;
+
}; // struct Layer
}; // namespace uirenderer
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index 0af017787305..52981259336e 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -162,7 +162,7 @@ bool LayerCache::put(Layer* layer) {
// TODO: Use an LRU
while (mSize + size > mMaxSize) {
size_t position = 0;
-#if LAYER_REMOVE_BIGGEST
+#if LAYER_REMOVE_BIGGEST_FIRST
position = mCache.size() - 1;
#endif
Layer* victim = mCache.itemAt(position).mLayer;
diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h
index 63bb824c1281..c14c9caa9a5a 100644
--- a/libs/hwui/LayerCache.h
+++ b/libs/hwui/LayerCache.h
@@ -19,6 +19,7 @@
#include "Debug.h"
#include "Layer.h"
+#include "Properties.h"
#include "utils/SortedList.h"
namespace android {
@@ -28,11 +29,6 @@ namespace uirenderer {
// Defines
///////////////////////////////////////////////////////////////////////////////
-// Indicates whether to remove the biggest layers first, or the smaller ones
-#define LAYER_REMOVE_BIGGEST 0
-// Textures used by layers must have dimensions multiples of this number
-#define LAYER_SIZE 64
-
// Debug
#if DEBUG_LAYERS
#define LAYER_LOGD(...) LOGD(__VA_ARGS__)
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index 9fc5131ee931..769c99cf293a 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -51,6 +51,7 @@ void Matrix4::loadIdentity() {
data[kTranslateZ] = 0.0f;
data[kPerspective2] = 1.0f;
+ mIsIdentity = true;
mSimpleMatrix = true;
}
@@ -71,14 +72,21 @@ bool Matrix4::isSimple() {
return mSimpleMatrix;
}
+bool Matrix4::isIdentity() {
+ return mIsIdentity;
+}
+
void Matrix4::load(const float* v) {
memcpy(data, v, sizeof(data));
+ // TODO: Do something smarter here
mSimpleMatrix = false;
+ mIsIdentity = false;
}
void Matrix4::load(const Matrix4& v) {
memcpy(data, v.data, sizeof(data));
mSimpleMatrix = v.mSimpleMatrix;
+ mIsIdentity = v.mIsIdentity;
}
void Matrix4::load(const SkMatrix& v) {
@@ -99,6 +107,7 @@ void Matrix4::load(const SkMatrix& v) {
data[kScaleZ] = 1.0f;
mSimpleMatrix = (v.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask));
+ mIsIdentity = v.isIdentity();
}
void Matrix4::copyTo(SkMatrix& v) const {
@@ -148,6 +157,7 @@ void Matrix4::loadInverse(const Matrix4& v) {
v.data[kSkewX] * v.data[kSkewY]) * scale;
mSimpleMatrix = v.mSimpleMatrix;
+ mIsIdentity = v.mIsIdentity;
}
void Matrix4::copyTo(float* v) const {
@@ -166,20 +176,27 @@ void Matrix4::multiply(float v) {
for (int i = 0; i < 16; i++) {
data[i] *= v;
}
+ mIsIdentity = false;
}
void Matrix4::loadTranslate(float x, float y, float z) {
loadIdentity();
+
data[kTranslateX] = x;
data[kTranslateY] = y;
data[kTranslateZ] = z;
+
+ mIsIdentity = false;
}
void Matrix4::loadScale(float sx, float sy, float sz) {
loadIdentity();
+
data[kScaleX] = sx;
data[kScaleY] = sy;
data[kScaleZ] = sz;
+
+ mIsIdentity = false;
}
void Matrix4::loadSkew(float sx, float sy) {
@@ -198,6 +215,7 @@ void Matrix4::loadSkew(float sx, float sy) {
data[kPerspective2] = 1.0f;
mSimpleMatrix = false;
+ mIsIdentity = false;
}
void Matrix4::loadRotate(float angle, float x, float y, float z) {
@@ -238,6 +256,7 @@ void Matrix4::loadRotate(float angle, float x, float y, float z) {
data[kScaleZ] = z * z * nc + c;
mSimpleMatrix = false;
+ mIsIdentity = false;
}
void Matrix4::loadMultiply(const Matrix4& u, const Matrix4& v) {
@@ -262,16 +281,20 @@ void Matrix4::loadMultiply(const Matrix4& u, const Matrix4& v) {
}
mSimpleMatrix = u.mSimpleMatrix && v.mSimpleMatrix;
+ mIsIdentity = false;
}
void Matrix4::loadOrtho(float left, float right, float bottom, float top, float near, float far) {
loadIdentity();
+
data[kScaleX] = 2.0f / (right - left);
data[kScaleY] = 2.0f / (top - bottom);
data[kScaleZ] = -2.0f / (far - near);
data[kTranslateX] = -(right + left) / (right - left);
data[kTranslateY] = -(top + bottom) / (top - bottom);
data[kTranslateZ] = -(far + near) / (far - near);
+
+ mIsIdentity = false;
}
#define MUL_ADD_STORE(a, b, c) a = (a) * (b) + (c)
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h
index 2fa6ab7757a7..56fd37de813b 100644
--- a/libs/hwui/Matrix.h
+++ b/libs/hwui/Matrix.h
@@ -112,6 +112,7 @@ public:
bool isPureTranslate();
bool isSimple();
+ bool isIdentity();
bool changesBounds();
@@ -128,6 +129,7 @@ public:
private:
bool mSimpleMatrix;
+ bool mIsIdentity;
inline float get(int i, int j) const {
return data[i * 4 + j];
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 4864cff6931d..a0f806a209ba 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -627,6 +627,12 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
float alpha = layer->getAlpha() / 255.0f;
+ mat4& transform = layer->getTransform();
+ if (!transform.isIdentity()) {
+ save(0);
+ mSnapshot->transform->multiply(transform);
+ }
+
setupDraw();
if (layer->getRenderTarget() == GL_TEXTURE_2D) {
setupDrawWithTexture();
@@ -663,6 +669,10 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
finishDrawTexture();
+
+ if (!transform.isIdentity()) {
+ restore();
+ }
}
void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap) {
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 923978f67d7a..5bd0d4ffd217 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -31,6 +31,12 @@
// If turned on, text is interpreted as glyphs instead of UTF-16
#define RENDER_TEXT_AS_GLYPHS 1
+// Indicates whether to remove the biggest layers first, or the smaller ones
+#define LAYER_REMOVE_BIGGEST_FIRST 0
+
+// Textures used by layers must have dimensions multiples of this number
+#define LAYER_SIZE 64
+
/**
* Debug level for app developers.
*/
diff --git a/libs/rs/driver/rsdBcc.cpp b/libs/rs/driver/rsdBcc.cpp
index fb2df3741c6a..44ea79c75524 100644
--- a/libs/rs/driver/rsdBcc.cpp
+++ b/libs/rs/driver/rsdBcc.cpp
@@ -45,6 +45,7 @@ struct DrvScript {
InvokeFunc_t *mInvokeFunctions;
void ** mFieldAddress;
bool * mFieldIsObject;
+ const uint32_t *mExportForEachSignatureList;
const uint8_t * mScriptText;
uint32_t mScriptTextLength;
@@ -74,6 +75,7 @@ bool rsdScriptInit(const Context *rsc,
size_t exportFuncCount = 0;
size_t exportVarCount = 0;
size_t objectSlotCount = 0;
+ size_t exportForEachSignatureCount = 0;
DrvScript *drv = (DrvScript *)calloc(1, sizeof(DrvScript));
if (drv == NULL) {
@@ -153,6 +155,10 @@ bool rsdScriptInit(const Context *rsc,
}
}
+ exportForEachSignatureCount = drv->ME->getExportForEachSignatureCount();
+ rsAssert(exportForEachSignatureCount <= 1);
+ drv->mExportForEachSignatureList = drv->ME->getExportForEachSignatureList();
+
// Copy info over to runtime
script->mHal.info.exportedFunctionCount = drv->ME->getExportFuncCount();
script->mHal.info.exportedVariableCount = drv->ME->getExportVarCount();
@@ -179,9 +185,11 @@ error:
typedef struct {
Context *rsc;
Script *script;
+ uint32_t sig;
const Allocation * ain;
Allocation * aout;
const void * usr;
+ size_t usrLen;
uint32_t mSliceSize;
volatile int mSliceNum;
@@ -205,10 +213,16 @@ typedef struct {
uint32_t dimZ;
uint32_t dimArray;
} MTLaunchStruct;
-typedef int (*rs_t)(const void *, void *, const void *, uint32_t, uint32_t, uint32_t, uint32_t);
+typedef void (*rs_t)(const void *, void *, const void *, uint32_t, uint32_t, uint32_t, uint32_t);
static void wc_xy(void *usr, uint32_t idx) {
MTLaunchStruct *mtls = (MTLaunchStruct *)usr;
+ RsForEachStubParamStruct p;
+ memset(&p, 0, sizeof(p));
+ p.usr = mtls->usr;
+ p.usr_len = mtls->usrLen;
+ RsdHal * dc = (RsdHal *)mtls->rsc->mHal.drv;
+ uint32_t sig = mtls->sig;
while (1) {
uint32_t slice = (uint32_t)android_atomic_inc(&mtls->mSliceNum);
@@ -221,13 +235,15 @@ static void wc_xy(void *usr, uint32_t idx) {
//LOGE("usr idx %i, x %i,%i y %i,%i", idx, mtls->xStart, mtls->xEnd, yStart, yEnd);
//LOGE("usr ptr in %p, out %p", mtls->ptrIn, mtls->ptrOut);
- for (uint32_t y = yStart; y < yEnd; y++) {
- uint32_t offset = mtls->dimX * y;
+ for (p.y = yStart; p.y < yEnd; p.y++) {
+ uint32_t offset = mtls->dimX * p.y;
uint8_t *xPtrOut = mtls->ptrOut + (mtls->eStrideOut * offset);
const uint8_t *xPtrIn = mtls->ptrIn + (mtls->eStrideIn * offset);
- for (uint32_t x = mtls->xStart; x < mtls->xEnd; x++) {
- ((rs_t)mtls->script->mHal.info.root) (xPtrIn, xPtrOut, mtls->usr, x, y, 0, 0);
+ for (p.x = mtls->xStart; p.x < mtls->xEnd; p.x++) {
+ p.in = xPtrIn;
+ p.out = xPtrOut;
+ dc->mForEachLaunch[sig](&mtls->script->mHal.info.root, &p);
xPtrIn += mtls->eStrideIn;
xPtrOut += mtls->eStrideOut;
}
@@ -237,6 +253,12 @@ static void wc_xy(void *usr, uint32_t idx) {
static void wc_x(void *usr, uint32_t idx) {
MTLaunchStruct *mtls = (MTLaunchStruct *)usr;
+ RsForEachStubParamStruct p;
+ memset(&p, 0, sizeof(p));
+ p.usr = mtls->usr;
+ p.usr_len = mtls->usrLen;
+ RsdHal * dc = (RsdHal *)mtls->rsc->mHal.drv;
+ uint32_t sig = mtls->sig;
while (1) {
uint32_t slice = (uint32_t)android_atomic_inc(&mtls->mSliceNum);
@@ -251,8 +273,10 @@ static void wc_x(void *usr, uint32_t idx) {
//LOGE("usr ptr in %p, out %p", mtls->ptrIn, mtls->ptrOut);
uint8_t *xPtrOut = mtls->ptrOut + (mtls->eStrideOut * xStart);
const uint8_t *xPtrIn = mtls->ptrIn + (mtls->eStrideIn * xStart);
- for (uint32_t x = xStart; x < xEnd; x++) {
- ((rs_t)mtls->script->mHal.info.root) (xPtrIn, xPtrOut, mtls->usr, x, 0, 0, 0);
+ for (p.x = xStart; p.x < xEnd; p.x++) {
+ p.in = xPtrIn;
+ p.out = xPtrOut;
+ dc->mForEachLaunch[sig](&mtls->script->mHal.info.root, &p);
xPtrIn += mtls->eStrideIn;
xPtrOut += mtls->eStrideOut;
}
@@ -273,6 +297,10 @@ void rsdScriptInvokeForEach(const Context *rsc,
MTLaunchStruct mtls;
memset(&mtls, 0, sizeof(mtls));
+ DrvScript *drv = (DrvScript *)s->mHal.drv;
+ // We only support slot 0 (root) at this point in time.
+ rsAssert(slot == 0);
+ mtls.sig = drv->mExportForEachSignatureList[slot];
if (ain) {
mtls.dimX = ain->getType()->getDimX();
mtls.dimY = ain->getType()->getDimY();
@@ -325,6 +353,7 @@ void rsdScriptInvokeForEach(const Context *rsc,
mtls.aout = aout;
mtls.script = s;
mtls.usr = usr;
+ mtls.usrLen = usrLen;
mtls.mSliceSize = 10;
mtls.mSliceNum = 0;
@@ -351,18 +380,26 @@ void rsdScriptInvokeForEach(const Context *rsc,
//LOGE("launch 1");
} else {
+ RsForEachStubParamStruct p;
+ memset(&p, 0, sizeof(p));
+ p.usr = mtls.usr;
+ p.usr_len = mtls.usrLen;
+ uint32_t sig = mtls.sig;
+
//LOGE("launch 3");
- for (uint32_t ar = mtls.arrayStart; ar < mtls.arrayEnd; ar++) {
- for (uint32_t z = mtls.zStart; z < mtls.zEnd; z++) {
- for (uint32_t y = mtls.yStart; y < mtls.yEnd; y++) {
- uint32_t offset = mtls.dimX * mtls.dimY * mtls.dimZ * ar +
- mtls.dimX * mtls.dimY * z +
- mtls.dimX * y;
+ for (p.ar[0] = mtls.arrayStart; p.ar[0] < mtls.arrayEnd; p.ar[0]++) {
+ for (p.z = mtls.zStart; p.z < mtls.zEnd; p.z++) {
+ for (p.y = mtls.yStart; p.y < mtls.yEnd; p.y++) {
+ uint32_t offset = mtls.dimX * mtls.dimY * mtls.dimZ * p.ar[0] +
+ mtls.dimX * mtls.dimY * p.z +
+ mtls.dimX * p.y;
uint8_t *xPtrOut = mtls.ptrOut + (mtls.eStrideOut * offset);
const uint8_t *xPtrIn = mtls.ptrIn + (mtls.eStrideIn * offset);
- for (uint32_t x = mtls.xStart; x < mtls.xEnd; x++) {
- ((rs_t)s->mHal.info.root) (xPtrIn, xPtrOut, usr, x, y, z, ar);
+ for (p.x = mtls.xStart; p.x < mtls.xEnd; p.x++) {
+ p.in = xPtrIn;
+ p.out = xPtrOut;
+ dc->mForEachLaunch[sig](&s->mHal.info.root, &p);
xPtrIn += mtls.eStrideIn;
xPtrOut += mtls.eStrideOut;
}
diff --git a/libs/rs/driver/rsdCore.cpp b/libs/rs/driver/rsdCore.cpp
index 38f6895f26fd..171d04563093 100644
--- a/libs/rs/driver/rsdCore.cpp
+++ b/libs/rs/driver/rsdCore.cpp
@@ -43,6 +43,7 @@ using namespace android::renderscript;
static void Shutdown(Context *rsc);
static void SetPriority(const Context *rsc, int32_t priority);
+static void initForEach(outer_foreach_t* forEachLaunch);
static RsdHalFunctions FunctionTable = {
rsdGLInit,
@@ -206,6 +207,8 @@ bool rsdHalInit(Context *rsc, uint32_t version_major, uint32_t version_minor) {
rsdgThreadTLSKeyCount++;
pthread_mutex_unlock(&rsdgInitMutex);
+ initForEach(dc->mForEachLaunch);
+
dc->mTlsStruct.mContext = rsc;
dc->mTlsStruct.mScript = NULL;
int status = pthread_setspecific(rsdgThreadTLSKey, &dc->mTlsStruct);
@@ -287,4 +290,112 @@ void Shutdown(Context *rsc) {
}
+static void rsdForEach17(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, uint32_t);
+ (*(fe*)vRoot)(p->in, p->y);
+}
+
+static void rsdForEach18(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(void *, uint32_t);
+ (*(fe*)vRoot)(p->out, p->y);
+}
+
+static void rsdForEach19(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, void *, uint32_t);
+ (*(fe*)vRoot)(p->in, p->out, p->y);
+}
+
+static void rsdForEach21(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, const void *, uint32_t);
+ (*(fe*)vRoot)(p->in, p->usr, p->y);
+}
+
+static void rsdForEach22(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(void *, const void *, uint32_t);
+ (*(fe*)vRoot)(p->out, p->usr, p->y);
+}
+
+static void rsdForEach23(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, void *, const void *, uint32_t);
+ (*(fe*)vRoot)(p->in, p->out, p->usr, p->y);
+}
+
+static void rsdForEach25(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->in, p->x, p->y);
+}
+
+static void rsdForEach26(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->out, p->x, p->y);
+}
+
+static void rsdForEach27(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->in, p->out, p->x, p->y);
+}
+
+static void rsdForEach29(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, const void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->in, p->usr, p->x, p->y);
+}
+
+static void rsdForEach30(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(void *, const void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->out, p->usr, p->x, p->y);
+}
+
+static void rsdForEach31(const void *vRoot,
+ const android::renderscript::RsForEachStubParamStruct *p) {
+ typedef void (*fe)(const void *, void *, const void *, uint32_t, uint32_t);
+ (*(fe*)vRoot)(p->in, p->out, p->usr, p->x, p->y);
+}
+
+
+static void initForEach(outer_foreach_t* forEachLaunch) {
+ rsAssert(forEachLaunch);
+ forEachLaunch[0x00] = NULL;
+ forEachLaunch[0x01] = rsdForEach31; // in
+ forEachLaunch[0x02] = rsdForEach30; // out
+ forEachLaunch[0x03] = rsdForEach31; // in, out
+ forEachLaunch[0x04] = NULL;
+ forEachLaunch[0x05] = rsdForEach29; // in, usr
+ forEachLaunch[0x06] = rsdForEach30; // out, usr
+ forEachLaunch[0x07] = rsdForEach31; // in, out, usr
+ forEachLaunch[0x08] = NULL;
+ forEachLaunch[0x09] = rsdForEach25; // in, x
+ forEachLaunch[0x0a] = rsdForEach26; // out, x
+ forEachLaunch[0x0b] = rsdForEach27; // in, out, x
+ forEachLaunch[0x0c] = NULL;
+ forEachLaunch[0x0d] = rsdForEach29; // in, usr, x
+ forEachLaunch[0x0e] = rsdForEach30; // out, usr, x
+ forEachLaunch[0x0f] = rsdForEach31; // in, out, usr, x
+ forEachLaunch[0x10] = NULL;
+ forEachLaunch[0x11] = rsdForEach17; // in y
+ forEachLaunch[0x12] = rsdForEach18; // out, y
+ forEachLaunch[0x13] = rsdForEach19; // in, out, y
+ forEachLaunch[0x14] = NULL;
+ forEachLaunch[0x15] = rsdForEach21; // in, usr, y
+ forEachLaunch[0x16] = rsdForEach22; // out, usr, y
+ forEachLaunch[0x17] = rsdForEach23; // in, out, usr, y
+ forEachLaunch[0x18] = NULL;
+ forEachLaunch[0x19] = rsdForEach25; // in, x, y
+ forEachLaunch[0x1a] = rsdForEach26; // out, x, y
+ forEachLaunch[0x1b] = rsdForEach27; // in, out, x, y
+ forEachLaunch[0x1c] = NULL;
+ forEachLaunch[0x1d] = rsdForEach29; // in, usr, x, y
+ forEachLaunch[0x1e] = rsdForEach30; // out, usr, x, y
+ forEachLaunch[0x1f] = rsdForEach31; // in, out, usr, x, y
+}
diff --git a/libs/rs/driver/rsdCore.h b/libs/rs/driver/rsdCore.h
index f393b602e1fc..159b72af96c8 100644
--- a/libs/rs/driver/rsdCore.h
+++ b/libs/rs/driver/rsdCore.h
@@ -27,6 +27,9 @@
typedef void (* InvokeFunc_t)(void);
typedef void (*WorkerCallback_t)(void *usr, uint32_t idx);
+typedef void (*outer_foreach_t)(const void *,
+ const android::renderscript::RsForEachStubParamStruct *);
+
typedef struct RsdSymbolTableRec {
const char * mName;
void * mPtr;
@@ -57,6 +60,8 @@ typedef struct RsdHalRec {
Workers mWorkers;
bool mExit;
+ outer_foreach_t mForEachLaunch[32];
+
ScriptTLSStruct mTlsStruct;
RsdGL gl;
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 0dea97100d35..f27758249a5d 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -127,6 +127,7 @@ ObjDestroy {
}
ElementCreate {
+ direct
param RsDataType mType
param RsDataKind mKind
param bool mNormalized
@@ -135,6 +136,7 @@ ElementCreate {
}
ElementCreate2 {
+ direct
param const RsElement * elements
param const char ** names
param const uint32_t * arraySize
@@ -226,6 +228,7 @@ AllocationCopy2DRange {
}
SamplerCreate {
+ direct
param RsSamplerValue magFilter
param RsSamplerValue minFilter
param RsSamplerValue wrapS
@@ -311,6 +314,7 @@ ScriptCCreate {
ProgramStoreCreate {
+ direct
param bool colorMaskR
param bool colorMaskG
param bool colorMaskB
@@ -324,6 +328,7 @@ ProgramStoreCreate {
}
ProgramRasterCreate {
+ direct
param bool pointSmooth
param bool lineSmooth
param bool pointSprite
@@ -352,12 +357,14 @@ ProgramBindSampler {
}
ProgramFragmentCreate {
+ direct
param const char * shaderText
param const uint32_t * params
ret RsProgramFragment
}
ProgramVertexCreate {
+ direct
param const char * shaderText
param const uint32_t * params
ret RsProgramVertex
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index b59ade8d9fe9..4359d957193a 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -58,19 +58,7 @@ void Allocation::updateCache() {
}
Allocation::~Allocation() {
- if (mHal.state.hasReferences &&
- (mHal.state.hasFaces || mHal.state.hasMipmaps)) {
- LOGE("Cube/mip allocation with references unsupported, memory not cleaned up!");
- }
-
- uint32_t elemCount = mHal.state.dimensionX;
- if (mHal.state.dimensionY > 1) {
- elemCount *= mHal.state.dimensionY;
- }
- if (mHal.state.dimensionZ > 1) {
- elemCount *= mHal.state.dimensionZ;
- }
- decRefs(getPtr(), elemCount, 0);
+ freeChildrenUnlocked();
mRSC->mHal.funcs.allocation.destroy(mRSC, this);
}
@@ -252,6 +240,7 @@ Allocation *Allocation::createFromStream(Context *rsc, IStream *stream) {
Allocation *alloc = Allocation::createAllocation(rsc, type, RS_ALLOCATION_USAGE_SCRIPT);
alloc->setName(name.string(), name.size());
+ type->decUserRef();
uint32_t count = dataSize / type->getElementSizeBytes();
@@ -298,6 +287,19 @@ void Allocation::decRefs(const void *ptr, size_t ct, size_t startOff) const {
}
}
+void Allocation::freeChildrenUnlocked () {
+ decRefs(getPtr(), mHal.state.type->getSizeBytes() / mHal.state.type->getElementSizeBytes(), 0);
+}
+
+bool Allocation::freeChildren() {
+ if (mHal.state.hasReferences) {
+ incSysRef();
+ freeChildrenUnlocked();
+ return decSysRef();
+ }
+ return false;
+}
+
void Allocation::copyRange1D(Context *rsc, const Allocation *src, int32_t srcOff, int32_t destOff, int32_t len) {
}
@@ -307,12 +309,12 @@ void Allocation::resize1D(Context *rsc, uint32_t dimX) {
return;
}
- Type *t = mHal.state.type->cloneAndResize1D(rsc, dimX);
+ ObjectBaseRef<Type> t = mHal.state.type->cloneAndResize1D(rsc, dimX);
if (dimX < oldDimX) {
decRefs(getPtr(), oldDimX - dimX, dimX);
}
- rsc->mHal.funcs.allocation.resize(rsc, this, t, mHal.state.hasReferences);
- mHal.state.type.set(t);
+ rsc->mHal.funcs.allocation.resize(rsc, this, t.get(), mHal.state.hasReferences);
+ mHal.state.type.set(t.get());
updateCache();
}
diff --git a/libs/rs/rsAllocation.h b/libs/rs/rsAllocation.h
index f2589c0b07ef..67fc3b5e0777 100644
--- a/libs/rs/rsAllocation.h
+++ b/libs/rs/rsAllocation.h
@@ -116,6 +116,7 @@ public:
void incRefs(const void *ptr, size_t ct, size_t startOff = 0) const;
void decRefs(const void *ptr, size_t ct, size_t startOff = 0) const;
+ virtual bool freeChildren();
void sendDirty(const Context *rsc) const;
bool getHasGraphicsMipmaps() const {
@@ -127,6 +128,7 @@ protected:
Vector<const Program *> mToDirtyList;
private:
+ void freeChildrenUnlocked();
Allocation(Context *rsc, const Type *, uint32_t usages, RsAllocationMipmapControl mc);
};
diff --git a/libs/rs/rsComponent.cpp b/libs/rs/rsComponent.cpp
index e65febb4d464..ce06306a1ef0 100644
--- a/libs/rs/rsComponent.cpp
+++ b/libs/rs/rsComponent.cpp
@@ -176,36 +176,6 @@ bool Component::isReference() const {
return (mType >= RS_TYPE_ELEMENT);
}
-String8 Component::getGLSLType() const {
- if (mType == RS_TYPE_SIGNED_32) {
- switch (mVectorSize) {
- case 1: return String8("int");
- case 2: return String8("ivec2");
- case 3: return String8("ivec3");
- case 4: return String8("ivec4");
- }
- }
- if (mType == RS_TYPE_FLOAT_32) {
- switch (mVectorSize) {
- case 1: return String8("float");
- case 2: return String8("vec2");
- case 3: return String8("vec3");
- case 4: return String8("vec4");
- }
- }
- if ((mType == RS_TYPE_MATRIX_4X4) && (mVectorSize == 1)) {
- return String8("mat4");
- }
- if ((mType == RS_TYPE_MATRIX_3X3) && (mVectorSize == 1)) {
- return String8("mat3");
- }
- if ((mType == RS_TYPE_MATRIX_2X2) && (mVectorSize == 1)) {
- return String8("mat2");
- }
- return String8();
-}
-
-
static const char * gTypeBasicStrings[] = {
"NONE",
"F16",
diff --git a/libs/rs/rsComponent.h b/libs/rs/rsComponent.h
index a448f0e8f495..6ddc990b2486 100644
--- a/libs/rs/rsComponent.h
+++ b/libs/rs/rsComponent.h
@@ -32,10 +32,8 @@ public:
void set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize=1);
- String8 getGLSLType() const;
void dumpLOGV(const char *prefix) const;
-
RsDataType getType() const {return mType;}
RsDataKind getKind() const {return mKind;}
bool getIsNormalized() const {return mNormalized;}
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index bffe3c09c406..e3a9cf837723 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -240,6 +240,7 @@ void * Context::threadProc(void *vrsc) {
rsc->setProgramStore(NULL);
rsc->mStateFont.init(rsc);
rsc->setFont(NULL);
+ rsc->mStateSampler.init(rsc);
rsc->mFBOCache.init(rsc);
}
@@ -251,10 +252,11 @@ void * Context::threadProc(void *vrsc) {
while (!rsc->mExit) {
uint64_t waitTime = 0;
uint64_t now = rsc->getTime();
- if (now < targetTime) {
- waitTime = targetTime - now;
- } else {
- doWait = false;
+ if (!doWait) {
+ if (now < targetTime) {
+ waitTime = targetTime - now;
+ doWait = true;
+ }
}
mDraw |= rsc->mIO.playCoreCommands(rsc, doWait, waitTime);
@@ -264,7 +266,7 @@ void * Context::threadProc(void *vrsc) {
if (mDraw && rsc->mIsGraphicsContext) {
uint64_t delay = rsc->runRootScript() * 1000000;
targetTime = rsc->getTime() + delay;
- doWait = delay != 0;
+ doWait = (delay == 0);
if (rsc->props.mLogVisual) {
rsc->displayDebugStats();
@@ -307,8 +309,10 @@ void Context::destroyWorkerThreadResources() {
mStateFragment.deinit(this);
mStateFragmentStore.deinit(this);
mStateFont.deinit(this);
+ mStateSampler.deinit(this);
mFBOCache.deinit(this);
}
+ ObjectBase::freeAllChildren(this);
//LOGV("destroyWorkerThreadResources 2");
mExit = true;
}
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index b77b18a0b686..36bbdf05a48c 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -29,13 +29,16 @@ Element::Element(Context *rsc) : ObjectBase(rsc) {
}
Element::~Element() {
+ clear();
+}
+
+void Element::preDestroy() const {
for (uint32_t ct = 0; ct < mRSC->mStateElement.mElements.size(); ct++) {
if (mRSC->mStateElement.mElements[ct] == this) {
mRSC->mStateElement.mElements.removeAt(ct);
break;
}
}
- clear();
}
void Element::clear() {
@@ -60,6 +63,7 @@ size_t Element::getSizeBits() const {
void Element::dumpLOGV(const char *prefix) const {
ObjectBase::dumpLOGV(prefix);
LOGV("%s Element: fieldCount: %zu, size bytes: %zu", prefix, mFieldCount, getSizeBytes());
+ mComponent.dumpLOGV(prefix);
for (uint32_t ct = 0; ct < mFieldCount; ct++) {
LOGV("%s Element field index: %u ------------------", prefix, ct);
LOGV("%s name: %s, offsetBits: %u, arraySize: %u",
@@ -97,60 +101,46 @@ Element *Element::createFromStream(Context *rsc, IStream *stream) {
String8 name;
stream->loadString(&name);
- Element *elem = new Element(rsc);
- elem->mComponent.loadFromStream(stream);
-
- elem->mFieldCount = stream->loadU32();
- if (elem->mFieldCount) {
- elem->mFields = new ElementField_t [elem->mFieldCount];
- for (uint32_t ct = 0; ct < elem->mFieldCount; ct ++) {
- stream->loadString(&elem->mFields[ct].name);
- elem->mFields[ct].arraySize = stream->loadU32();
- Element *fieldElem = Element::createFromStream(rsc, stream);
- elem->mFields[ct].e.set(fieldElem);
- }
- }
+ Component component;
+ component.loadFromStream(stream);
- // We need to check if this already exists
- for (uint32_t ct=0; ct < rsc->mStateElement.mElements.size(); ct++) {
- Element *ee = rsc->mStateElement.mElements[ct];
- if (ee->isEqual(elem)) {
- ObjectBase::checkDelete(elem);
- ee->incUserRef();
- return ee;
- }
+ uint32_t fieldCount = stream->loadU32();
+ if (!fieldCount) {
+ return (Element *)Element::create(rsc,
+ component.getType(),
+ component.getKind(),
+ component.getIsNormalized(),
+ component.getVectorSize());;
}
- elem->compute();
- rsc->mStateElement.mElements.push(elem);
- return elem;
-}
-
-bool Element::isEqual(const Element *other) const {
- if (other == NULL) {
- return false;
+ const Element **subElems = new const Element *[fieldCount];
+ const char **subElemNames = new const char *[fieldCount];
+ size_t *subElemNamesLengths = new size_t[fieldCount];
+ uint32_t *arraySizes = new uint32_t[fieldCount];
+
+ String8 elemName;
+ for (uint32_t ct = 0; ct < fieldCount; ct ++) {
+ stream->loadString(&elemName);
+ subElemNamesLengths[ct] = elemName.length();
+ char *tmpName = new char[subElemNamesLengths[ct]];
+ memcpy(tmpName, elemName.string(), subElemNamesLengths[ct]);
+ subElemNames[ct] = tmpName;
+ arraySizes[ct] = stream->loadU32();
+ subElems[ct] = Element::createFromStream(rsc, stream);
}
- if (!other->getFieldCount() && !mFieldCount) {
- if ((other->getType() == getType()) &&
- (other->getKind() == getKind()) &&
- (other->getComponent().getIsNormalized() == getComponent().getIsNormalized()) &&
- (other->getComponent().getVectorSize() == getComponent().getVectorSize())) {
- return true;
- }
- return false;
- }
- if (other->getFieldCount() == mFieldCount) {
- for (uint32_t i=0; i < mFieldCount; i++) {
- if ((!other->mFields[i].e->isEqual(mFields[i].e.get())) ||
- (other->mFields[i].name.length() != mFields[i].name.length()) ||
- (other->mFields[i].name != mFields[i].name) ||
- (other->mFields[i].arraySize != mFields[i].arraySize)) {
- return false;
- }
- }
- return true;
+
+ const Element *elem = Element::create(rsc, fieldCount, subElems, subElemNames,
+ subElemNamesLengths, arraySizes);
+ for (uint32_t ct = 0; ct < fieldCount; ct ++) {
+ delete [] subElemNames[ct];
+ subElems[ct]->decUserRef();
}
- return false;
+ delete[] subElems;
+ delete[] subElemNames;
+ delete[] subElemNamesLengths;
+ delete[] arraySizes;
+
+ return (Element *)elem;
}
void Element::compute() {
@@ -172,9 +162,11 @@ void Element::compute() {
}
-const Element * Element::create(Context *rsc, RsDataType dt, RsDataKind dk,
+ObjectBaseRef<const Element> Element::createRef(Context *rsc, RsDataType dt, RsDataKind dk,
bool isNorm, uint32_t vecSize) {
+ ObjectBaseRef<const Element> returnRef;
// Look for an existing match.
+ ObjectBase::asyncLock();
for (uint32_t ct=0; ct < rsc->mStateElement.mElements.size(); ct++) {
const Element *ee = rsc->mStateElement.mElements[ct];
if (!ee->getFieldCount() &&
@@ -183,21 +175,31 @@ const Element * Element::create(Context *rsc, RsDataType dt, RsDataKind dk,
(ee->getComponent().getIsNormalized() == isNorm) &&
(ee->getComponent().getVectorSize() == vecSize)) {
// Match
- ee->incUserRef();
+ returnRef.set(ee);
+ ObjectBase::asyncUnlock();
return ee;
}
}
+ ObjectBase::asyncUnlock();
Element *e = new Element(rsc);
+ returnRef.set(e);
e->mComponent.set(dt, dk, isNorm, vecSize);
e->compute();
+
+ ObjectBase::asyncLock();
rsc->mStateElement.mElements.push(e);
- return e;
+ ObjectBase::asyncUnlock();
+
+ return returnRef;
}
-const Element * Element::create(Context *rsc, size_t count, const Element **ein,
+ObjectBaseRef<const Element> Element::createRef(Context *rsc, size_t count, const Element **ein,
const char **nin, const size_t * lengths, const uint32_t *asin) {
+
+ ObjectBaseRef<const Element> returnRef;
// Look for an existing match.
+ ObjectBase::asyncLock();
for (uint32_t ct=0; ct < rsc->mStateElement.mElements.size(); ct++) {
const Element *ee = rsc->mStateElement.mElements[ct];
if (ee->getFieldCount() == count) {
@@ -212,13 +214,16 @@ const Element * Element::create(Context *rsc, size_t count, const Element **ein,
}
}
if (match) {
- ee->incUserRef();
- return ee;
+ returnRef.set(ee);
+ ObjectBase::asyncUnlock();
+ return returnRef;
}
}
}
+ ObjectBase::asyncUnlock();
Element *e = new Element(rsc);
+ returnRef.set(e);
e->mFields = new ElementField_t [count];
e->mFieldCount = count;
for (size_t ct=0; ct < count; ct++) {
@@ -228,26 +233,11 @@ const Element * Element::create(Context *rsc, size_t count, const Element **ein,
}
e->compute();
+ ObjectBase::asyncLock();
rsc->mStateElement.mElements.push(e);
- return e;
-}
-
-String8 Element::getGLSLType(uint32_t indent) const {
- String8 s;
- for (uint32_t ct=0; ct < indent; ct++) {
- s.append(" ");
- }
+ ObjectBase::asyncUnlock();
- if (!mFieldCount) {
- // Basic component.
- s.append(mComponent.getGLSLType());
- } else {
- rsAssert(0);
- //s.append("struct ");
- //s.append(getCStructBody(indent));
- }
-
- return s;
+ return returnRef;
}
void Element::incRefs(const void *ptr) const {
@@ -294,6 +284,23 @@ void Element::decRefs(const void *ptr) const {
}
}
+void Element::Builder::add(const Element *e, const char *nameStr, uint32_t arraySize) {
+ mBuilderElementRefs.push(ObjectBaseRef<const Element>(e));
+ mBuilderElements.push(e);
+ mBuilderNameStrings.push(nameStr);
+ mBuilderNameLengths.push(strlen(nameStr));
+ mBuilderArrays.push(arraySize);
+
+}
+
+ObjectBaseRef<const Element> Element::Builder::create(Context *rsc) {
+ return Element::createRef(rsc, mBuilderElements.size(),
+ &(mBuilderElements.editArray()[0]),
+ &(mBuilderNameStrings.editArray()[0]),
+ mBuilderNameLengths.editArray(),
+ mBuilderArrays.editArray());
+}
+
ElementState::ElementState() {
const uint32_t initialCapacity = 32;
@@ -324,10 +331,10 @@ void ElementState::elementBuilderAdd(const Element *e, const char *nameStr, uint
const Element *ElementState::elementBuilderCreate(Context *rsc) {
return Element::create(rsc, mBuilderElements.size(),
- &(mBuilderElements.editArray()[0]),
- &(mBuilderNameStrings.editArray()[0]),
- mBuilderNameLengths.editArray(),
- mBuilderArrays.editArray());
+ &(mBuilderElements.editArray()[0]),
+ &(mBuilderNameStrings.editArray()[0]),
+ mBuilderNameLengths.editArray(),
+ mBuilderArrays.editArray());
}
@@ -342,9 +349,7 @@ RsElement rsi_ElementCreate(Context *rsc,
RsDataKind dk,
bool norm,
uint32_t vecSize) {
- const Element *e = Element::create(rsc, dt, dk, norm, vecSize);
- e->incUserRef();
- return (RsElement)e;
+ return (RsElement)Element::create(rsc, dt, dk, norm, vecSize);
}
@@ -358,15 +363,15 @@ RsElement rsi_ElementCreate2(Context *rsc,
const uint32_t * arraySizes,
size_t arraySizes_length) {
- const Element *e = Element::create(rsc, ein_length, (const Element **)ein, names, nameLengths, arraySizes);
- e->incUserRef();
- return (RsElement)e;
+ return (RsElement)Element::create(rsc, ein_length, (const Element **)ein,
+ names, nameLengths, arraySizes);
}
}
}
-void rsaElementGetNativeData(RsContext con, RsElement elem, uint32_t *elemData, uint32_t elemDataSize) {
+void rsaElementGetNativeData(RsContext con, RsElement elem,
+ uint32_t *elemData, uint32_t elemDataSize) {
rsAssert(elemDataSize == 5);
// we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
Element *e = static_cast<Element *>(elem);
@@ -378,7 +383,8 @@ void rsaElementGetNativeData(RsContext con, RsElement elem, uint32_t *elemData,
(*elemData++) = e->getFieldCount();
}
-void rsaElementGetSubElements(RsContext con, RsElement elem, uint32_t *ids, const char **names, uint32_t dataSize) {
+void rsaElementGetSubElements(RsContext con, RsElement elem, uint32_t *ids,
+ const char **names, uint32_t dataSize) {
Element *e = static_cast<Element *>(elem);
rsAssert(e->getFieldCount() == dataSize);
diff --git a/libs/rs/rsElement.h b/libs/rs/rsElement.h
index 26e2760c124b..c3ef25038d33 100644
--- a/libs/rs/rsElement.h
+++ b/libs/rs/rsElement.h
@@ -28,8 +28,17 @@ namespace renderscript {
// An element is a group of Components that occupies one cell in a structure.
class Element : public ObjectBase {
public:
- ~Element();
-
+ class Builder {
+ public:
+ void add(const Element *e, const char *nameStr, uint32_t arraySize);
+ ObjectBaseRef<const Element> create(Context *rsc);
+ private:
+ Vector<ObjectBaseRef<const Element> > mBuilderElementRefs;
+ Vector<const Element *> mBuilderElements;
+ Vector<const char*> mBuilderNameStrings;
+ Vector<size_t> mBuilderNameLengths;
+ Vector<uint32_t> mBuilderArrays;
+ };
uint32_t getGLType() const;
uint32_t getGLFormat() const;
@@ -55,24 +64,45 @@ public:
RsDataKind getKind() const {return mComponent.getKind();}
uint32_t getBits() const {return mBits;}
- String8 getGLSLType(uint32_t indent=0) const;
-
void dumpLOGV(const char *prefix) const;
virtual void serialize(OStream *stream) const;
virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_ELEMENT; }
static Element *createFromStream(Context *rsc, IStream *stream);
- static const Element * create(Context *rsc, RsDataType dt, RsDataKind dk,
- bool isNorm, uint32_t vecSize);
- static const Element * create(Context *rsc, size_t count, const Element **,
- const char **, const size_t * lengths, const uint32_t *asin);
+ static ObjectBaseRef<const Element> createRef(Context *rsc,
+ RsDataType dt,
+ RsDataKind dk,
+ bool isNorm,
+ uint32_t vecSize);
+ static ObjectBaseRef<const Element> createRef(Context *rsc, size_t count,
+ const Element **,
+ const char **,
+ const size_t * lengths,
+ const uint32_t *asin);
+
+ static const Element* create(Context *rsc,
+ RsDataType dt,
+ RsDataKind dk,
+ bool isNorm,
+ uint32_t vecSize) {
+ ObjectBaseRef<const Element> elem = createRef(rsc, dt, dk, isNorm, vecSize);
+ elem->incUserRef();
+ return elem.get();
+ }
+ static const Element* create(Context *rsc, size_t count,
+ const Element **ein,
+ const char **nin,
+ const size_t * lengths,
+ const uint32_t *asin) {
+ ObjectBaseRef<const Element> elem = createRef(rsc, count, ein, nin, lengths, asin);
+ elem->incUserRef();
+ return elem.get();
+ }
void incRefs(const void *) const;
void decRefs(const void *) const;
bool getHasReferences() const {return mHasReference;}
- bool isEqual(const Element *other) const;
-
protected:
// deallocate any components that are part of this element.
void clear();
@@ -88,12 +118,15 @@ protected:
bool mHasReference;
+ virtual ~Element();
Element(Context *);
Component mComponent;
uint32_t mBits;
void compute();
+
+ virtual void preDestroy() const;
};
diff --git a/libs/rs/rsFileA3D.cpp b/libs/rs/rsFileA3D.cpp
index cd02c24b981f..df5dc128061b 100644
--- a/libs/rs/rsFileA3D.cpp
+++ b/libs/rs/rsFileA3D.cpp
@@ -68,7 +68,7 @@ void FileA3D::parseHeader(IStream *headerStream) {
for (uint32_t i = 0; i < numIndexEntries; i ++) {
A3DIndexEntry *entry = new A3DIndexEntry();
headerStream->loadString(&entry->mObjectName);
- LOGV("Header data, entry name = %s", entry->mObjectName.string());
+ //LOGV("Header data, entry name = %s", entry->mObjectName.string());
entry->mType = (RsA3DClassID)headerStream->loadU32();
if (mUse64BitOffsets){
entry->mOffset = headerStream->loadOffset();
@@ -369,7 +369,7 @@ RsObjectBase rsaFileA3DGetEntryByIndex(RsContext con, uint32_t index, RsFile fil
}
ObjectBase *obj = fa3d->initializeFromEntry(index);
- LOGV("Returning object with name %s", obj->getName());
+ //LOGV("Returning object with name %s", obj->getName());
return obj;
}
diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp
index 3917ca19f80d..7efed9d9f948 100644
--- a/libs/rs/rsFont.cpp
+++ b/libs/rs/rsFont.cpp
@@ -490,49 +490,47 @@ void FontState::initRenderState() {
shaderString.append(" gl_FragColor = col;\n");
shaderString.append("}\n");
- const Element *colorElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
- const Element *gammaElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 1);
- mRSC->mStateElement.elementBuilderBegin();
- mRSC->mStateElement.elementBuilderAdd(colorElem, "Color", 1);
- mRSC->mStateElement.elementBuilderAdd(gammaElem, "Gamma", 1);
- const Element *constInput = mRSC->mStateElement.elementBuilderCreate(mRSC);
+ ObjectBaseRef<const Element> colorElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
+ ObjectBaseRef<const Element> gammaElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 1);
+ Element::Builder builder;
+ builder.add(colorElem.get(), "Color", 1);
+ builder.add(gammaElem.get(), "Gamma", 1);
+ ObjectBaseRef<const Element> constInput = builder.create(mRSC);
- Type *inputType = Type::getType(mRSC, constInput, 1, 0, 0, false, false);
+ ObjectBaseRef<Type> inputType = Type::getTypeRef(mRSC, constInput.get(), 1, 0, 0, false, false);
uint32_t tmp[4];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType;
+ tmp[1] = (uint32_t)inputType.get();
tmp[2] = RS_PROGRAM_PARAM_TEXTURE_TYPE;
tmp[3] = RS_TEXTURE_2D;
- mFontShaderFConstant.set(Allocation::createAllocation(mRSC, inputType,
+ mFontShaderFConstant.set(Allocation::createAllocation(mRSC, inputType.get(),
RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS));
ProgramFragment *pf = new ProgramFragment(mRSC, shaderString.string(),
shaderString.length(), tmp, 4);
mFontShaderF.set(pf);
mFontShaderF->bindAllocation(mRSC, mFontShaderFConstant.get(), 0);
- Sampler *sampler = new Sampler(mRSC, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST,
- RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP);
- mFontSampler.set(sampler);
- mFontShaderF->bindSampler(mRSC, 0, sampler);
-
- ProgramStore *fontStore = new ProgramStore(mRSC, true, true, true, true,
- false, false,
- RS_BLEND_SRC_SRC_ALPHA,
- RS_BLEND_DST_ONE_MINUS_SRC_ALPHA,
- RS_DEPTH_FUNC_ALWAYS);
- mFontProgramStore.set(fontStore);
+ mFontSampler.set(Sampler::getSampler(mRSC, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST,
+ RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP).get());
+ mFontShaderF->bindSampler(mRSC, 0, mFontSampler.get());
+
+ mFontProgramStore.set(ProgramStore::getProgramStore(mRSC, true, true, true, true,
+ false, false,
+ RS_BLEND_SRC_SRC_ALPHA,
+ RS_BLEND_DST_ONE_MINUS_SRC_ALPHA,
+ RS_DEPTH_FUNC_ALWAYS).get());
mFontProgramStore->init();
}
void FontState::initTextTexture() {
- const Element *alphaElem = Element::create(mRSC, RS_TYPE_UNSIGNED_8, RS_KIND_PIXEL_A, true, 1);
+ ObjectBaseRef<const Element> alphaElem = Element::createRef(mRSC, RS_TYPE_UNSIGNED_8, RS_KIND_PIXEL_A, true, 1);
// We will allocate a texture to initially hold 32 character bitmaps
- Type *texType = Type::getType(mRSC, alphaElem, 1024, 256, 0, false, false);
+ ObjectBaseRef<Type> texType = Type::getTypeRef(mRSC, alphaElem.get(), 1024, 256, 0, false, false);
- Allocation *cacheAlloc = Allocation::createAllocation(mRSC, texType,
+ Allocation *cacheAlloc = Allocation::createAllocation(mRSC, texType.get(),
RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE);
mTextTexture.set(cacheAlloc);
mTextTexture->syncAll(mRSC, RS_ALLOCATION_USAGE_SCRIPT);
@@ -557,11 +555,11 @@ void FontState::initTextTexture() {
// Avoid having to reallocate memory and render quad by quad
void FontState::initVertexArrayBuffers() {
// Now lets write index data
- const Element *indexElem = Element::create(mRSC, RS_TYPE_UNSIGNED_16, RS_KIND_USER, false, 1);
+ ObjectBaseRef<const Element> indexElem = Element::createRef(mRSC, RS_TYPE_UNSIGNED_16, RS_KIND_USER, false, 1);
uint32_t numIndicies = mMaxNumberOfQuads * 6;
- Type *indexType = Type::getType(mRSC, indexElem, numIndicies, 0, 0, false, false);
+ ObjectBaseRef<Type> indexType = Type::getTypeRef(mRSC, indexElem.get(), numIndicies, 0, 0, false, false);
- Allocation *indexAlloc = Allocation::createAllocation(mRSC, indexType,
+ Allocation *indexAlloc = Allocation::createAllocation(mRSC, indexType.get(),
RS_ALLOCATION_USAGE_SCRIPT |
RS_ALLOCATION_USAGE_GRAPHICS_VERTEX);
uint16_t *indexPtr = (uint16_t*)indexAlloc->getPtr();
@@ -582,19 +580,19 @@ void FontState::initVertexArrayBuffers() {
indexAlloc->sendDirty(mRSC);
- const Element *posElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
- const Element *texElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
+ ObjectBaseRef<const Element> posElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
+ ObjectBaseRef<const Element> texElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
- mRSC->mStateElement.elementBuilderBegin();
- mRSC->mStateElement.elementBuilderAdd(posElem, "position", 1);
- mRSC->mStateElement.elementBuilderAdd(texElem, "texture0", 1);
- const Element *vertexDataElem = mRSC->mStateElement.elementBuilderCreate(mRSC);
+ Element::Builder builder;
+ builder.add(posElem.get(), "position", 1);
+ builder.add(texElem.get(), "texture0", 1);
+ ObjectBaseRef<const Element> vertexDataElem = builder.create(mRSC);
- Type *vertexDataType = Type::getType(mRSC, vertexDataElem,
- mMaxNumberOfQuads * 4,
- 0, 0, false, false);
+ ObjectBaseRef<Type> vertexDataType = Type::getTypeRef(mRSC, vertexDataElem.get(),
+ mMaxNumberOfQuads * 4,
+ 0, 0, false, false);
- Allocation *vertexAlloc = Allocation::createAllocation(mRSC, vertexDataType,
+ Allocation *vertexAlloc = Allocation::createAllocation(mRSC, vertexDataType.get(),
RS_ALLOCATION_USAGE_SCRIPT);
mTextMeshPtr = (float*)vertexAlloc->getPtr();
diff --git a/libs/rs/rsFont.h b/libs/rs/rsFont.h
index b0e1430e228b..679591ca434f 100644
--- a/libs/rs/rsFont.h
+++ b/libs/rs/rsFont.h
@@ -146,7 +146,6 @@ public:
void deinit(Context *rsc);
ObjectBaseRef<Font> mDefault;
- ObjectBaseRef<Font> mLast;
void renderText(const char *text, uint32_t len, int32_t x, int32_t y,
uint32_t startIndex = 0, int numGlyphs = -1,
diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp
index f428f9486d8d..f5ced26e657c 100644
--- a/libs/rs/rsObjectBase.cpp
+++ b/libs/rs/rsObjectBase.cpp
@@ -81,6 +81,10 @@ void ObjectBase::incSysRef() const {
void ObjectBase::preDestroy() const {
}
+bool ObjectBase::freeChildren() {
+ return false;
+}
+
bool ObjectBase::checkDelete(const ObjectBase *ref) {
if (!ref) {
return false;
@@ -217,6 +221,28 @@ void ObjectBase::zeroAllUserRef(Context *rsc) {
}
}
+void ObjectBase::freeAllChildren(Context *rsc) {
+ if (rsc->props.mLogObjects) {
+ LOGV("Forcing release of all child objects.");
+ }
+
+ // This operation can be slow, only to be called during context cleanup.
+ ObjectBase * o = (ObjectBase *)rsc->mObjHead;
+ while (o) {
+ if (o->freeChildren()) {
+ // deleted ref to self and possibly others, restart from head.
+ o = (ObjectBase *)rsc->mObjHead;
+ } else {
+ o = (ObjectBase *)o->mNext;
+ }
+ }
+
+ if (rsc->props.mLogObjects) {
+ LOGV("Objects remaining.");
+ dumpAll(rsc);
+ }
+}
+
void ObjectBase::dumpAll(Context *rsc) {
asyncLock();
diff --git a/libs/rs/rsObjectBase.h b/libs/rs/rsObjectBase.h
index 01850f1e2511..d9f5f3ba1249 100644
--- a/libs/rs/rsObjectBase.h
+++ b/libs/rs/rsObjectBase.h
@@ -50,8 +50,10 @@ public:
void setName(const char *, uint32_t len);
Context * getContext() const {return mRSC;}
+ virtual bool freeChildren();
static void zeroAllUserRef(Context *rsc);
+ static void freeAllChildren(Context *rsc);
static void dumpAll(Context *rsc);
virtual void dumpLOGV(const char *prefix) const;
@@ -114,7 +116,10 @@ public:
}
ObjectBaseRef & operator= (const ObjectBaseRef &ref) {
- return ObjectBaseRef(ref);
+ if (&ref != this) {
+ set(ref);
+ }
+ return *this;
}
~ObjectBaseRef() {
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp
index b1d8f48b9ee3..4178aa5b547e 100644
--- a/libs/rs/rsProgram.cpp
+++ b/libs/rs/rsProgram.cpp
@@ -70,15 +70,8 @@ Program::Program(Context *rsc, const char * shaderText, uint32_t shaderLength,
}
Program::~Program() {
+ freeChildren();
- for (uint32_t ct=0; ct < mHal.state.constantsCount; ct++) {
- bindAllocation(NULL, NULL, ct);
- }
-
- for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
- bindTexture(NULL, ct, NULL);
- bindSampler(NULL, ct, NULL);
- }
delete[] mHal.state.textures;
delete[] mHal.state.samplers;
delete[] mHal.state.textureTargets;
@@ -90,6 +83,18 @@ Program::~Program() {
mHal.state.texturesCount = 0;
}
+bool Program::freeChildren() {
+ for (uint32_t ct=0; ct < mHal.state.constantsCount; ct++) {
+ bindAllocation(NULL, NULL, ct);
+ }
+
+ for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
+ bindTexture(NULL, ct, NULL);
+ bindSampler(NULL, ct, NULL);
+ }
+ return false;
+}
+
void Program::initMemberVars() {
mDirty = true;
@@ -116,7 +121,7 @@ void Program::bindAllocation(Context *rsc, Allocation *alloc, uint32_t slot) {
rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
return;
}
- if (!alloc->getType()->isEqual(mHal.state.constantTypes[slot].get())) {
+ if (alloc->getType() != mHal.state.constantTypes[slot].get()) {
LOGE("Attempt to bind alloc at slot %u, on shader id %u, but types mismatch",
slot, (uint32_t)this);
rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h
index 948ba3e0aa48..3237a7295eca 100644
--- a/libs/rs/rsProgram.h
+++ b/libs/rs/rsProgram.h
@@ -34,6 +34,7 @@ public:
Program(Context *, const char * shaderText, uint32_t shaderLength,
const uint32_t * params, uint32_t paramLength);
virtual ~Program();
+ virtual bool freeChildren();
void bindAllocation(Context *, Allocation *, uint32_t slot);
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 356ff778f126..ff2952051162 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -97,18 +97,18 @@ void ProgramFragmentState::init(Context *rsc) {
shaderString.append(" gl_FragColor = col;\n");
shaderString.append("}\n");
- const Element *colorElem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
- rsc->mStateElement.elementBuilderBegin();
- rsc->mStateElement.elementBuilderAdd(colorElem, "Color", 1);
- const Element *constInput = rsc->mStateElement.elementBuilderCreate(rsc);
+ ObjectBaseRef<const Element> colorElem = Element::createRef(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
+ Element::Builder builder;
+ builder.add(colorElem.get(), "Color", 1);
+ ObjectBaseRef<const Element> constInput = builder.create(rsc);
- Type *inputType = Type::getType(rsc, constInput, 1, 0, 0, false, false);
+ ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false);
uint32_t tmp[2];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType;
+ tmp[1] = (uint32_t)inputType.get();
- Allocation *constAlloc = Allocation::createAllocation(rsc, inputType,
+ Allocation *constAlloc = Allocation::createAllocation(rsc, inputType.get(),
RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
ProgramFragment *pf = new ProgramFragment(rsc, shaderString.string(),
shaderString.length(), tmp, 2);
diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp
index 435561d7308a..945b5eca68fd 100644
--- a/libs/rs/rsProgramRaster.cpp
+++ b/libs/rs/rsProgramRaster.cpp
@@ -37,6 +37,15 @@ ProgramRaster::ProgramRaster(Context *rsc, bool pointSmooth,
rsc->mHal.funcs.raster.init(rsc, this);
}
+void ProgramRaster::preDestroy() const {
+ for (uint32_t ct = 0; ct < mRSC->mStateRaster.mRasterPrograms.size(); ct++) {
+ if (mRSC->mStateRaster.mRasterPrograms[ct] == this) {
+ mRSC->mStateRaster.mRasterPrograms.removeAt(ct);
+ break;
+ }
+ }
+}
+
ProgramRaster::~ProgramRaster() {
mRSC->mHal.funcs.raster.destroy(mRSC, this);
}
@@ -65,8 +74,8 @@ ProgramRasterState::~ProgramRasterState() {
}
void ProgramRasterState::init(Context *rsc) {
- ProgramRaster *pr = new ProgramRaster(rsc, false, false, false, 1.f, RS_CULL_BACK);
- mDefault.set(pr);
+ mDefault.set(ProgramRaster::getProgramRaster(rsc, false, false,
+ false, 1.f, RS_CULL_BACK).get());
}
void ProgramRasterState::deinit(Context *rsc) {
@@ -74,19 +83,47 @@ void ProgramRasterState::deinit(Context *rsc) {
mLast.clear();
}
-namespace android {
-namespace renderscript {
+ObjectBaseRef<ProgramRaster> ProgramRaster::getProgramRaster(Context *rsc,
+ bool pointSmooth,
+ bool lineSmooth,
+ bool pointSprite,
+ float lineWidth,
+ RsCullMode cull) {
+ ObjectBaseRef<ProgramRaster> returnRef;
+ ObjectBase::asyncLock();
+ for (uint32_t ct = 0; ct < rsc->mStateRaster.mRasterPrograms.size(); ct++) {
+ ProgramRaster *existing = rsc->mStateRaster.mRasterPrograms[ct];
+ if (existing->mHal.state.pointSmooth != pointSmooth) continue;
+ if (existing->mHal.state.lineSmooth != lineSmooth) continue;
+ if (existing->mHal.state.pointSprite != pointSprite) continue;
+ if (existing->mHal.state.lineWidth != lineWidth) continue;
+ if (existing->mHal.state.cull != cull) continue;
+ returnRef.set(existing);
+ ObjectBase::asyncUnlock();
+ return returnRef;
+ }
+ ObjectBase::asyncUnlock();
-RsProgramRaster rsi_ProgramRasterCreate(Context * rsc,
- bool pointSmooth,
- bool lineSmooth,
- bool pointSprite,
- float lineWidth,
- RsCullMode cull) {
ProgramRaster *pr = new ProgramRaster(rsc, pointSmooth,
lineSmooth, pointSprite, lineWidth, cull);
+ returnRef.set(pr);
+
+ ObjectBase::asyncLock();
+ rsc->mStateRaster.mRasterPrograms.push(pr);
+ ObjectBase::asyncUnlock();
+
+ return returnRef;
+}
+
+namespace android {
+namespace renderscript {
+
+RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, bool pointSmooth, bool lineSmooth,
+ bool pointSprite, float lineWidth, RsCullMode cull) {
+ ObjectBaseRef<ProgramRaster> pr = ProgramRaster::getProgramRaster(rsc, pointSmooth, lineSmooth,
+ pointSprite, lineWidth, cull);
pr->incUserRef();
- return pr;
+ return pr.get();
}
}
diff --git a/libs/rs/rsProgramRaster.h b/libs/rs/rsProgramRaster.h
index efdb94874197..09d7d5432c9a 100644
--- a/libs/rs/rsProgramRaster.h
+++ b/libs/rs/rsProgramRaster.h
@@ -27,19 +27,17 @@ class ProgramRasterState;
class ProgramRaster : public ProgramBase {
public:
- ProgramRaster(Context *rsc,
- bool pointSmooth,
- bool lineSmooth,
- bool pointSprite,
- float lineWidth,
- RsCullMode cull);
- virtual ~ProgramRaster();
-
virtual void setup(const Context *, ProgramRasterState *);
virtual void serialize(OStream *stream) const;
virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_RASTER; }
static ProgramRaster *createFromStream(Context *rsc, IStream *stream);
+ static ObjectBaseRef<ProgramRaster> getProgramRaster(Context *rsc,
+ bool pointSmooth,
+ bool lineSmooth,
+ bool pointSprite,
+ float lineWidth,
+ RsCullMode cull);
struct Hal {
mutable void *drv;
@@ -55,6 +53,17 @@ public:
Hal mHal;
protected:
+ virtual void preDestroy() const;
+ virtual ~ProgramRaster();
+
+private:
+ ProgramRaster(Context *rsc,
+ bool pointSmooth,
+ bool lineSmooth,
+ bool pointSprite,
+ float lineWidth,
+ RsCullMode cull);
+
};
class ProgramRasterState {
@@ -66,6 +75,9 @@ public:
ObjectBaseRef<ProgramRaster> mDefault;
ObjectBaseRef<ProgramRaster> mLast;
+
+ // Cache of all existing raster programs.
+ Vector<ProgramRaster *> mRasterPrograms;
};
diff --git a/libs/rs/rsProgramStore.cpp b/libs/rs/rsProgramStore.cpp
index 8fe890becb72..7e25a226d8ae 100644
--- a/libs/rs/rsProgramStore.cpp
+++ b/libs/rs/rsProgramStore.cpp
@@ -41,6 +41,15 @@ ProgramStore::ProgramStore(Context *rsc,
mHal.state.depthFunc = depthFunc;
}
+void ProgramStore::preDestroy() const {
+ for (uint32_t ct = 0; ct < mRSC->mStateFragmentStore.mStorePrograms.size(); ct++) {
+ if (mRSC->mStateFragmentStore.mStorePrograms[ct] == this) {
+ mRSC->mStateFragmentStore.mStorePrograms.removeAt(ct);
+ break;
+ }
+ }
+}
+
ProgramStore::~ProgramStore() {
mRSC->mHal.funcs.store.destroy(mRSC, this);
}
@@ -71,14 +80,58 @@ ProgramStoreState::ProgramStoreState() {
ProgramStoreState::~ProgramStoreState() {
}
+ObjectBaseRef<ProgramStore> ProgramStore::getProgramStore(Context *rsc,
+ bool colorMaskR,
+ bool colorMaskG,
+ bool colorMaskB,
+ bool colorMaskA,
+ bool depthMask, bool ditherEnable,
+ RsBlendSrcFunc srcFunc,
+ RsBlendDstFunc destFunc,
+ RsDepthFunc depthFunc) {
+ ObjectBaseRef<ProgramStore> returnRef;
+ ObjectBase::asyncLock();
+ for (uint32_t ct = 0; ct < rsc->mStateFragmentStore.mStorePrograms.size(); ct++) {
+ ProgramStore *existing = rsc->mStateFragmentStore.mStorePrograms[ct];
+ if (existing->mHal.state.ditherEnable != ditherEnable) continue;
+ if (existing->mHal.state.colorRWriteEnable != colorMaskR) continue;
+ if (existing->mHal.state.colorGWriteEnable != colorMaskG) continue;
+ if (existing->mHal.state.colorBWriteEnable != colorMaskB) continue;
+ if (existing->mHal.state.colorAWriteEnable != colorMaskA) continue;
+ if (existing->mHal.state.blendSrc != srcFunc) continue;
+ if (existing->mHal.state.blendDst != destFunc) continue;
+ if (existing->mHal.state.depthWriteEnable != depthMask) continue;
+ if (existing->mHal.state.depthFunc != depthFunc) continue;
+
+ returnRef.set(existing);
+ ObjectBase::asyncUnlock();
+ return returnRef;
+ }
+ ObjectBase::asyncUnlock();
+
+ ProgramStore *pfs = new ProgramStore(rsc,
+ colorMaskR, colorMaskG, colorMaskB, colorMaskA,
+ depthMask, ditherEnable,
+ srcFunc, destFunc, depthFunc);
+ returnRef.set(pfs);
+
+ pfs->init();
+
+ ObjectBase::asyncLock();
+ rsc->mStateFragmentStore.mStorePrograms.push(pfs);
+ ObjectBase::asyncUnlock();
+
+ return returnRef;
+}
+
+
+
void ProgramStoreState::init(Context *rsc) {
- ProgramStore *ps = new ProgramStore(rsc,
- true, true, true, true,
- true, true,
- RS_BLEND_SRC_ONE, RS_BLEND_DST_ZERO,
- RS_DEPTH_FUNC_LESS);
- ps->init();
- mDefault.set(ps);
+ mDefault.set(ProgramStore::getProgramStore(rsc,
+ true, true, true, true,
+ true, true,
+ RS_BLEND_SRC_ONE, RS_BLEND_DST_ZERO,
+ RS_DEPTH_FUNC_LESS).get());
}
void ProgramStoreState::deinit(Context *rsc) {
@@ -96,13 +149,14 @@ RsProgramStore rsi_ProgramStoreCreate(Context *rsc,
RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
RsDepthFunc depthFunc) {
- ProgramStore *pfs = new ProgramStore(rsc,
- colorMaskR, colorMaskG, colorMaskB, colorMaskA,
- depthMask, ditherEnable,
- srcFunc, destFunc, depthFunc);
- pfs->init();
- pfs->incUserRef();
- return pfs;
+
+ ObjectBaseRef<ProgramStore> ps = ProgramStore::getProgramStore(rsc,
+ colorMaskR, colorMaskG,
+ colorMaskB, colorMaskA,
+ depthMask, ditherEnable,
+ srcFunc, destFunc, depthFunc);
+ ps->incUserRef();
+ return ps.get();
}
}
diff --git a/libs/rs/rsProgramStore.h b/libs/rs/rsProgramStore.h
index 77b3881fc8ee..e21f039678b3 100644
--- a/libs/rs/rsProgramStore.h
+++ b/libs/rs/rsProgramStore.h
@@ -28,18 +28,17 @@ class ProgramStoreState;
class ProgramStore : public ProgramBase {
public:
- ProgramStore(Context *,
- bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA,
- bool depthMask, bool ditherEnable,
- RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
- RsDepthFunc depthFunc);
- virtual ~ProgramStore();
-
virtual void setup(const Context *, ProgramStoreState *);
virtual void serialize(OStream *stream) const;
virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_STORE; }
static ProgramStore *createFromStream(Context *rsc, IStream *stream);
+ static ObjectBaseRef<ProgramStore> getProgramStore(Context *,
+ bool colorMaskR, bool colorMaskG,
+ bool colorMaskB, bool colorMaskA,
+ bool depthMask, bool ditherEnable,
+ RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
+ RsDepthFunc depthFunc);
void init();
@@ -66,6 +65,15 @@ public:
Hal mHal;
protected:
+ virtual void preDestroy() const;
+ virtual ~ProgramStore();
+
+private:
+ ProgramStore(Context *,
+ bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA,
+ bool depthMask, bool ditherEnable,
+ RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
+ RsDepthFunc depthFunc);
};
class ProgramStoreState {
@@ -77,6 +85,9 @@ public:
ObjectBaseRef<ProgramStore> mDefault;
ObjectBaseRef<ProgramStore> mLast;
+
+ // Cache of all existing store programs.
+ Vector<ProgramStore *> mStorePrograms;
};
}
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 058a4564e03f..51cb2a8ad490 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -150,26 +150,30 @@ ProgramVertexState::~ProgramVertexState() {
}
void ProgramVertexState::init(Context *rsc) {
- const Element *matrixElem = Element::create(rsc, RS_TYPE_MATRIX_4X4, RS_KIND_USER, false, 1);
- const Element *f2Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
- const Element *f3Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
- const Element *f4Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
-
- rsc->mStateElement.elementBuilderBegin();
- rsc->mStateElement.elementBuilderAdd(matrixElem, "MV", 1);
- rsc->mStateElement.elementBuilderAdd(matrixElem, "P", 1);
- rsc->mStateElement.elementBuilderAdd(matrixElem, "TexMatrix", 1);
- rsc->mStateElement.elementBuilderAdd(matrixElem, "MVP", 1);
- const Element *constInput = rsc->mStateElement.elementBuilderCreate(rsc);
-
- rsc->mStateElement.elementBuilderBegin();
- rsc->mStateElement.elementBuilderAdd(f4Elem, "position", 1);
- rsc->mStateElement.elementBuilderAdd(f4Elem, "color", 1);
- rsc->mStateElement.elementBuilderAdd(f3Elem, "normal", 1);
- rsc->mStateElement.elementBuilderAdd(f2Elem, "texture0", 1);
- const Element *attrElem = rsc->mStateElement.elementBuilderCreate(rsc);
-
- Type *inputType = Type::getType(rsc, constInput, 1, 0, 0, false, false);
+ ObjectBaseRef<const Element> matrixElem = Element::createRef(rsc, RS_TYPE_MATRIX_4X4,
+ RS_KIND_USER, false, 1);
+ ObjectBaseRef<const Element> f2Elem = Element::createRef(rsc, RS_TYPE_FLOAT_32,
+ RS_KIND_USER, false, 2);
+ ObjectBaseRef<const Element> f3Elem = Element::createRef(rsc, RS_TYPE_FLOAT_32,
+ RS_KIND_USER, false, 3);
+ ObjectBaseRef<const Element> f4Elem = Element::createRef(rsc, RS_TYPE_FLOAT_32,
+ RS_KIND_USER, false, 4);
+
+ Element::Builder constBuilder;
+ constBuilder.add(matrixElem.get(), "MV", 1);
+ constBuilder.add(matrixElem.get(), "P", 1);
+ constBuilder.add(matrixElem.get(), "TexMatrix", 1);
+ constBuilder.add(matrixElem.get(), "MVP", 1);
+ ObjectBaseRef<const Element> constInput = constBuilder.create(rsc);
+
+ Element::Builder inputBuilder;
+ inputBuilder.add(f4Elem.get(), "position", 1);
+ inputBuilder.add(f4Elem.get(), "color", 1);
+ inputBuilder.add(f3Elem.get(), "normal", 1);
+ inputBuilder.add(f2Elem.get(), "texture0", 1);
+ ObjectBaseRef<const Element> attrElem = inputBuilder.create(rsc);
+
+ ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false);
String8 shaderString(RS_SHADER_INTERNAL);
shaderString.append("varying vec4 varColor;\n");
@@ -183,13 +187,13 @@ void ProgramVertexState::init(Context *rsc) {
uint32_t tmp[4];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType;
+ tmp[1] = (uint32_t)inputType.get();
tmp[2] = RS_PROGRAM_PARAM_INPUT;
- tmp[3] = (uint32_t)attrElem;
+ tmp[3] = (uint32_t)attrElem.get();
ProgramVertex *pv = new ProgramVertex(rsc, shaderString.string(),
shaderString.length(), tmp, 4);
- Allocation *alloc = Allocation::createAllocation(rsc, inputType,
+ Allocation *alloc = Allocation::createAllocation(rsc, inputType.get(),
RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
pv->bindAllocation(rsc, alloc, 0);
diff --git a/libs/rs/rsSampler.cpp b/libs/rs/rsSampler.cpp
index 2a05d16e9bbe..5fc64a42cd1f 100644
--- a/libs/rs/rsSampler.cpp
+++ b/libs/rs/rsSampler.cpp
@@ -48,6 +48,15 @@ Sampler::~Sampler() {
mRSC->mHal.funcs.sampler.destroy(mRSC, this);
}
+void Sampler::preDestroy() const {
+ for (uint32_t ct = 0; ct < mRSC->mStateSampler.mAllSamplers.size(); ct++) {
+ if (mRSC->mStateSampler.mAllSamplers[ct] == this) {
+ mRSC->mStateSampler.mAllSamplers.removeAt(ct);
+ break;
+ }
+ }
+}
+
void Sampler::bindToContext(SamplerState *ss, uint32_t slot) {
ss->mSamplers[slot].set(this);
mBoundSlot = slot;
@@ -66,6 +75,39 @@ Sampler *Sampler::createFromStream(Context *rsc, IStream *stream) {
return NULL;
}
+ObjectBaseRef<Sampler> Sampler::getSampler(Context *rsc,
+ RsSamplerValue magFilter,
+ RsSamplerValue minFilter,
+ RsSamplerValue wrapS,
+ RsSamplerValue wrapT,
+ RsSamplerValue wrapR,
+ float aniso) {
+ ObjectBaseRef<Sampler> returnRef;
+ ObjectBase::asyncLock();
+ for (uint32_t ct = 0; ct < rsc->mStateSampler.mAllSamplers.size(); ct++) {
+ Sampler *existing = rsc->mStateSampler.mAllSamplers[ct];
+ if (existing->mHal.state.magFilter != magFilter) continue;
+ if (existing->mHal.state.minFilter != minFilter ) continue;
+ if (existing->mHal.state.wrapS != wrapS) continue;
+ if (existing->mHal.state.wrapT != wrapT) continue;
+ if (existing->mHal.state.wrapR != wrapR) continue;
+ if (existing->mHal.state.aniso != aniso) continue;
+ returnRef.set(existing);
+ ObjectBase::asyncUnlock();
+ return returnRef;
+ }
+ ObjectBase::asyncUnlock();
+
+ Sampler *s = new Sampler(rsc, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
+ returnRef.set(s);
+
+ ObjectBase::asyncLock();
+ rsc->mStateSampler.mAllSamplers.push(s);
+ ObjectBase::asyncUnlock();
+
+ return returnRef;
+}
+
////////////////////////////////
namespace android {
@@ -78,9 +120,10 @@ RsSampler rsi_SamplerCreate(Context * rsc,
RsSamplerValue wrapT,
RsSamplerValue wrapR,
float aniso) {
- Sampler * s = new Sampler(rsc, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
+ ObjectBaseRef<Sampler> s = Sampler::getSampler(rsc, magFilter, minFilter,
+ wrapS, wrapT, wrapR, aniso);
s->incUserRef();
- return s;
+ return s.get();
}
}}
diff --git a/libs/rs/rsSampler.h b/libs/rs/rsSampler.h
index 90b6082c139d..e698132d0f70 100644
--- a/libs/rs/rsSampler.h
+++ b/libs/rs/rsSampler.h
@@ -30,16 +30,13 @@ class SamplerState;
class Sampler : public ObjectBase {
public:
- Sampler(Context *,
- RsSamplerValue magFilter,
- RsSamplerValue minFilter,
- RsSamplerValue wrapS,
- RsSamplerValue wrapT,
- RsSamplerValue wrapR,
- float aniso = 1.0f);
-
- virtual ~Sampler();
-
+ static ObjectBaseRef<Sampler> getSampler(Context *,
+ RsSamplerValue magFilter,
+ RsSamplerValue minFilter,
+ RsSamplerValue wrapS,
+ RsSamplerValue wrapT,
+ RsSamplerValue wrapR,
+ float aniso = 1.0f);
void bindToContext(SamplerState *, uint32_t slot);
void unbindFromContext(SamplerState *);
@@ -65,14 +62,33 @@ public:
protected:
int32_t mBoundSlot;
+ virtual void preDestroy() const;
+ virtual ~Sampler();
+
private:
Sampler(Context *);
+ Sampler(Context *,
+ RsSamplerValue magFilter,
+ RsSamplerValue minFilter,
+ RsSamplerValue wrapS,
+ RsSamplerValue wrapT,
+ RsSamplerValue wrapR,
+ float aniso = 1.0f);
};
class SamplerState {
public:
ObjectBaseRef<Sampler> mSamplers[RS_MAX_SAMPLER_SLOT];
+ void init(Context *rsc) {
+ }
+ void deinit(Context *rsc) {
+ for (uint32_t i = 0; i < RS_MAX_SAMPLER_SLOT; i ++) {
+ mSamplers[i].clear();
+ }
+ }
+ // Cache of all existing raster programs.
+ Vector<Sampler *> mAllSamplers;
};
}
diff --git a/libs/rs/rsType.cpp b/libs/rs/rsType.cpp
index 10e3182c6389..9a6a31b4f89f 100644
--- a/libs/rs/rsType.cpp
+++ b/libs/rs/rsType.cpp
@@ -25,7 +25,7 @@ Type::Type(Context *rsc) : ObjectBase(rsc) {
clear();
}
-void Type::preDestroy() {
+void Type::preDestroy() const {
for (uint32_t ct = 0; ct < mRSC->mStateType.mTypes.size(); ct++) {
if (mRSC->mStateType.mTypes[ct] == this) {
mRSC->mStateType.mTypes.removeAt(ct);
@@ -58,6 +58,7 @@ TypeState::TypeState() {
}
TypeState::~TypeState() {
+ rsAssert(!mTypes.size());
}
size_t Type::getOffsetForFace(uint32_t face) const {
@@ -183,7 +184,9 @@ Type *Type::createFromStream(Context *rsc, IStream *stream) {
uint32_t z = stream->loadU32();
uint8_t lod = stream->loadU8();
uint8_t faces = stream->loadU8();
- return Type::getType(rsc, elem, x, y, z, lod != 0, faces !=0 );
+ Type *type = Type::getType(rsc, elem, x, y, z, lod != 0, faces !=0 );
+ elem->decUserRef();
+ return type;
}
bool Type::getIsNp2() const {
@@ -203,24 +206,11 @@ bool Type::getIsNp2() const {
return false;
}
-bool Type::isEqual(const Type *other) const {
- if (other == NULL) {
- return false;
- }
- if (other->getElement()->isEqual(getElement()) &&
- other->getDimX() == mDimX &&
- other->getDimY() == mDimY &&
- other->getDimZ() == mDimZ &&
- other->getDimLOD() == mDimLOD &&
- other->getDimFaces() == mFaces) {
- return true;
- }
- return false;
-}
+ObjectBaseRef<Type> Type::getTypeRef(Context *rsc, const Element *e,
+ uint32_t dimX, uint32_t dimY, uint32_t dimZ,
+ bool dimLOD, bool dimFaces) {
+ ObjectBaseRef<Type> returnRef;
-Type * Type::getType(Context *rsc, const Element *e,
- uint32_t dimX, uint32_t dimY, uint32_t dimZ,
- bool dimLOD, bool dimFaces) {
TypeState * stc = &rsc->mStateType;
ObjectBase::asyncLock();
@@ -232,14 +222,15 @@ Type * Type::getType(Context *rsc, const Element *e,
if (t->getDimZ() != dimZ) continue;
if (t->getDimLOD() != dimLOD) continue;
if (t->getDimFaces() != dimFaces) continue;
- t->incUserRef();
+ returnRef.set(t);
ObjectBase::asyncUnlock();
- return t;
+ return returnRef;
}
ObjectBase::asyncUnlock();
Type *nt = new Type(rsc);
+ returnRef.set(nt);
nt->mElement.set(e);
nt->mDimX = dimX;
nt->mDimY = dimY;
@@ -247,25 +238,24 @@ Type * Type::getType(Context *rsc, const Element *e,
nt->mDimLOD = dimLOD;
nt->mFaces = dimFaces;
nt->compute();
- nt->incUserRef();
ObjectBase::asyncLock();
stc->mTypes.push(nt);
ObjectBase::asyncUnlock();
- return nt;
+ return returnRef;
}
-Type * Type::cloneAndResize1D(Context *rsc, uint32_t dimX) const {
- return getType(rsc, mElement.get(), dimX,
- mDimY, mDimZ, mDimLOD, mFaces);
+ObjectBaseRef<Type> Type::cloneAndResize1D(Context *rsc, uint32_t dimX) const {
+ return getTypeRef(rsc, mElement.get(), dimX,
+ mDimY, mDimZ, mDimLOD, mFaces);
}
-Type * Type::cloneAndResize2D(Context *rsc,
+ObjectBaseRef<Type> Type::cloneAndResize2D(Context *rsc,
uint32_t dimX,
uint32_t dimY) const {
- return getType(rsc, mElement.get(), dimX, dimY,
- mDimZ, mDimLOD, mFaces);
+ return getTypeRef(rsc, mElement.get(), dimX, dimY,
+ mDimZ, mDimLOD, mFaces);
}
diff --git a/libs/rs/rsType.h b/libs/rs/rsType.h
index 086db337093b..bc0d9ffdbe46 100644
--- a/libs/rs/rsType.h
+++ b/libs/rs/rsType.h
@@ -62,14 +62,20 @@ public:
virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_TYPE; }
static Type *createFromStream(Context *rsc, IStream *stream);
- bool isEqual(const Type *other) const;
+ ObjectBaseRef<Type> cloneAndResize1D(Context *rsc, uint32_t dimX) const;
+ ObjectBaseRef<Type> cloneAndResize2D(Context *rsc, uint32_t dimX, uint32_t dimY) const;
- Type * cloneAndResize1D(Context *rsc, uint32_t dimX) const;
- Type * cloneAndResize2D(Context *rsc, uint32_t dimX, uint32_t dimY) const;
+ static ObjectBaseRef<Type> getTypeRef(Context *rsc, const Element *e,
+ uint32_t dimX, uint32_t dimY, uint32_t dimZ,
+ bool dimLOD, bool dimFaces);
- static Type * getType(Context *rsc, const Element *e,
- uint32_t dimX, uint32_t dimY, uint32_t dimZ,
- bool dimLOD, bool dimFaces);
+ static Type* getType(Context *rsc, const Element *e,
+ uint32_t dimX, uint32_t dimY, uint32_t dimZ,
+ bool dimLOD, bool dimFaces) {
+ ObjectBaseRef<Type> type = getTypeRef(rsc, e, dimX, dimY, dimZ, dimLOD, dimFaces);
+ type->incUserRef();
+ return type.get();
+ }
protected:
struct LOD {
@@ -105,7 +111,7 @@ protected:
uint32_t mLODCount;
protected:
- virtual void preDestroy();
+ virtual void preDestroy() const;
virtual ~Type();
private:
diff --git a/libs/rs/rs_hal.h b/libs/rs/rs_hal.h
index 6a4537b392a2..21dff218c868 100644
--- a/libs/rs/rs_hal.h
+++ b/libs/rs/rs_hal.h
@@ -40,6 +40,19 @@ class FBOCache;
typedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName);
+typedef struct {
+ const void *in;
+ void *out;
+ const void *usr;
+ size_t usr_len;
+ uint32_t x;
+ uint32_t y;
+ uint32_t z;
+ uint32_t lod;
+ RsAllocationCubemapFace face;
+ uint32_t ar[16];
+} RsForEachStubParamStruct;
+
/**
* Script management functions
*/
diff --git a/libs/ui/EGLUtils.cpp b/libs/ui/EGLUtils.cpp
index 020646b9c416..f24a71d88d9d 100644
--- a/libs/ui/EGLUtils.cpp
+++ b/libs/ui/EGLUtils.cpp
@@ -24,8 +24,6 @@
#include <EGL/egl.h>
-#include <system/graphics.h>
-
#include <private/ui/android_natives_priv.h>
// ----------------------------------------------------------------------------
@@ -69,49 +67,31 @@ status_t EGLUtils::selectConfigForPixelFormat(
return BAD_VALUE;
// Get all the "potential match" configs...
- if (eglChooseConfig(dpy, attrs, 0, 0, &numConfigs) == EGL_FALSE)
+ if (eglGetConfigs(dpy, NULL, 0, &numConfigs) == EGL_FALSE)
return BAD_VALUE;
- if (numConfigs) {
- EGLConfig* const configs = new EGLConfig[numConfigs];
- if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) {
- delete [] configs;
- return BAD_VALUE;
- }
-
- bool hasAlpha = false;
- switch (format) {
- case HAL_PIXEL_FORMAT_RGBA_8888:
- case HAL_PIXEL_FORMAT_BGRA_8888:
- case HAL_PIXEL_FORMAT_RGBA_5551:
- case HAL_PIXEL_FORMAT_RGBA_4444:
- hasAlpha = true;
- break;
- }
-
- // The first config is guaranteed to over-satisfy the constraints
- EGLConfig config = configs[0];
-
- // go through the list and skip configs that over-satisfy our needs
- int i;
- for (i=0 ; i<n ; i++) {
- if (!hasAlpha) {
- EGLint alphaSize;
- eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize);
- if (alphaSize > 0) {
- continue;
- }
- }
+ EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs);
+ if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) {
+ free(configs);
+ return BAD_VALUE;
+ }
+
+ int i;
+ EGLConfig config = NULL;
+ for (i=0 ; i<n ; i++) {
+ EGLint nativeVisualId = 0;
+ eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId);
+ if (nativeVisualId>0 && format == nativeVisualId) {
config = configs[i];
break;
}
+ }
- delete [] configs;
-
- if (i<n) {
- *outConfig = config;
- return NO_ERROR;
- }
+ free(configs);
+
+ if (i<n) {
+ *outConfig = config;
+ return NO_ERROR;
}
return NAME_NOT_FOUND;
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 56a993398874..f9efd3ca6a69 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -21,6 +21,7 @@ import android.annotation.SdkConstant.SdkConstantType;
import android.content.ComponentName;
import android.content.Context;
import android.database.ContentObserver;
+import android.graphics.Bitmap;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
@@ -1715,44 +1716,135 @@ public class AudioManager {
}
/**
+ * Acts as a proxy between AudioService and the RemoteControlClient
+ */
+ private IRemoteControlClientDispatcher mRcClientDispatcher =
+ new IRemoteControlClientDispatcher.Stub() {
+
+ public String getMetadataStringForClient(String clientName, int field) {
+ RemoteControlClient realClient;
+ synchronized(mRcClientMap) {
+ realClient = mRcClientMap.get(clientName);
+ }
+ if (realClient != null) {
+ return realClient.getMetadataString(field);
+ } else {
+ return null;
+ }
+ }
+
+ public int getPlaybackStateForClient(String clientName) {
+ RemoteControlClient realClient;
+ synchronized(mRcClientMap) {
+ realClient = mRcClientMap.get(clientName);
+ }
+ if (realClient != null) {
+ return realClient.getPlaybackState();
+ } else {
+ return 0;
+ }
+ }
+
+ public int getTransportControlFlagsForClient(String clientName) {
+ RemoteControlClient realClient;
+ synchronized(mRcClientMap) {
+ realClient = mRcClientMap.get(clientName);
+ }
+ if (realClient != null) {
+ return realClient.getTransportControlFlags();
+ } else {
+ return 0;
+ }
+ }
+
+ public Bitmap getAlbumArtForClient(String clientName, int maxWidth, int maxHeight) {
+ RemoteControlClient realClient;
+ synchronized(mRcClientMap) {
+ realClient = mRcClientMap.get(clientName);
+ }
+ if (realClient != null) {
+ return realClient.getAlbumArt(maxWidth, maxHeight);
+ } else {
+ return null;
+ }
+ }
+ };
+
+ private HashMap<String, RemoteControlClient> mRcClientMap =
+ new HashMap<String, RemoteControlClient>();
+
+ private String getIdForRcClient(RemoteControlClient client) {
+ // client is guaranteed to be non-null
+ return client.toString();
+ }
+
+ /**
* @hide
- * Registers the remote control client for providing information to display on the remotes.
+ * Registers the remote control client for providing information to display on the remote
+ * controls.
* @param eventReceiver identifier of a {@link android.content.BroadcastReceiver}
* that will receive the media button intent, and associated with the remote control
* client. This method has no effect if
* {@link #registerMediaButtonEventReceiver(ComponentName)} hasn't been called
* with the same eventReceiver, or if
* {@link #unregisterMediaButtonEventReceiver(ComponentName)} has been called.
- * @param rcClient the client associated with the event receiver, responsible for providing
- * the information to display on the remote control.
+ * @param rcClient the remote control client associated with the event receiver, responsible
+ * for providing the information to display on the remote control.
*/
public void registerRemoteControlClient(ComponentName eventReceiver,
- IRemoteControlClient rcClient) {
- if (eventReceiver == null) {
+ RemoteControlClient rcClient) {
+ if ((eventReceiver == null) || (rcClient == null)) {
return;
}
+ String clientKey = getIdForRcClient(rcClient);
+ synchronized(mRcClientMap) {
+ if (mRcClientMap.containsKey(clientKey)) {
+ return;
+ }
+ mRcClientMap.put(clientKey, rcClient);
+ }
IAudioService service = getService();
try {
- service.registerRemoteControlClient(eventReceiver, rcClient,
+ service.registerRemoteControlClient(eventReceiver, mRcClientDispatcher, clientKey,
// used to match media button event receiver and audio focus
mContext.getPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Dead object in registerRemoteControlClient"+e);
+ synchronized(mRcClientMap) {
+ mRcClientMap.remove(clientKey);
+ }
}
}
/**
* @hide
- * @param eventReceiver
- */
- public void unregisterRemoteControlClient(ComponentName eventReceiver) {
- if (eventReceiver == null) {
+ * Unregisters the remote control client that was providing information to display on the
+ * remotes.
+ * @param eventReceiver identifier of a {@link android.content.BroadcastReceiver}
+ * that receives the media button intent, and associated with the remote control
+ * client.
+ * @param rcClient the remote control client to unregister
+ * @see #registerRemoteControlClient(ComponentName, RemoteControlClient)
+ */
+ public void unregisterRemoteControlClient(ComponentName eventReceiver,
+ RemoteControlClient rcClient) {
+ if ((eventReceiver == null) || (rcClient == null)) {
return;
}
IAudioService service = getService();
try {
- // unregistering a IRemoteControlClient is equivalent to setting it to null
- service.registerRemoteControlClient(eventReceiver, null, mContext.getPackageName());
+ // remove locally
+ boolean unregister = true;
+ synchronized(mRcClientMap) {
+ if (mRcClientMap.remove(getIdForRcClient(rcClient)) == null) {
+ unregister = false;
+ }
+ }
+ if (unregister) {
+ // unregistering a RemoteControlClient is equivalent to setting it to null
+ service.registerRemoteControlClient(eventReceiver, null, null,
+ mContext.getPackageName());
+ }
} catch (RemoteException e) {
Log.e(TAG, "Dead object in unregisterRemoteControlClient"+e);
}
@@ -1761,17 +1853,17 @@ public class AudioManager {
/**
* @hide
* Returns the current remote control client.
- * @param rcClientId the counter value that matches the extra
- * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT} in the
+ * @param rcClientId the generation counter that matches the extra
+ * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT_GENERATION} in the
* {@link AudioManager#REMOTE_CONTROL_CLIENT_CHANGED} event
- * @return the current IRemoteControlClient from which information to display on the remote
+ * @return the current RemoteControlClient from which information to display on the remote
* control can be retrieved, or null if rcClientId doesn't match the current generation
* counter.
*/
- public IRemoteControlClient getRemoteControlClient(int rcClientId) {
+ public IRemoteControlClientDispatcher getRemoteControlClientDispatcher(int rcClientId) {
IAudioService service = getService();
try {
- return service.getRemoteControlClient(rcClientId);
+ return service.getRemoteControlClientDispatcher(rcClientId);
} catch (RemoteException e) {
Log.e(TAG, "Dead object in getRemoteControlClient "+e);
return null;
@@ -1780,35 +1872,6 @@ public class AudioManager {
/**
* @hide
- * Definitions of constants to be used in {@link android.media.IRemoteControlClient}.
- */
- public final class RemoteControlParameters {
- public final static int PLAYSTATE_STOPPED = 1;
- public final static int PLAYSTATE_PAUSED = 2;
- public final static int PLAYSTATE_PLAYING = 3;
- public final static int PLAYSTATE_FAST_FORWARDING = 4;
- public final static int PLAYSTATE_REWINDING = 5;
- public final static int PLAYSTATE_SKIPPING_FORWARDS = 6;
- public final static int PLAYSTATE_SKIPPING_BACKWARDS = 7;
- public final static int PLAYSTATE_BUFFERING = 8;
-
- public final static int FLAG_KEY_MEDIA_PREVIOUS = 1 << 0;
- public final static int FLAG_KEY_MEDIA_REWIND = 1 << 1;
- public final static int FLAG_KEY_MEDIA_PLAY = 1 << 2;
- public final static int FLAG_KEY_MEDIA_PLAY_PAUSE = 1 << 3;
- public final static int FLAG_KEY_MEDIA_PAUSE = 1 << 4;
- public final static int FLAG_KEY_MEDIA_STOP = 1 << 5;
- public final static int FLAG_KEY_MEDIA_FAST_FORWARD = 1 << 6;
- public final static int FLAG_KEY_MEDIA_NEXT = 1 << 7;
-
- public final static int FLAG_INFORMATION_CHANGED_METADATA = 1 << 0;
- public final static int FLAG_INFORMATION_CHANGED_KEY_MEDIA = 1 << 1;
- public final static int FLAG_INFORMATION_CHANGED_PLAYSTATE = 1 << 2;
- public final static int FLAG_INFORMATION_CHANGED_ALBUM_ART = 1 << 3;
- }
-
- /**
- * @hide
* Broadcast intent action indicating that the displays on the remote controls
* should be updated because a new remote control client is now active. If there is no
* {@link #EXTRA_REMOTE_CONTROL_CLIENT}, the remote control display should be cleared
@@ -1821,12 +1884,34 @@ public class AudioManager {
/**
* @hide
- * The IRemoteControlClient monotonically increasing generation counter.
+ * The IRemoteControlClientDispatcher monotonically increasing generation counter.
+ *
+ * @see #REMOTE_CONTROL_CLIENT_CHANGED_ACTION
+ */
+ public static final String EXTRA_REMOTE_CONTROL_CLIENT_GENERATION =
+ "android.media.EXTRA_REMOTE_CONTROL_CLIENT_GENERATION";
+
+ /**
+ * @hide
+ * The name of the RemoteControlClient.
+ * This String is passed as the client name when calling methods from the
+ * IRemoteControlClientDispatcher interface.
+ *
+ * @see #REMOTE_CONTROL_CLIENT_CHANGED_ACTION
+ */
+ public static final String EXTRA_REMOTE_CONTROL_CLIENT_NAME =
+ "android.media.EXTRA_REMOTE_CONTROL_CLIENT_NAME";
+
+ /**
+ * @hide
+ * The media button event receiver associated with the RemoteControlClient.
+ * The {@link android.content.ComponentName} value of the event receiver can be retrieved with
+ * {@link android.content.ComponentName#unflattenFromString(String)}
*
* @see #REMOTE_CONTROL_CLIENT_CHANGED_ACTION
*/
- public static final String EXTRA_REMOTE_CONTROL_CLIENT =
- "android.media.EXTRA_REMOTE_CONTROL_CLIENT";
+ public static final String EXTRA_REMOTE_CONTROL_EVENT_RECEIVER =
+ "android.media.EXTRA_REMOTE_CONTROL_EVENT_RECEIVER";
/**
* @hide
@@ -1850,10 +1935,10 @@ public class AudioManager {
* @param infoFlag the type of information that has changed since this method was last called,
* or the event receiver was registered. Use one or multiple of the following flags to
* describe what changed:
- * {@link RemoteControlParameters#FLAG_INFORMATION_CHANGED_METADATA},
- * {@link RemoteControlParameters#FLAG_INFORMATION_CHANGED_KEY_MEDIA},
- * {@link RemoteControlParameters#FLAG_INFORMATION_CHANGED_PLAYSTATE},
- * {@link RemoteControlParameters#FLAG_INFORMATION_CHANGED_ALBUM_ART}.
+ * {@link RemoteControlClient#FLAG_INFORMATION_CHANGED_METADATA},
+ * {@link RemoteControlClient#FLAG_INFORMATION_CHANGED_KEY_MEDIA},
+ * {@link RemoteControlClient#FLAG_INFORMATION_CHANGED_PLAYSTATE},
+ * {@link RemoteControlClient#FLAG_INFORMATION_CHANGED_ALBUM_ART}.
*/
public void notifyRemoteControlInformationChanged(ComponentName eventReceiver, int infoFlag) {
IAudioService service = getService();
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 59512297bbca..85c7dba423d0 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -17,6 +17,7 @@
package android.media;
import android.app.ActivityManagerNative;
+import android.app.KeyguardManager;
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
@@ -33,6 +34,7 @@ import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
+import android.media.IRemoteControlClientDispatcher;
import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
@@ -309,6 +311,8 @@ public class AudioService extends IAudioService.Stub {
private static final int NOTIFICATION_VOLUME_DELAY_MS = 5000;
// previous volume adjustment direction received by checkForRingerModeChange()
private int mPrevVolDirection = AudioManager.ADJUST_SAME;
+ // Keyguard manager proxy
+ private KeyguardManager mKeyguardManager;
///////////////////////////////////////////////////////////////////////////
// Construction
@@ -492,8 +496,10 @@ public class AudioService extends IAudioService.Stub {
streamType = getActiveStreamType(suggestedStreamType);
}
- // Don't play sound on other streams
- if (streamType != AudioSystem.STREAM_RING && (flags & AudioManager.FLAG_PLAY_SOUND) != 0) {
+ // Play sounds on STREAM_RING only and if lock screen is not on.
+ if ((flags & AudioManager.FLAG_PLAY_SOUND) != 0 &&
+ ((STREAM_VOLUME_ALIAS[streamType] != AudioSystem.STREAM_RING) ||
+ (mKeyguardManager != null && mKeyguardManager.isKeyguardLocked()))) {
flags &= ~AudioManager.FLAG_PLAY_SOUND;
}
@@ -516,6 +522,10 @@ public class AudioService extends IAudioService.Stub {
(!mVoiceCapable && streamType != AudioSystem.STREAM_VOICE_CALL &&
streamType != AudioSystem.STREAM_BLUETOOTH_SCO) ||
(mVoiceCapable && streamType == AudioSystem.STREAM_RING)) {
+ // do not vibrate if already in silent mode
+ if (mRingerMode != AudioManager.RINGER_MODE_NORMAL) {
+ flags &= ~AudioManager.FLAG_VIBRATE;
+ }
// Check if the ringer mode changes with this volume adjustment. If
// it does, it will handle adjusting the volume, so we won't below
adjustVolume = checkForRingerModeChange(oldIndex, direction);
@@ -1547,14 +1557,17 @@ public class AudioService extends IAudioService.Stub {
int newRingerMode = mRingerMode;
if (mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
- // audible mode, at the bottom of the scale
- if ((direction == AudioManager.ADJUST_LOWER &&
- mPrevVolDirection != AudioManager.ADJUST_LOWER) &&
- ((oldIndex + 5) / 10 == 0)) {
- // "silent mode", but which one?
- newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1
- ? AudioManager.RINGER_MODE_VIBRATE
- : AudioManager.RINGER_MODE_SILENT;
+ if ((direction == AudioManager.ADJUST_LOWER) && ((oldIndex + 5) / 10 <= 1)) {
+ // enter silent mode if current index is the last audible one and not repeating a
+ // volume key down
+ if (mPrevVolDirection != AudioManager.ADJUST_LOWER) {
+ // "silent mode", but which one?
+ newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1
+ ? AudioManager.RINGER_MODE_VIBRATE
+ : AudioManager.RINGER_MODE_SILENT;
+ } else {
+ adjustVolumeIndex = false;
+ }
}
} else {
if (direction == AudioManager.ADJUST_RAISE) {
@@ -2160,15 +2173,17 @@ public class AudioService extends IAudioService.Stub {
// TODO remove log before release
Log.i(TAG, "Clear remote control display");
Intent clearIntent = new Intent(AudioManager.REMOTE_CONTROL_CLIENT_CHANGED);
- // no extra means no IRemoteControlClient, which is a request to clear
+ // no extra means no IRemoteControlClientDispatcher, which is a request to clear
clearIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
mContext.sendBroadcast(clearIntent);
break;
case MSG_RCDISPLAY_UPDATE:
synchronized(mCurrentRcLock) {
+ // msg.obj is guaranteed to be non null
+ RemoteControlStackEntry rcse = (RemoteControlStackEntry)msg.obj;
if ((mCurrentRcClient == null) ||
- (!mCurrentRcClient.equals((IRemoteControlClient)msg.obj))) {
+ (!mCurrentRcClient.equals(rcse.mRcClient))) {
// 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)
@@ -2178,11 +2193,18 @@ public class AudioService extends IAudioService.Stub {
Log.i(TAG, "Display/update remote control ");
Intent rcClientIntent = new Intent(
AudioManager.REMOTE_CONTROL_CLIENT_CHANGED);
- rcClientIntent.putExtra(AudioManager.EXTRA_REMOTE_CONTROL_CLIENT,
+ rcClientIntent.putExtra(
+ AudioManager.EXTRA_REMOTE_CONTROL_CLIENT_GENERATION,
mCurrentRcClientGen);
rcClientIntent.putExtra(
AudioManager.EXTRA_REMOTE_CONTROL_CLIENT_INFO_CHANGED,
msg.arg1);
+ rcClientIntent.putExtra(
+ AudioManager.EXTRA_REMOTE_CONTROL_EVENT_RECEIVER,
+ rcse.mReceiverComponent.flattenToString());
+ rcClientIntent.putExtra(
+ AudioManager.EXTRA_REMOTE_CONTROL_CLIENT_NAME,
+ rcse.mRcClientName);
rcClientIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
mContext.sendBroadcast(rcClientIntent);
}
@@ -2508,6 +2530,8 @@ public class AudioService extends IAudioService.Stub {
sendMsg(mAudioHandler, MSG_LOAD_SOUND_EFFECTS, SHARED_MSG, SENDMSG_NOOP,
0, 0, null, 0);
+ mKeyguardManager =
+ (KeyguardManager)mContext.getSystemService(Context.KEYGUARD_SERVICE);
mScoConnectionState = AudioManager.SCO_AUDIO_STATE_ERROR;
resetBluetoothSco();
getBluetoothHeadset();
@@ -2876,14 +2900,14 @@ public class AudioService extends IAudioService.Stub {
* This object may be null.
* Access protected by mCurrentRcLock.
*/
- private IRemoteControlClient mCurrentRcClient = null;
+ private IRemoteControlClientDispatcher mCurrentRcClient = null;
private final static int RC_INFO_NONE = 0;
private final static int RC_INFO_ALL =
- AudioManager.RemoteControlParameters.FLAG_INFORMATION_CHANGED_ALBUM_ART |
- AudioManager.RemoteControlParameters.FLAG_INFORMATION_CHANGED_KEY_MEDIA |
- AudioManager.RemoteControlParameters.FLAG_INFORMATION_CHANGED_METADATA |
- AudioManager.RemoteControlParameters.FLAG_INFORMATION_CHANGED_PLAYSTATE;
+ RemoteControlClient.FLAG_INFORMATION_CHANGED_ALBUM_ART |
+ RemoteControlClient.FLAG_INFORMATION_CHANGED_KEY_MEDIA |
+ RemoteControlClient.FLAG_INFORMATION_CHANGED_METADATA |
+ RemoteControlClient.FLAG_INFORMATION_CHANGED_PLAYSTATE;
/**
* A monotonically increasing generation counter for mCurrentRcClient.
@@ -2895,13 +2919,13 @@ public class AudioService extends IAudioService.Stub {
/**
* Returns the current remote control client.
* @param rcClientId the counter value that matches the extra
- * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT} in the
+ * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT_GENERATION} in the
* {@link AudioManager#REMOTE_CONTROL_CLIENT_CHANGED} event
- * @return the current IRemoteControlClient from which information to display on the remote
- * control can be retrieved, or null if rcClientId doesn't match the current generation
- * counter.
+ * @return the current IRemoteControlClientDispatcher from which information to display on the
+ * remote control can be retrieved, or null if rcClientId doesn't match the current
+ * generation counter.
*/
- public IRemoteControlClient getRemoteControlClient(int rcClientId) {
+ public IRemoteControlClientDispatcher getRemoteControlClientDispatcher(int rcClientId) {
synchronized(mCurrentRcLock) {
if (rcClientId == mCurrentRcClientGen) {
return mCurrentRcClient;
@@ -2928,7 +2952,7 @@ public class AudioService extends IAudioService.Stub {
Log.w(TAG, " RemoteControlClient died");
// remote control client died, make sure the displays don't use it anymore
// by setting its remote control client to null
- registerRemoteControlClient(mRcEventReceiver, null, null/*ignored*/);
+ registerRemoteControlClient(mRcEventReceiver, null, null, null/*ignored*/);
}
public IBinder getBinder() {
@@ -2940,10 +2964,11 @@ public class AudioService extends IAudioService.Stub {
/** the target for the ACTION_MEDIA_BUTTON events */
public ComponentName mReceiverComponent;// always non null
public String mCallingPackageName;
+ public String mRcClientName;
public int mCallingUid;
/** provides access to the information to display on the remote control */
- public IRemoteControlClient mRcClient;
+ public IRemoteControlClientDispatcher mRcClient;
public RcClientDeathHandler mRcClientDeathHandler;
public RemoteControlStackEntry(ComponentName r) {
@@ -3131,7 +3156,7 @@ public class AudioService extends IAudioService.Stub {
mCurrentRcClient = rcse.mRcClient;
}
mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_UPDATE,
- infoFlagsAboutToBeUsed /* arg1 */, 0, rcse.mRcClient /* obj */) );
+ infoFlagsAboutToBeUsed /* arg1 */, 0, rcse /* obj, != null */) );
}
/**
@@ -3198,7 +3223,7 @@ public class AudioService extends IAudioService.Stub {
/** see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...) */
public void registerRemoteControlClient(ComponentName eventReceiver,
- IRemoteControlClient rcClient, String callingPackageName) {
+ IRemoteControlClientDispatcher rcClient, String clientName, String callingPackageName) {
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
// store the new display information
@@ -3214,8 +3239,10 @@ public class AudioService extends IAudioService.Stub {
// save the new remote control client
rcse.mRcClient = rcClient;
rcse.mCallingPackageName = callingPackageName;
+ rcse.mRcClientName = clientName;
rcse.mCallingUid = Binder.getCallingUid();
if (rcClient == null) {
+ rcse.mRcClientDeathHandler = null;
break;
}
// monitor the new client's death
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index c259aa34706b..7f9ced9f055e 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -18,9 +18,7 @@ package android.media;
import android.content.ComponentName;
import android.media.IAudioFocusDispatcher;
-import android.media.IRemoteControlClient;
-import android.net.Uri;
-import android.os.Bundle;
+import android.media.IRemoteControlClientDispatcher;
/**
* {@hide}
@@ -91,9 +89,10 @@ interface IAudioService {
void unregisterMediaButtonEventReceiver(in ComponentName eventReceiver);
void registerRemoteControlClient(in ComponentName eventReceiver,
- in IRemoteControlClient rcClient, in String callingPackageName);
+ in IRemoteControlClientDispatcher rcClient, in String clientName,
+ in String callingPackageName);
- IRemoteControlClient getRemoteControlClient(in int rcClientId);
+ IRemoteControlClientDispatcher getRemoteControlClientDispatcher(in int rcClientId);
void notifyRemoteControlInformationChanged(in ComponentName eventReceiver, int infoFlag);
diff --git a/media/java/android/media/IRemoteControlClient.aidl b/media/java/android/media/IRemoteControlClient.aidl
deleted file mode 100644
index a49371c08668..000000000000
--- a/media/java/android/media/IRemoteControlClient.aidl
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.graphics.Bitmap;
-
-/**
- * {@hide}
- */
-interface IRemoteControlClient
-{
- /**
- * Called by a remote control to retrieve a String of information to display.
- * @param field the identifier for a metadata field to retrieve. Valid values are
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUM},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUMARTIST},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ARTIST},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_AUTHOR},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_CD_TRACK_NUMBER},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPILATION},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPOSER},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DATE},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DISC_NUMBER},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DURATION},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_GENRE},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_WRITER},
- * {@link android.media.MediaMetadataRetriever#METADATA_KEY_YEAR}.
- * @return null if the given field is not supported, or the String matching the metadata field.
- */
- String getMetadataString(int field);
-
- /**
- * Returns the current playback state.
- * @return one of the following values:
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_STOPPED},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_PAUSED},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_PLAYING},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_FAST_FORWARDING},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_REWINDING},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_SKIPPING_FORWARDS},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_SKIPPING_BACKWARDS},
- * {@link android.media.AudioManager.RemoteControl#PLAYSTATE_BUFFERING}.
- */
- int getPlaybackState();
-
- /**
- * Returns the flags for the media transport control buttons this client supports.
- * @see {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_PREVIOUS},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_REWIND},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_PLAY},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_PLAY_PAUSE},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_PAUSE},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_STOP},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_FAST_FORWARD},
- * {@link android.media.AudioManager.RemoteControl#FLAG_KEY_MEDIA_NEXT}
- */
- int getTransportControlFlags();
-
- Bitmap getAlbumArt(int width, int height);
-}
diff --git a/media/java/android/media/IRemoteControlClientDispatcher.aidl b/media/java/android/media/IRemoteControlClientDispatcher.aidl
new file mode 100644
index 000000000000..98142cc5dd9b
--- /dev/null
+++ b/media/java/android/media/IRemoteControlClientDispatcher.aidl
@@ -0,0 +1,92 @@
+/*
+ * 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.media;
+
+import android.graphics.Bitmap;
+
+/**
+ * @hide
+ * Interface registered by AudioManager to dispatch remote control information requests
+ * to the RemoteControlClient implementation. This is used by AudioService.
+ * {@see AudioManager#registerRemoteControlClient(ComponentName, RemoteControlClient)}.
+ */
+interface IRemoteControlClientDispatcher
+{
+ /**
+ * Called by a remote control to retrieve a String of information to display.
+ * @param field the identifier for a metadata field to retrieve. Valid values are
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUM},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUMARTIST},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ARTIST},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_AUTHOR},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_CD_TRACK_NUMBER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPILATION},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPOSER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DATE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DISC_NUMBER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DURATION},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_GENRE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_WRITER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_YEAR}.
+ * @return null if the requested field is not supported, or the String matching the
+ * metadata field.
+ */
+ String getMetadataStringForClient(String clientName, int field);
+
+ /**
+ * Called by a remote control to retrieve the current playback state.
+ * @return one of the following values:
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_STOPPED},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_PAUSED},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_PLAYING},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_FAST_FORWARDING},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_REWINDING},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_SKIPPING_FORWARDS},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_SKIPPING_BACKWARDS},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_BUFFERING},
+ * {@link android.media.AudioManager.RemoteControlParameters#PLAYSTATE_ERROR}.
+ */
+ int getPlaybackStateForClient(String clientName);
+
+ /**
+ * Called by a remote control to retrieve the flags for the media transport control buttons
+ * that this client supports.
+ * @see {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_PREVIOUS},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_REWIND},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_PLAY},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_PLAY_PAUSE},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_PAUSE},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_STOP},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_FAST_FORWARD},
+ * {@link android.media.AudioManager.RemoteControlParameters#FLAG_KEY_MEDIA_NEXT}
+ */
+ int getTransportControlFlagsForClient(String clientName);
+
+ /**
+ * Called by a remote control to retrieve the album art picture at the requested size.
+ * Note that returning a bitmap smaller than the maximum requested dimension is accepted
+ * and it will be scaled as needed, but exceeding the maximum dimensions may produce
+ * unspecified results, such as the image being cropped or simply not being displayed.
+ * @param maxWidth the maximum width of the requested bitmap expressed in pixels.
+ * @param maxHeight the maximum height of the requested bitmap expressed in pixels.
+ * @return the bitmap for the album art, or null if there isn't any.
+ * @see android.graphics.Bitmap
+ */
+ Bitmap getAlbumArtForClient(String clientName, int maxWidth, int maxHeight);
+}
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
new file mode 100644
index 000000000000..c384636ae780
--- /dev/null
+++ b/media/java/android/media/RemoteControlClient.java
@@ -0,0 +1,243 @@
+/*
+ * 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.media;
+
+import android.content.ComponentName;
+import android.graphics.Bitmap;
+
+/**
+ * @hide
+ * Interface for an object that exposes information meant to be consumed by remote controls
+ * capable of displaying metadata, album art and media transport control buttons.
+ * Such a remote control client object is associated with a media button event receiver
+ * when registered through
+ * {@link AudioManager#registerRemoteControlClient(ComponentName, RemoteControlClient)}.
+ */
+public interface RemoteControlClient
+{
+ /**
+ * Playback state of a RemoteControlClient which is stopped.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_STOPPED = 1;
+ /**
+ * Playback state of a RemoteControlClient which is paused.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_PAUSED = 2;
+ /**
+ * Playback state of a RemoteControlClient which is playing media.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_PLAYING = 3;
+ /**
+ * Playback state of a RemoteControlClient which is fast forwarding in the media
+ * it is currently playing.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_FAST_FORWARDING = 4;
+ /**
+ * Playback state of a RemoteControlClient which is fast rewinding in the media
+ * it is currently playing.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_REWINDING = 5;
+ /**
+ * Playback state of a RemoteControlClient which is skipping to the next
+ * logical chapter (such as a song in a playlist) in the media it is currently playing.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_SKIPPING_FORWARDS = 6;
+ /**
+ * Playback state of a RemoteControlClient which is skipping back to the previous
+ * logical chapter (such as a song in a playlist) in the media it is currently playing.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_SKIPPING_BACKWARDS = 7;
+ /**
+ * Playback state of a RemoteControlClient which is buffering data to play before it can
+ * start or resume playback.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_BUFFERING = 8;
+ /**
+ * Playback state of a RemoteControlClient which cannot perform any playback related
+ * operation because of an internal error. Examples of such situations are no network
+ * connectivity when attempting to stream data from a server, or expired user credentials
+ * when trying to play subscription-based content.
+ *
+ * @see android.media.RemoteControlClient#getPlaybackState()
+ */
+ public final static int PLAYSTATE_ERROR = 9;
+
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "previous" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_PREVIOUS
+ */
+ public final static int FLAG_KEY_MEDIA_PREVIOUS = 1 << 0;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "rewing" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_REWIND
+ */
+ public final static int FLAG_KEY_MEDIA_REWIND = 1 << 1;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "play" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_PLAY
+ */
+ public final static int FLAG_KEY_MEDIA_PLAY = 1 << 2;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "play/pause" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE
+ */
+ public final static int FLAG_KEY_MEDIA_PLAY_PAUSE = 1 << 3;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "pause" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_PAUSE
+ */
+ public final static int FLAG_KEY_MEDIA_PAUSE = 1 << 4;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "stop" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_STOP
+ */
+ public final static int FLAG_KEY_MEDIA_STOP = 1 << 5;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "fast forward" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_FAST_FORWARD
+ */
+ public final static int FLAG_KEY_MEDIA_FAST_FORWARD = 1 << 6;
+ /**
+ * Flag indicating a RemoteControlClient makes use of the "next" media key.
+ *
+ * @see android.media.RemoteControlClient#getTransportControlFlags()
+ * @see android.view.KeyEvent#KEYCODE_MEDIA_NEXT
+ */
+ public final static int FLAG_KEY_MEDIA_NEXT = 1 << 7;
+
+ /**
+ * Flag used to signal that the metadata exposed by the RemoteControlClient has changed.
+ *
+ * @see #notifyRemoteControlInformationChanged(ComponentName, int)
+ */
+ public final static int FLAG_INFORMATION_CHANGED_METADATA = 1 << 0;
+ /**
+ * Flag used to signal that the transport control buttons supported by the
+ * RemoteControlClient have changed.
+ * This can for instance happen when playback is at the end of a playlist, and the "next"
+ * operation is not supported anymore.
+ *
+ * @see #notifyRemoteControlInformationChanged(ComponentName, int)
+ */
+ public final static int FLAG_INFORMATION_CHANGED_KEY_MEDIA = 1 << 1;
+ /**
+ * Flag used to signal that the playback state of the RemoteControlClient has changed.
+ *
+ * @see #notifyRemoteControlInformationChanged(ComponentName, int)
+ */
+ public final static int FLAG_INFORMATION_CHANGED_PLAYSTATE = 1 << 2;
+ /**
+ * Flag used to signal that the album art for the RemoteControlClient has changed.
+ *
+ * @see #notifyRemoteControlInformationChanged(ComponentName, int)
+ */
+ public final static int FLAG_INFORMATION_CHANGED_ALBUM_ART = 1 << 3;
+
+ /**
+ * Called by a remote control to retrieve a String of information to display.
+ * @param field the identifier for a metadata field to retrieve. Valid values are
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUM},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUMARTIST},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ARTIST},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_AUTHOR},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_CD_TRACK_NUMBER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPILATION},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPOSER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DATE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DISC_NUMBER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DURATION},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_GENRE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_WRITER},
+ * {@link android.media.MediaMetadataRetriever#METADATA_KEY_YEAR}.
+ * @return null if the requested field is not supported, or the String matching the
+ * metadata field.
+ */
+ String getMetadataString(int field);
+
+ /**
+ * Called by a remote control to retrieve the current playback state.
+ * @return one of the following values:
+ * {@link #PLAYSTATE_STOPPED},
+ * {@link #PLAYSTATE_PAUSED},
+ * {@link #PLAYSTATE_PLAYING},
+ * {@link #PLAYSTATE_FAST_FORWARDING},
+ * {@link #PLAYSTATE_REWINDING},
+ * {@link #PLAYSTATE_SKIPPING_FORWARDS},
+ * {@link #PLAYSTATE_SKIPPING_BACKWARDS},
+ * {@link #PLAYSTATE_BUFFERING},
+ * {@link #PLAYSTATE_ERROR}.
+ */
+ int getPlaybackState();
+
+ /**
+ * Called by a remote control to retrieve the flags for the media transport control buttons
+ * that this client supports.
+ * @see {@link #FLAG_KEY_MEDIA_PREVIOUS},
+ * {@link #FLAG_KEY_MEDIA_REWIND},
+ * {@link #FLAG_KEY_MEDIA_PLAY},
+ * {@link #FLAG_KEY_MEDIA_PLAY_PAUSE},
+ * {@link #FLAG_KEY_MEDIA_PAUSE},
+ * {@link #FLAG_KEY_MEDIA_STOP},
+ * {@link #FLAG_KEY_MEDIA_FAST_FORWARD},
+ * {@link #FLAG_KEY_MEDIA_NEXT}
+ */
+ int getTransportControlFlags();
+
+ /**
+ * Called by a remote control to retrieve the album art picture at the requested size.
+ * Note that returning a bitmap smaller than the maximum requested dimension is accepted
+ * and it will be scaled as needed, but exceeding the maximum dimensions may produce
+ * unspecified results, such as the image being cropped or simply not being displayed.
+ * @param maxWidth the maximum width of the requested bitmap expressed in pixels.
+ * @param maxHeight the maximum height of the requested bitmap expressed in pixels.
+ * @return the bitmap for the album art, or null if there isn't any.
+ * @see android.graphics.Bitmap
+ */
+ Bitmap getAlbumArt(int maxWidth, int maxHeight);
+}
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 3ac010493053..673f9f4db805 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -40,13 +40,11 @@ import java.util.UUID;
* <li> {@link android.media.audiofx.PresetReverb}</li>
* <li> {@link android.media.audiofx.EnvironmentalReverb}</li>
* </ul>
- * <p>If the audio effect is to be applied to a specific AudioTrack or MediaPlayer instance,
+ * <p>To apply the audio effect to a specific AudioTrack or MediaPlayer instance,
* the application must specify the audio session ID of that instance when creating the AudioEffect.
* (see {@link android.media.MediaPlayer#getAudioSessionId()} for details on audio sessions).
- * To apply an effect to the global audio output mix, session 0 must be specified when creating the
- * AudioEffect.
- * <p>Creating an effect on the output mix (audio session 0) requires permission
- * {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}
+ * <p>NOTE: attaching insert effects (equalizer, bass boost, virtualizer) to the global audio output
+ * mix by use of session 0 is deprecated.
* <p>Creating an AudioEffect object will create the corresponding effect engine in the audio
* framework if no instance of the same effect type exists in the specified audio session.
* If one exists, this instance will be used.
@@ -356,10 +354,9 @@ public class AudioEffect {
* how much the requesting application needs control of effect
* parameters. The normal priority is 0, above normal is a
* positive number, below normal a negative number.
- * @param audioSession system wide unique audio session identifier. If audioSession
- * is not 0, the effect will be attached to the MediaPlayer or
- * AudioTrack in the same audio session. Otherwise, the effect
- * will apply to the output mix.
+ * @param audioSession system wide unique audio session identifier.
+ * The effect will be attached to the MediaPlayer or AudioTrack in
+ * the same audio session.
*
* @throws java.lang.IllegalArgumentException
* @throws java.lang.UnsupportedOperationException
diff --git a/media/java/android/media/audiofx/BassBoost.java b/media/java/android/media/audiofx/BassBoost.java
index ca55f0f822bd..91459edf3e91 100644
--- a/media/java/android/media/audiofx/BassBoost.java
+++ b/media/java/android/media/audiofx/BassBoost.java
@@ -39,9 +39,7 @@ import java.util.StringTokenizer;
* for the SLBassBoostItf interface. Please refer to this specification for more details.
* <p>To attach the BassBoost to a particular AudioTrack or MediaPlayer, specify the audio session
* ID of this AudioTrack or MediaPlayer when constructing the BassBoost.
- * If the audio session ID 0 is specified, the BassBoost applies to the main audio output mix.
- * <p>Creating a BassBoost on the output mix (audio session 0) requires permission
- * {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}
+ * <p>NOTE: attaching a BassBoost to the global audio output mix by use of session 0 is deprecated.
* <p>See {@link android.media.MediaPlayer#getAudioSessionId()} for details on audio sessions.
* <p>See {@link android.media.audiofx.AudioEffect} class for more details on
* controlling audio effects.
@@ -89,9 +87,8 @@ public class BassBoost extends AudioEffect {
* engine. As the same engine can be shared by several applications, this parameter indicates
* how much the requesting application needs control of effect parameters. The normal priority
* is 0, above normal is a positive number, below normal a negative number.
- * @param audioSession system wide unique audio session identifier. If audioSession
- * is not 0, the BassBoost will be attached to the MediaPlayer or AudioTrack in the
- * same audio session. Otherwise, the BassBoost will apply to the output mix.
+ * @param audioSession system wide unique audio session identifier. The BassBoost will be
+ * attached to the MediaPlayer or AudioTrack in the same audio session.
*
* @throws java.lang.IllegalStateException
* @throws java.lang.IllegalArgumentException
@@ -103,6 +100,10 @@ public class BassBoost extends AudioEffect {
UnsupportedOperationException, RuntimeException {
super(EFFECT_TYPE_BASS_BOOST, EFFECT_TYPE_NULL, priority, audioSession);
+ if (audioSession == 0) {
+ Log.w(TAG, "WARNING: attaching a BassBoost to global output mix is deprecated!");
+ }
+
int[] value = new int[1];
checkStatus(getParameter(PARAM_STRENGTH_SUPPORTED, value));
mStrengthSupported = (value[0] != 0);
diff --git a/media/java/android/media/audiofx/Equalizer.java b/media/java/android/media/audiofx/Equalizer.java
index b3bafa914978..7f3895588d5d 100644
--- a/media/java/android/media/audiofx/Equalizer.java
+++ b/media/java/android/media/audiofx/Equalizer.java
@@ -39,10 +39,8 @@ import java.util.StringTokenizer;
* mapping those defined by the OpenSL ES 1.0.1 Specification (http://www.khronos.org/opensles/)
* for the SLEqualizerItf interface. Please refer to this specification for more details.
* <p>To attach the Equalizer to a particular AudioTrack or MediaPlayer, specify the audio session
- * ID of this AudioTrack or MediaPlayer when constructing the Equalizer. If the audio session ID 0
- * is specified, the Equalizer applies to the main audio output mix.
- * <p>Creating an Equalizer on the output mix (audio session 0) requires permission
- * {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}
+ * ID of this AudioTrack or MediaPlayer when constructing the Equalizer.
+ * <p>NOTE: attaching an Equalizer to the global audio output mix by use of session 0 is deprecated.
* <p>See {@link android.media.MediaPlayer#getAudioSessionId()} for details on audio sessions.
* <p>See {@link android.media.audiofx.AudioEffect} class for more details on controlling audio
* effects.
@@ -134,9 +132,8 @@ public class Equalizer extends AudioEffect {
* engine. As the same engine can be shared by several applications, this parameter indicates
* how much the requesting application needs control of effect parameters. The normal priority
* is 0, above normal is a positive number, below normal a negative number.
- * @param audioSession system wide unique audio session identifier. If audioSession
- * is not 0, the Equalizer will be attached to the MediaPlayer or AudioTrack in the
- * same audio session. Otherwise, the Equalizer will apply to the output mix.
+ * @param audioSession system wide unique audio session identifier. The Equalizer will be
+ * attached to the MediaPlayer or AudioTrack in the same audio session.
*
* @throws java.lang.IllegalStateException
* @throws java.lang.IllegalArgumentException
@@ -148,6 +145,10 @@ public class Equalizer extends AudioEffect {
UnsupportedOperationException, RuntimeException {
super(EFFECT_TYPE_EQUALIZER, EFFECT_TYPE_NULL, priority, audioSession);
+ if (audioSession == 0) {
+ Log.w(TAG, "WARNING: attaching an Equalizer to global output mix is deprecated!");
+ }
+
getNumberOfBands();
mNumPresets = (int)getNumberOfPresets();
diff --git a/media/java/android/media/audiofx/Virtualizer.java b/media/java/android/media/audiofx/Virtualizer.java
index a682a45df5d0..68a7b88010f0 100644
--- a/media/java/android/media/audiofx/Virtualizer.java
+++ b/media/java/android/media/audiofx/Virtualizer.java
@@ -40,10 +40,9 @@ import java.util.StringTokenizer;
* mapping those defined by the OpenSL ES 1.0.1 Specification (http://www.khronos.org/opensles/)
* for the SLVirtualizerItf interface. Please refer to this specification for more details.
* <p>To attach the Virtualizer to a particular AudioTrack or MediaPlayer, specify the audio session
- * ID of this AudioTrack or MediaPlayer when constructing the Virtualizer. If the audio session ID 0
- * is specified, the Virtualizer applies to the main audio output mix.
- * <p>Creating a Virtualizer on the output mix (audio session 0) requires permission
- * {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}
+ * ID of this AudioTrack or MediaPlayer when constructing the Virtualizer.
+ * <p>NOTE: attaching a Virtualizer to the global audio output mix by use of session 0 is
+ * deprecated.
* <p>See {@link android.media.MediaPlayer#getAudioSessionId()} for details on audio sessions.
* <p>See {@link android.media.audiofx.AudioEffect} class for more details on controlling
* audio effects.
@@ -90,9 +89,8 @@ public class Virtualizer extends AudioEffect {
* engine. As the same engine can be shared by several applications, this parameter indicates
* how much the requesting application needs control of effect parameters. The normal priority
* is 0, above normal is a positive number, below normal a negative number.
- * @param audioSession system wide unique audio session identifier. If audioSession
- * is not 0, the Virtualizer will be attached to the MediaPlayer or AudioTrack in the
- * same audio session. Otherwise, the Virtualizer will apply to the output mix.
+ * @param audioSession system wide unique audio session identifier. The Virtualizer will
+ * be attached to the MediaPlayer or AudioTrack in the same audio session.
*
* @throws java.lang.IllegalStateException
* @throws java.lang.IllegalArgumentException
@@ -104,6 +102,10 @@ public class Virtualizer extends AudioEffect {
UnsupportedOperationException, RuntimeException {
super(EFFECT_TYPE_VIRTUALIZER, EFFECT_TYPE_NULL, priority, audioSession);
+ if (audioSession == 0) {
+ Log.w(TAG, "WARNING: attaching a Virtualizer to global output mix is deprecated!");
+ }
+
int[] value = new int[1];
checkStatus(getParameter(PARAM_STRENGTH_SUPPORTED, value));
mStrengthSupported = (value[0] != 0);
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index 5bfdcdbac2be..b7d129d88adb 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -79,7 +79,8 @@ class MediaArtistNativeHelper {
private boolean mRegenerateAudio = true;
private String mExportFilename = null;
-
+ private int mExportVideoCodec = 0;
+ private int mExportAudioCodec = 0;
private int mProgressToApp;
private String mRenderPreviewOverlayFile;
@@ -765,17 +766,14 @@ class MediaArtistNativeHelper {
/** No video present in output clip. Used to generate audio only clip */
public static final int NO_VIDEO = 0;
- /** H263 baseline format. */
+ /** H263 video format. */
public static final int H263 = 1;
- /** MPEG4 video Simple Profile format. */
- public static final int MPEG4 = 2;
-
- /** MPEG4 video Simple Profile format with support for EMP. */
- public static final int MPEG4_EMP = 3;
-
/** H264 video */
- public static final int H264 = 4;
+ public static final int H264 = 2;
+
+ /** MPEG4 video format. */
+ public static final int MPEG4 = 3;
/** No transcoding. Output video format is same as input video format */
public static final int NULL_VIDEO = 254;
@@ -784,96 +782,6 @@ class MediaArtistNativeHelper {
public static final int UNSUPPORTED = 255;
}
- /** Defines video profiles and levels. */
- public final class VideoProfile {
- /** H263, Profile 0, Level 10. */
- public static final int H263_PROFILE_0_LEVEL_10 = MediaProperties.H263_PROFILE_0_LEVEL_10;
-
- /** H263, Profile 0, Level 20. */
- public static final int H263_PROFILE_0_LEVEL_20 = MediaProperties.H263_PROFILE_0_LEVEL_20;
-
- /** H263, Profile 0, Level 30. */
- public static final int H263_PROFILE_0_LEVEL_30 = MediaProperties.H263_PROFILE_0_LEVEL_30;
-
- /** H263, Profile 0, Level 40. */
- public static final int H263_PROFILE_0_LEVEL_40 = MediaProperties.H263_PROFILE_0_LEVEL_40;
-
- /** H263, Profile 0, Level 45. */
- public static final int H263_PROFILE_0_LEVEL_45 = MediaProperties.H263_PROFILE_0_LEVEL_45;
-
- /** MPEG4, Simple Profile, Level 0. */
- public static final int MPEG4_SP_LEVEL_0 = MediaProperties.MPEG4_SP_LEVEL_0;
-
- /** MPEG4, Simple Profile, Level 0B. */
- public static final int MPEG4_SP_LEVEL_0B = MediaProperties.MPEG4_SP_LEVEL_0B;
-
- /** MPEG4, Simple Profile, Level 1. */
- public static final int MPEG4_SP_LEVEL_1 = MediaProperties.MPEG4_SP_LEVEL_1;
-
- /** MPEG4, Simple Profile, Level 2. */
- public static final int MPEG4_SP_LEVEL_2 = MediaProperties.MPEG4_SP_LEVEL_2;
-
- /** MPEG4, Simple Profile, Level 3. */
- public static final int MPEG4_SP_LEVEL_3 = MediaProperties.MPEG4_SP_LEVEL_3;
-
- /** MPEG4, Simple Profile, Level 4A. */
- public static final int MPEG4_SP_LEVEL_4A = MediaProperties.MPEG4_SP_LEVEL_4A;
-
- /** MPEG4, Simple Profile, Level 0. */
- public static final int MPEG4_SP_LEVEL_5 = MediaProperties.MPEG4_SP_LEVEL_5;
-
- /** H264, Profile 0, Level 1. */
- public static final int H264_PROFILE_0_LEVEL_1 = MediaProperties.H264_PROFILE_0_LEVEL_1;
-
- /** H264, Profile 0, Level 1b. */
- public static final int H264_PROFILE_0_LEVEL_1b = MediaProperties.H264_PROFILE_0_LEVEL_1B;
-
- /** H264, Profile 0, Level 1.1 */
- public static final int H264_PROFILE_0_LEVEL_1_1 = MediaProperties.H264_PROFILE_0_LEVEL_1_1;
-
- /** H264, Profile 0, Level 1.2 */
- public static final int H264_PROFILE_0_LEVEL_1_2 = MediaProperties.H264_PROFILE_0_LEVEL_1_2;
-
- /** H264, Profile 0, Level 1.3 */
- public static final int H264_PROFILE_0_LEVEL_1_3 = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
-
- /** H264, Profile 0, Level 2. */
- public static final int H264_PROFILE_0_LEVEL_2 = MediaProperties.H264_PROFILE_0_LEVEL_2;
-
- /** H264, Profile 0, Level 2.1 */
- public static final int H264_PROFILE_0_LEVEL_2_1 = MediaProperties.H264_PROFILE_0_LEVEL_2_1;
-
- /** H264, Profile 0, Level 2.2 */
- public static final int H264_PROFILE_0_LEVEL_2_2 = MediaProperties.H264_PROFILE_0_LEVEL_2_2;
-
- /** H264, Profile 0, Level 3. */
- public static final int H264_PROFILE_0_LEVEL_3 = MediaProperties.H264_PROFILE_0_LEVEL_3;
-
- /** H264, Profile 0, Level 3.1 */
- public static final int H264_PROFILE_0_LEVEL_3_1 = MediaProperties.H264_PROFILE_0_LEVEL_3_1;
-
- /** H264, Profile 0, Level 3.2 */
- public static final int H264_PROFILE_0_LEVEL_3_2 = MediaProperties.H264_PROFILE_0_LEVEL_3_2;
-
- /** H264, Profile 0, Level 4. */
- public static final int H264_PROFILE_0_LEVEL_4 = MediaProperties.H264_PROFILE_0_LEVEL_4;
-
- /** H264, Profile 0, Level 4.1 */
- public static final int H264_PROFILE_0_LEVEL_4_1 = MediaProperties.H264_PROFILE_0_LEVEL_4_1;
-
- /** H264, Profile 0, Level 4.2 */
- public static final int H264_PROFILE_0_LEVEL_4_2 = MediaProperties.H264_PROFILE_0_LEVEL_4_2;
-
- /** H264, Profile 0, Level 5. */
- public static final int H264_PROFILE_0_LEVEL_5 = MediaProperties.H264_PROFILE_0_LEVEL_5;
-
- /** H264, Profile 0, Level 5.1 */
- public static final int H264_PROFILE_0_LEVEL_5_1 = MediaProperties.H264_PROFILE_0_LEVEL_5_1;
-
- /** Profile out of range. */
- public static final int OUT_OF_RANGE = MediaProperties.UNSUPPORTED_PROFILE_LEVEL;
- }
-
/** Defines video frame sizes. */
public final class VideoFrameSize {
@@ -1620,6 +1528,16 @@ class MediaArtistNativeHelper {
public int videoFormat;
/**
+ * Profile of the video stream in the output clip.
+ */
+ public int videoProfile;
+
+ /**
+ * Level of the video stream in the output clip.
+ */
+ public int videoLevel;
+
+ /**
* Format of the audio stream in the output clip. See
* {@link AudioFormat AudioFormat} for valid values.
*/
@@ -1723,10 +1641,28 @@ class MediaArtistNativeHelper {
public float averageFrameRate;
/**
- * Profile and level of the video in the media.
+ * Profile of the video in the media.
+ */
+
+ public int profile;
+
+ /**
+ * Level of the video in the media.
+ */
+
+ public int level;
+
+ /**
+ * Is Video Profile supported.
*/
- public int profileAndLevel;
+ public boolean profileSupported;
+
+ /**
+ * Is Video Level supported.
+ */
+
+ public boolean levelSupported;
/**
* Audio format.
@@ -2112,6 +2048,25 @@ class MediaArtistNativeHelper {
}
/**
+ * Sets the export audio codec
+ *
+ * @param export audio codec
+ *
+ */
+ void setAudioCodec(int codec) {
+ mExportAudioCodec = codec;
+ }
+ /**
+ * Sets the export video codec
+ *
+ * @param export video codec
+ *
+ */
+ void setVideoCodec(int codec) {
+ mExportVideoCodec = codec;
+ }
+
+ /**
* Sets the audio regenerate flag
*
* @param flag The boolean to set the audio regenerate flag
@@ -2320,7 +2275,8 @@ class MediaArtistNativeHelper {
int err = 0;
EditSettings editSettings = null;
String EffectClipPath = null;
-
+ int outVideoProfile = 0;
+ int outVideoLevel = 0;
editSettings = new EditSettings();
editSettings.clipSettingsArray = new ClipSettings[1];
@@ -2338,6 +2294,11 @@ class MediaArtistNativeHelper {
tmpFile.delete();
}
+ outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
+ outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
+ editSettings.videoProfile = outVideoProfile;
+ editSettings.videoLevel= outVideoLevel;
+
if (lMediaItem instanceof MediaVideoItem) {
MediaVideoItem m = (MediaVideoItem)lMediaItem;
@@ -2399,6 +2360,8 @@ class MediaArtistNativeHelper {
String generateKenBurnsClip(EditSettings e, MediaImageItem m) {
String output = null;
int err = 0;
+ int outVideoProfile = 0;
+ int outVideoLevel = 0;
e.backgroundMusicSettings = null;
e.transitionSettingsArray = null;
@@ -2410,6 +2373,11 @@ class MediaArtistNativeHelper {
tmpFile.delete();
}
+ outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
+ outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
+ e.videoProfile = outVideoProfile;
+ e.videoLevel = outVideoLevel;
+
e.outputFile = output;
e.audioBitrate = Bitrate.BR_64_KBPS;
e.audioChannels = 2;
@@ -2496,8 +2464,15 @@ class MediaArtistNativeHelper {
MediaItem m1, MediaItem m2,Transition t) {
String outputFilename = null;
int err = 0;
-
+ int outVideoProfile = 0;
+ int outVideoLevel = 0;
outputFilename = String.format(mProjectPath + "/" + uniqueId + ".3gp");
+
+ outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
+ outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
+ e.videoProfile = outVideoProfile;
+ e.videoLevel = outVideoLevel;
+
e.outputFile = outputFilename;
e.audioBitrate = Bitrate.BR_64_KBPS;
e.audioChannels = 2;
@@ -3275,7 +3250,7 @@ class MediaArtistNativeHelper {
retValue = MediaProperties.VCODEC_H263;
break;
case VideoFormat.H264:
- retValue = MediaProperties.VCODEC_H264BP;
+ retValue = MediaProperties.VCODEC_H264;
break;
case VideoFormat.MPEG4:
retValue = MediaProperties.VCODEC_MPEG4;
@@ -3602,6 +3577,24 @@ class MediaArtistNativeHelper {
mExportFilename = filePath;
previewStoryBoard(mediaItemsList, mediaTransitionList, mediaBGMList,null);
mExportProgressListener = listener;
+ int outVideoProfile = 0;
+ int outVideoLevel = 0;
+
+ /** Check the platform specific maximum export resolution */
+ VideoEditorProfile veProfile = VideoEditorProfile.get();
+ if (veProfile == null) {
+ throw new RuntimeException("Can't get the video editor profile");
+ }
+ final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
+ final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
+ if (height > maxOutputHeight) {
+ throw new IllegalArgumentException(
+ "Unsupported export resolution. Supported maximum width:" +
+ maxOutputWidth + " height:" + maxOutputHeight +
+ " current height:" + height);
+ }
+ outVideoProfile = VideoEditorProfile.getExportProfile(mExportVideoCodec);
+ outVideoLevel = VideoEditorProfile.getExportLevel(mExportVideoCodec);
mProgressToApp = 0;
@@ -3655,8 +3648,10 @@ class MediaArtistNativeHelper {
int aspectRatio = mVideoEditor.getAspectRatio();
mPreviewEditSettings.videoFrameSize = findVideoResolution(aspectRatio, height);
- mPreviewEditSettings.videoFormat = VideoFormat.H264;
- mPreviewEditSettings.audioFormat = AudioFormat.AAC;
+ mPreviewEditSettings.videoFormat = mExportVideoCodec;
+ mPreviewEditSettings.audioFormat = mExportAudioCodec;
+ mPreviewEditSettings.videoProfile = outVideoProfile;
+ mPreviewEditSettings.videoLevel = outVideoLevel;
mPreviewEditSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
mPreviewEditSettings.maxFileSize = 0;
mPreviewEditSettings.audioChannels = 2;
@@ -3781,72 +3776,62 @@ class MediaArtistNativeHelper {
* @param startMs The starting time in ms
* @param endMs The end time in ms
* @param thumbnailCount The number of frames to be extracted
+ * @param indices The indices of thumbnails wanted
+ * @param callback The callback used to pass back the bitmaps
* from startMs to endMs
*
* @return The frames as bitmaps in bitmap array
**/
- Bitmap[] getPixelsList(String filename, int width, int height, long startMs, long endMs,
- int thumbnailCount) {
- int[] rgb888 = null;
- int thumbnailSize = 0;
- Bitmap tempBitmap = null;
-
+ void getPixelsList(String filename, final int width, final int height,
+ long startMs, long endMs, int thumbnailCount, int[] indices,
+ final MediaItem.GetThumbnailListCallback callback) {
/* Make width and height as even */
final int newWidth = (width + 1) & 0xFFFFFFFE;
final int newHeight = (height + 1) & 0xFFFFFFFE;
- thumbnailSize = newWidth * newHeight * 4;
+ final int thumbnailSize = newWidth * newHeight;
/* Create a temp bitmap for resized thumbnails */
- if ((newWidth != width) || (newHeight != height)) {
- tempBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888);
- }
- int i = 0;
- int deltaTime = (int)(endMs - startMs) / thumbnailCount;
- Bitmap[] bitmaps = null;
-
- try {
- // This may result in out of Memory Error
- rgb888 = new int[thumbnailSize * thumbnailCount];
- bitmaps = new Bitmap[thumbnailCount];
- } catch (Throwable e) {
- // Allocating to new size with Fixed count
- try {
- rgb888 = new int[thumbnailSize * MAX_THUMBNAIL_PERMITTED];
- bitmaps = new Bitmap[MAX_THUMBNAIL_PERMITTED];
- thumbnailCount = MAX_THUMBNAIL_PERMITTED;
- } catch (Throwable ex) {
- throw new RuntimeException("Memory allocation fails, thumbnail count too large: "
- + thumbnailCount);
- }
- }
- IntBuffer tmpBuffer = IntBuffer.allocate(thumbnailSize);
- nativeGetPixelsList(filename, rgb888, newWidth, newHeight, deltaTime, thumbnailCount,
- startMs, endMs);
+ final Bitmap tempBitmap =
+ (newWidth != width || newHeight != height)
+ ? Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888)
+ : null;
+
+ final int[] rgb888 = new int[thumbnailSize];
+ final IntBuffer tmpBuffer = IntBuffer.allocate(thumbnailSize);
+ nativeGetPixelsList(filename, rgb888, newWidth, newHeight,
+ thumbnailCount, startMs, endMs, indices,
+ new NativeGetPixelsListCallback() {
+ public void onThumbnail(int index) {
+ Bitmap bitmap = Bitmap.createBitmap(
+ width, height, Bitmap.Config.ARGB_8888);
+ tmpBuffer.put(rgb888, 0, thumbnailSize);
+ tmpBuffer.rewind();
+
+ if ((newWidth == width) && (newHeight == height)) {
+ bitmap.copyPixelsFromBuffer(tmpBuffer);
+ } else {
+ /* Copy the out rgb buffer to temp bitmap */
+ tempBitmap.copyPixelsFromBuffer(tmpBuffer);
- for (; i < thumbnailCount; i++) {
- bitmaps[i] = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- tmpBuffer.put(rgb888, (i * thumbnailSize), thumbnailSize);
- tmpBuffer.rewind();
+ /* Create a canvas to resize */
+ final Canvas canvas = new Canvas(bitmap);
+ canvas.drawBitmap(tempBitmap,
+ new Rect(0, 0, newWidth, newHeight),
+ new Rect(0, 0, width, height), sResizePaint);
- if ((newWidth == width) && (newHeight == height)) {
- bitmaps[i].copyPixelsFromBuffer(tmpBuffer);
- } else {
- /* Copy the out rgb buffer to temp bitmap */
- tempBitmap.copyPixelsFromBuffer(tmpBuffer);
-
- /* Create a canvas to resize */
- final Canvas canvas = new Canvas(bitmaps[i]);
- canvas.drawBitmap(tempBitmap, new Rect(0, 0, newWidth, newHeight),
- new Rect(0, 0, width, height), sResizePaint);
- canvas.setBitmap(null);
+ canvas.setBitmap(null);
+ }
+ callback.onThumbnail(bitmap, index);
}
- }
+ });
if (tempBitmap != null) {
tempBitmap.recycle();
}
+ }
- return bitmaps;
+ interface NativeGetPixelsListCallback {
+ public void onThumbnail(int index);
}
/**
@@ -3957,8 +3942,9 @@ class MediaArtistNativeHelper {
private native int nativeGetPixels(String fileName, int[] pixelArray, int width, int height,
long timeMS);
- private native int nativeGetPixelsList(String fileName, int[] pixelArray, int width, int height,
- int timeMS, int nosofTN, long startTimeMs, long endTimeMs);
+ private native int nativeGetPixelsList(String fileName, int[] pixelArray,
+ int width, int height, int nosofTN, long startTimeMs, long endTimeMs,
+ int[] indices, NativeGetPixelsListCallback callback);
/**
* Releases the JNI and cleans up the core native module.. Should be called
diff --git a/media/java/android/media/videoeditor/MediaImageItem.java b/media/java/android/media/videoeditor/MediaImageItem.java
index f0cc1fe945d4..4ca6fad2a69b 100755
--- a/media/java/android/media/videoeditor/MediaImageItem.java
+++ b/media/java/android/media/videoeditor/MediaImageItem.java
@@ -616,17 +616,18 @@ public class MediaImageItem extends MediaItem {
* {@inheritDoc}
*/
@Override
- public Bitmap[] getThumbnailList(int width, int height, long startMs, long endMs,
- int thumbnailCount) throws IOException {
+ public void getThumbnailList(int width, int height,
+ long startMs, long endMs,
+ int thumbnailCount,
+ int[] indices,
+ GetThumbnailListCallback callback)
+ throws IOException {
//KenBurns was not applied on this.
if (getGeneratedImageClip() == null) {
final Bitmap thumbnail = scaleImage(mFilename, width, height);
- final Bitmap[] thumbnailArray = new Bitmap[thumbnailCount];
- for (int i = 0; i < thumbnailCount; i++) {
- thumbnailArray[i] = thumbnail;
+ for (int i = 0; i < indices.length; i++) {
+ callback.onThumbnail(thumbnail, i);
}
-
- return thumbnailArray;
} else {
if (startMs > endMs) {
throw new IllegalArgumentException("Start time is greater than end time");
@@ -636,15 +637,8 @@ public class MediaImageItem extends MediaItem {
throw new IllegalArgumentException("End time is greater than file duration");
}
- if (startMs == endMs) {
- Bitmap[] bitmap = new Bitmap[1];
- bitmap[0] = mMANativeHelper.getPixels(getGeneratedImageClip(),
- width, height,startMs);
- return bitmap;
- }
-
- return mMANativeHelper.getPixelsList(getGeneratedImageClip(), width,
- height,startMs,endMs,thumbnailCount);
+ mMANativeHelper.getPixelsList(getGeneratedImageClip(), width,
+ height, startMs, endMs, thumbnailCount, indices, callback);
}
}
diff --git a/media/java/android/media/videoeditor/MediaItem.java b/media/java/android/media/videoeditor/MediaItem.java
index 8c4841fc216d..4e9ea75a23a6 100755
--- a/media/java/android/media/videoeditor/MediaItem.java
+++ b/media/java/android/media/videoeditor/MediaItem.java
@@ -564,15 +564,41 @@ public abstract class MediaItem {
* @param startMs The start of time range in milliseconds
* @param endMs The end of the time range in milliseconds
* @param thumbnailCount The thumbnail count
- *
- * @return The array of Bitmaps
+ * @param indices The indices of the thumbnails wanted
+ * @param callback The callback used to pass back the bitmaps
*
* @throws IOException if a file error occurs
*/
- public abstract Bitmap[] getThumbnailList(int width, int height,
- long startMs, long endMs,
- int thumbnailCount)
- throws IOException;
+ public abstract void getThumbnailList(int width, int height,
+ long startMs, long endMs,
+ int thumbnailCount,
+ int[] indices,
+ GetThumbnailListCallback callback)
+ throws IOException;
+
+ public interface GetThumbnailListCallback {
+ public void onThumbnail(Bitmap bitmap, int index);
+ }
+
+ // This is for compatibility, only used in tests.
+ public Bitmap[] getThumbnailList(int width, int height,
+ long startMs, long endMs,
+ int thumbnailCount)
+ throws IOException {
+ final Bitmap[] bitmaps = new Bitmap[thumbnailCount];
+ int[] indices = new int[thumbnailCount];
+ for (int i = 0; i < thumbnailCount; i++) {
+ indices[i] = i;
+ }
+ getThumbnailList(width, height, startMs, endMs,
+ thumbnailCount, indices, new GetThumbnailListCallback() {
+ public void onThumbnail(Bitmap bitmap, int index) {
+ bitmaps[index] = bitmap;
+ }
+ });
+
+ return bitmaps;
+ }
/*
* {@inheritDoc}
diff --git a/media/java/android/media/videoeditor/MediaProperties.java b/media/java/android/media/videoeditor/MediaProperties.java
index ff13e5dbe4af..fd034abb03ae 100755
--- a/media/java/android/media/videoeditor/MediaProperties.java
+++ b/media/java/android/media/videoeditor/MediaProperties.java
@@ -135,89 +135,118 @@ public class MediaProperties {
* Video codec types
*/
public static final int VCODEC_H263 = 1;
- public static final int VCODEC_MPEG4 = 2;
- // 3 Value is used for MPEG4_EMP
- public static final int VCODEC_H264BP = 4;
- public static final int VCODEC_H264MP = 5; // Unsupported
+ public static final int VCODEC_H264 = 2;
+ public static final int VCODEC_MPEG4 = 3;
/**
* The array of supported video codecs
*/
private static final int[] SUPPORTED_VCODECS = new int[] {
- VCODEC_H264BP,
+ VCODEC_H264,
VCODEC_H263,
VCODEC_MPEG4,
};
- /* H.263 Profiles and levels */
- public static final int H263_PROFILE_0_LEVEL_10 = 0;
- public static final int H263_PROFILE_0_LEVEL_20 = 1;
- public static final int H263_PROFILE_0_LEVEL_30 = 2;
- public static final int H263_PROFILE_0_LEVEL_40 = 3;
- public static final int H263_PROFILE_0_LEVEL_45 = 4;
- /* MPEG-4 Profiles and levels */
- public static final int MPEG4_SP_LEVEL_0 = 50;
- public static final int MPEG4_SP_LEVEL_0B = 51;
- public static final int MPEG4_SP_LEVEL_1 = 52;
- public static final int MPEG4_SP_LEVEL_2 = 53;
- public static final int MPEG4_SP_LEVEL_3 = 54;
- public static final int MPEG4_SP_LEVEL_4A = 55;
- public static final int MPEG4_SP_LEVEL_5 = 56;
- /* AVC Profiles and levels */
- public static final int H264_PROFILE_0_LEVEL_1 = 150;
- public static final int H264_PROFILE_0_LEVEL_1B = 151;
- public static final int H264_PROFILE_0_LEVEL_1_1 = 152;
- public static final int H264_PROFILE_0_LEVEL_1_2 = 153;
- public static final int H264_PROFILE_0_LEVEL_1_3 = 154;
- public static final int H264_PROFILE_0_LEVEL_2 = 155;
- public static final int H264_PROFILE_0_LEVEL_2_1 = 156;
- public static final int H264_PROFILE_0_LEVEL_2_2 = 157;
- public static final int H264_PROFILE_0_LEVEL_3 = 158;
- public static final int H264_PROFILE_0_LEVEL_3_1 = 159;
- public static final int H264_PROFILE_0_LEVEL_3_2 = 160;
- public static final int H264_PROFILE_0_LEVEL_4 = 161;
- public static final int H264_PROFILE_0_LEVEL_4_1 = 162;
- public static final int H264_PROFILE_0_LEVEL_4_2 = 163;
- public static final int H264_PROFILE_0_LEVEL_5 = 164;
- public static final int H264_PROFILE_0_LEVEL_5_1 = 165;
- /* Unsupported profile and level */
- public static final int UNSUPPORTED_PROFILE_LEVEL = 255;
-
/**
- * The array of supported video codec Profile and Levels
+ * The H264 profile, the values are same as the one in OMX_Video.h
*/
- private static final int[] SUPPORTED_VCODEC_PROFILE_LEVELS = new int[] {
- H263_PROFILE_0_LEVEL_10,
- H263_PROFILE_0_LEVEL_20,
- H263_PROFILE_0_LEVEL_30,
- H263_PROFILE_0_LEVEL_40,
- H263_PROFILE_0_LEVEL_45,
- MPEG4_SP_LEVEL_0,
- MPEG4_SP_LEVEL_0B,
- MPEG4_SP_LEVEL_1,
- MPEG4_SP_LEVEL_2,
- MPEG4_SP_LEVEL_3,
- MPEG4_SP_LEVEL_4A,
- MPEG4_SP_LEVEL_5,
- H264_PROFILE_0_LEVEL_1,
- H264_PROFILE_0_LEVEL_1B,
- H264_PROFILE_0_LEVEL_1_1,
- H264_PROFILE_0_LEVEL_1_2,
- H264_PROFILE_0_LEVEL_1_3,
- H264_PROFILE_0_LEVEL_2,
- H264_PROFILE_0_LEVEL_2_1,
- H264_PROFILE_0_LEVEL_2_2,
- H264_PROFILE_0_LEVEL_3,
- H264_PROFILE_0_LEVEL_3_1,
- H264_PROFILE_0_LEVEL_3_2,
- H264_PROFILE_0_LEVEL_4,
- H264_PROFILE_0_LEVEL_4_1,
- H264_PROFILE_0_LEVEL_4_2,
- H264_PROFILE_0_LEVEL_5,
- H264_PROFILE_0_LEVEL_5_1,
- UNSUPPORTED_PROFILE_LEVEL
- };
-
+ public final class H264Profile {
+ public static final int H264ProfileBaseline = 0x01; /**< Baseline profile */
+ public static final int H264ProfileMain = 0x02; /**< Main profile */
+ public static final int H264ProfileExtended = 0x04; /**< Extended profile */
+ public static final int H264ProfileHigh = 0x08; /**< High profile */
+ public static final int H264ProfileHigh10 = 0x10; /**< High 10 profile */
+ public static final int H264ProfileHigh422 = 0x20; /**< High 4:2:2 profile */
+ public static final int H264ProfileHigh444 = 0x40; /**< High 4:4:4 profile */
+ public static final int H264ProfileUnknown = 0x7FFFFFFF;
+ }
+ /**
+ * The H264 level, the values are same as the one in OMX_Video.h
+ */
+ public final class H264Level {
+ public static final int H264Level1 = 0x01; /**< Level 1 */
+ public static final int H264Level1b = 0x02; /**< Level 1b */
+ public static final int H264Level11 = 0x04; /**< Level 1.1 */
+ public static final int H264Level12 = 0x08; /**< Level 1.2 */
+ public static final int H264Level13 = 0x10; /**< Level 1.3 */
+ public static final int H264Level2 = 0x20; /**< Level 2 */
+ public static final int H264Level21 = 0x40; /**< Level 2.1 */
+ public static final int H264Level22 = 0x80; /**< Level 2.2 */
+ public static final int H264Level3 = 0x100; /**< Level 3 */
+ public static final int H264Level31 = 0x200; /**< Level 3.1 */
+ public static final int H264Level32 = 0x400; /**< Level 3.2 */
+ public static final int H264Level4 = 0x800; /**< Level 4 */
+ public static final int H264Level41 = 0x1000; /**< Level 4.1 */
+ public static final int H264Level42 = 0x2000; /**< Level 4.2 */
+ public static final int H264Level5 = 0x4000; /**< Level 5 */
+ public static final int H264Level51 = 0x8000; /**< Level 5.1 */
+ public static final int H264LevelUnknown = 0x7FFFFFFF;
+ }
+ /**
+ * The H263 profile, the values are same as the one in OMX_Video.h
+ */
+ public final class H263Profile {
+ public static final int H263ProfileBaseline = 0x01;
+ public static final int H263ProfileH320Coding = 0x02;
+ public static final int H263ProfileBackwardCompatible = 0x04;
+ public static final int H263ProfileISWV2 = 0x08;
+ public static final int H263ProfileISWV3 = 0x10;
+ public static final int H263ProfileHighCompression = 0x20;
+ public static final int H263ProfileInternet = 0x40;
+ public static final int H263ProfileInterlace = 0x80;
+ public static final int H263ProfileHighLatency = 0x100;
+ public static final int H263ProfileUnknown = 0x7FFFFFFF;
+ }
+ /**
+ * The H263 level, the values are same as the one in OMX_Video.h
+ */
+ public final class H263Level {
+ public static final int H263Level10 = 0x01;
+ public static final int H263Level20 = 0x02;
+ public static final int H263Level30 = 0x04;
+ public static final int H263Level40 = 0x08;
+ public static final int H263Level45 = 0x10;
+ public static final int H263Level50 = 0x20;
+ public static final int H263Level60 = 0x40;
+ public static final int H263Level70 = 0x80;
+ public static final int H263LevelUnknown = 0x7FFFFFFF;
+ }
+ /**
+ * The mpeg4 profile, the values are same as the one in OMX_Video.h
+ */
+ public final class MPEG4Profile {
+ public static final int MPEG4ProfileSimple = 0x01;
+ public static final int MPEG4ProfileSimpleScalable = 0x02;
+ public static final int MPEG4ProfileCore = 0x04;
+ public static final int MPEG4ProfileMain = 0x08;
+ public static final int MPEG4ProfileNbit = 0x10;
+ public static final int MPEG4ProfileScalableTexture = 0x20;
+ public static final int MPEG4ProfileSimpleFace = 0x40;
+ public static final int MPEG4ProfileSimpleFBA = 0x80;
+ public static final int MPEG4ProfileBasicAnimated = 0x100;
+ public static final int MPEG4ProfileHybrid = 0x200;
+ public static final int MPEG4ProfileAdvancedRealTime = 0x400;
+ public static final int MPEG4ProfileCoreScalable = 0x800;
+ public static final int MPEG4ProfileAdvancedCoding = 0x1000;
+ public static final int MPEG4ProfileAdvancedCore = 0x2000;
+ public static final int MPEG4ProfileAdvancedScalable = 0x4000;
+ public static final int MPEG4ProfileAdvancedSimple = 0x8000;
+ public static final int MPEG4ProfileUnknown = 0x7FFFFFFF;
+ }
+ /**
+ * The mpeg4 level, the values are same as the one in OMX_Video.h
+ */
+ public final class MPEG4Level {
+ public static final int MPEG4Level0 = 0x01; /**< Level 0 */
+ public static final int MPEG4Level0b = 0x02; /**< Level 0b */
+ public static final int MPEG4Level1 = 0x04; /**< Level 1 */
+ public static final int MPEG4Level2 = 0x08; /**< Level 2 */
+ public static final int MPEG4Level3 = 0x10; /**< Level 3 */
+ public static final int MPEG4Level4 = 0x20; /**< Level 4 */
+ public static final int MPEG4Level4a = 0x40; /**< Level 4a */
+ public static final int MPEG4Level5 = 0x80; /**< Level 5 */
+ public static final int MPEG4LevelUnknown = 0x7FFFFFFF;
+ }
/**
* Audio codec types
*/
@@ -241,7 +270,6 @@ public class MediaProperties {
ACODEC_AMRWB
};
-
/**
* Samples per frame for each audio codec
*/
diff --git a/media/java/android/media/videoeditor/MediaVideoItem.java b/media/java/android/media/videoeditor/MediaVideoItem.java
index 62486515548f..fea751b57206 100755
--- a/media/java/android/media/videoeditor/MediaVideoItem.java
+++ b/media/java/android/media/videoeditor/MediaVideoItem.java
@@ -42,6 +42,7 @@ public class MediaVideoItem extends MediaItem {
private final int mFileType;
private final int mVideoType;
private final int mVideoProfile;
+ private final int mVideoLevel;
private final int mVideoBitrate;
private final long mDurationMs;
private final int mAudioBitrate;
@@ -134,6 +135,15 @@ public class MediaVideoItem extends MediaItem {
", current width:" + properties.width +
" height:" + properties.height);
}
+ /** Check the platform specific maximum video profile and level */
+ if (!properties.profileSupported) {
+ throw new IllegalArgumentException(
+ "Unsupported video profile " + properties.profile);
+ }
+ if (!properties.levelSupported) {
+ throw new IllegalArgumentException(
+ "Unsupported video level " + properties.level);
+ }
switch (mMANativeHelper.getFileType(properties.fileType)) {
case MediaProperties.FILE_3GP:
case MediaProperties.FILE_MP4:
@@ -146,8 +156,7 @@ public class MediaVideoItem extends MediaItem {
switch (mMANativeHelper.getVideoCodecType(properties.videoFormat)) {
case MediaProperties.VCODEC_H263:
- case MediaProperties.VCODEC_H264BP:
- case MediaProperties.VCODEC_H264MP:
+ case MediaProperties.VCODEC_H264:
case MediaProperties.VCODEC_MPEG4:
break;
@@ -155,18 +164,14 @@ public class MediaVideoItem extends MediaItem {
throw new IllegalArgumentException("Unsupported Video Codec Format in Input File");
}
- /* Check if the profile is unsupported. */
- if (properties.profileAndLevel == MediaProperties.UNDEFINED_VIDEO_PROFILE) {
- throw new IllegalArgumentException("Unsupported Video Codec Profile in Input File");
- }
-
mWidth = properties.width;
mHeight = properties.height;
mAspectRatio = mMANativeHelper.getAspectRatio(properties.width,
properties.height);
mFileType = mMANativeHelper.getFileType(properties.fileType);
mVideoType = mMANativeHelper.getVideoCodecType(properties.videoFormat);
- mVideoProfile = properties.profileAndLevel;
+ mVideoProfile = properties.profile;
+ mVideoLevel = properties.level;
mDurationMs = properties.videoDuration;
mVideoBitrate = properties.videoBitrate;
mAudioBitrate = properties.audioBitrate;
@@ -293,8 +298,12 @@ public class MediaVideoItem extends MediaItem {
* {@inheritDoc}
*/
@Override
- public Bitmap[] getThumbnailList(int width, int height, long startMs,
- long endMs, int thumbnailCount) throws IOException {
+ public void getThumbnailList(int width, int height,
+ long startMs, long endMs,
+ int thumbnailCount,
+ int[] indices,
+ GetThumbnailListCallback callback)
+ throws IOException {
if (startMs > endMs) {
throw new IllegalArgumentException("Start time is greater than end time");
}
@@ -307,14 +316,8 @@ public class MediaVideoItem extends MediaItem {
throw new IllegalArgumentException("Invalid dimension");
}
- if (startMs == endMs) {
- final Bitmap[] bitmap = new Bitmap[1];
- bitmap[0] = mMANativeHelper.getPixels(super.getFilename(), width, height,startMs);
- return bitmap;
- }
-
- return mMANativeHelper.getPixelsList(super.getFilename(), width,
- height,startMs,endMs,thumbnailCount);
+ mMANativeHelper.getPixelsList(super.getFilename(), width,
+ height, startMs, endMs, thumbnailCount, indices, callback);
}
/*
@@ -663,6 +666,13 @@ public class MediaVideoItem extends MediaItem {
}
/**
+ * @return The video profile
+ */
+ public int getVideoLevel() {
+ return mVideoLevel;
+ }
+
+ /**
* @return The video bitrate
*/
public int getVideoBitrate() {
diff --git a/media/java/android/media/videoeditor/VideoEditor.java b/media/java/android/media/videoeditor/VideoEditor.java
index 720e80227382..424e436f04e1 100755
--- a/media/java/android/media/videoeditor/VideoEditor.java
+++ b/media/java/android/media/videoeditor/VideoEditor.java
@@ -396,7 +396,7 @@ public interface VideoEditor {
* supported for export purposes.
* @param videoCodec The video codec to be used for the export. The video
* codec values are defined in the MediaProperties class (e.g.
- * VCODEC_H264BP). Note that not all video codec types are
+ * VCODEC_H264). Note that not all video codec types are
* supported for export purposes.
* @param listener The listener for progress notifications. Use null if
* export progress notifications are not needed.
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index ea7fe63e30d9..f18dd88721b6 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -339,42 +339,8 @@ public class VideoEditorImpl implements VideoEditor {
int audioCodec, int videoCodec,
ExportProgressListener listener)
throws IOException {
-
- switch (audioCodec) {
- case MediaProperties.ACODEC_AAC_LC:
- break;
- case MediaProperties.ACODEC_AMRNB:
- break;
-
- default: {
- String message = "Unsupported audio codec type " + audioCodec;
- throw new IllegalArgumentException(message);
- }
- }
-
- switch (videoCodec) {
- case MediaProperties.VCODEC_H263:
- break;
- case MediaProperties.VCODEC_H264BP:
- break;
- case MediaProperties.VCODEC_MPEG4:
- break;
-
- default: {
- String message = "Unsupported video codec type " + videoCodec;
- throw new IllegalArgumentException(message);
- }
- }
-
- export(filename, height, bitrate, listener);
- }
-
- /*
- * {@inheritDoc}
- */
- public void export(String filename, int height, int bitrate,
- ExportProgressListener listener)
- throws IOException {
+ int audcodec = 0;
+ int vidcodec = 0;
if (filename == null) {
throw new IllegalArgumentException("export: filename is null");
}
@@ -388,20 +354,6 @@ public class VideoEditorImpl implements VideoEditor {
throw new IllegalStateException("No MediaItems added");
}
- /** Check the platform specific maximum export resolution */
- VideoEditorProfile veProfile = VideoEditorProfile.get();
- if (veProfile == null) {
- throw new RuntimeException("Can't get the video editor profile");
- }
- final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
- final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
- if (height > maxOutputHeight) {
- throw new IllegalArgumentException(
- "Unsupported export resolution. Supported maximum width:" +
- maxOutputWidth + " height:" + maxOutputHeight +
- " current height:" + height);
- }
-
switch (height) {
case MediaProperties.HEIGHT_144:
break;
@@ -461,6 +413,36 @@ public class VideoEditorImpl implements VideoEditor {
if (MAX_SUPPORTED_FILE_SIZE <= fileSize) {
throw new IllegalStateException("Export Size is more than 2GB");
}
+ switch (audioCodec) {
+ case MediaProperties.ACODEC_AAC_LC:
+ audcodec = MediaArtistNativeHelper.AudioFormat.AAC;
+ break;
+ case MediaProperties.ACODEC_AMRNB:
+ audcodec = MediaArtistNativeHelper.AudioFormat.AMR_NB;
+ break;
+
+ default: {
+ String message = "Unsupported audio codec type " + audioCodec;
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ switch (videoCodec) {
+ case MediaProperties.VCODEC_H263:
+ vidcodec = MediaArtistNativeHelper.VideoFormat.H263;
+ break;
+ case MediaProperties.VCODEC_H264:
+ vidcodec = MediaArtistNativeHelper.VideoFormat.H264;
+ break;
+ case MediaProperties.VCODEC_MPEG4:
+ vidcodec = MediaArtistNativeHelper.VideoFormat.MPEG4;
+ break;
+
+ default: {
+ String message = "Unsupported video codec type " + videoCodec;
+ throw new IllegalArgumentException(message);
+ }
+ }
boolean semAcquireDone = false;
try {
@@ -470,7 +452,8 @@ public class VideoEditorImpl implements VideoEditor {
if (mMANativeHelper == null) {
throw new IllegalStateException("The video editor is not initialized");
}
-
+ mMANativeHelper.setAudioCodec(audcodec);
+ mMANativeHelper.setVideoCodec(vidcodec);
mMANativeHelper.export(filename, mProjectPath, height,bitrate,
mMediaItems, mTransitions, mAudioTracks, listener);
} catch (InterruptedException ex) {
@@ -485,6 +468,19 @@ public class VideoEditorImpl implements VideoEditor {
/*
* {@inheritDoc}
*/
+ public void export(String filename, int height, int bitrate,
+ ExportProgressListener listener)
+ throws IOException {
+ int defaultAudiocodec = MediaArtistNativeHelper.AudioFormat.AAC;
+ int defaultVideocodec = MediaArtistNativeHelper.VideoFormat.H264;
+
+ export(filename, height, bitrate, defaultAudiocodec,
+ defaultVideocodec, listener);
+ }
+
+ /*
+ * {@inheritDoc}
+ */
public void generatePreview(MediaProcessingProgressListener listener) {
boolean semAcquireDone = false;
try {
diff --git a/media/java/android/media/videoeditor/VideoEditorProfile.java b/media/java/android/media/videoeditor/VideoEditorProfile.java
index 7d9fc8fa6a44..ecdcdfbd0324 100755
--- a/media/java/android/media/videoeditor/VideoEditorProfile.java
+++ b/media/java/android/media/videoeditor/VideoEditorProfile.java
@@ -31,6 +31,10 @@ package android.media.videoeditor;
*/
public class VideoEditorProfile
{
+ static {
+ System.loadLibrary("media_jni");
+ native_init();
+ }
/**
* The max input video frame width
*/
@@ -58,9 +62,42 @@ public class VideoEditorProfile
return native_get_videoeditor_profile();
}
- static {
- System.loadLibrary("media_jni");
- native_init();
+ /**
+ * Returns the supported profile by given video codec
+ */
+ public static int getExportProfile(int vidCodec) {
+ int profile = -1;
+
+ switch (vidCodec) {
+ case MediaProperties.VCODEC_H263:
+ case MediaProperties.VCODEC_H264:
+ case MediaProperties.VCODEC_MPEG4:
+ profile = native_get_videoeditor_export_profile(vidCodec);
+ break;
+ default :
+ throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
+ }
+
+ return profile;
+ }
+
+ /**
+ * Returns the supported level by given video codec
+ */
+ public static int getExportLevel(int vidCodec) {
+ int level = -1;
+
+ switch (vidCodec) {
+ case MediaProperties.VCODEC_H263:
+ case MediaProperties.VCODEC_H264:
+ case MediaProperties.VCODEC_MPEG4:
+ level = native_get_videoeditor_export_profile(vidCodec);
+ break;
+ default :
+ throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
+ }
+
+ return level;
}
// Private constructor called by JNI
@@ -78,5 +115,8 @@ public class VideoEditorProfile
// Methods implemented by JNI
private static native final void native_init();
private static native final VideoEditorProfile
- native_get_videoeditor_profile();
+ native_get_videoeditor_profile();
+ private static native final int native_get_videoeditor_export_profile(int codec);
+ private static native final int native_get_videoeditor_export_level(int level);
+
}
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index 2b8dfe4dd20b..e5e688c3268f 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -324,7 +324,37 @@ android_media_MediaProfiles_native_get_videoeditor_profile(JNIEnv *env, jobject
maxOutputFrameWidth,
maxOutputFrameHeight);
}
+static jint
+android_media_MediaProfiles_native_get_videoeditor_export_profile(
+ JNIEnv *env, jobject thiz, jint codec)
+{
+ LOGV("android_media_MediaProfiles_native_get_export_profile index ");
+ int profile =0;
+ profile = sProfiles->getVideoEditorExportParamByName("videoeditor.export.profile", codec);
+ // Check the values retrieved
+ if (profile == -1) {
+ jniThrowException(env, "java/lang/RuntimeException",\
+ "Error retrieving videoeditor export profile params");
+ return -1;
+ }
+ return static_cast<jint>(profile);
+}
+static jint
+android_media_MediaProfiles_native_get_videoeditor_export_level(
+ JNIEnv *env, jobject thiz, jint codec)
+{
+ LOGV("android_media_MediaProfiles_native_get_export_level");
+ int level =0;
+ level = sProfiles->getVideoEditorExportParamByName("videoeditor.export.level", codec);
+ // Check the values retrieved
+ if (level == -1) {
+ jniThrowException(env, "java/lang/RuntimeException",\
+ "Error retrieving videoeditor export level params");
+ return -1;
+ }
+ return static_cast<jint>(level);
+}
static JNINativeMethod gMethodsForEncoderCapabilitiesClass[] = {
{"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
{"native_get_num_file_formats", "()I", (void *)android_media_MediaProfiles_native_get_num_file_formats},
@@ -363,16 +393,18 @@ static JNINativeMethod gMethodsForCameraProfileClass[] = {
};
static JNINativeMethod gMethodsForVideoEditorProfileClass[] = {
- {"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
- {"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;",
- (void *)android_media_MediaProfiles_native_get_videoeditor_profile},
+ {"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
+ {"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;", (void *)android_media_MediaProfiles_native_get_videoeditor_profile},
+ {"native_get_videoeditor_export_profile", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_profile},
+ {"native_get_videoeditor_export_level", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_level},
};
static const char* const kEncoderCapabilitiesClassPathName = "android/media/EncoderCapabilities";
static const char* const kDecoderCapabilitiesClassPathName = "android/media/DecoderCapabilities";
static const char* const kCamcorderProfileClassPathName = "android/media/CamcorderProfile";
static const char* const kCameraProfileClassPathName = "android/media/CameraProfile";
-static const char* const kVideoEditorProfileClassPathName = "android/media/videoeditor/VideoEditorProfile";
+static const char* const kVideoEditorProfileClassPathName =
+ "android/media/videoeditor/VideoEditorProfile";
// This function only registers the native methods, and is called from
// JNI_OnLoad in android_media_MediaPlayer.cpp
diff --git a/media/jni/mediaeditor/VideoBrowserInternal.h b/media/jni/mediaeditor/VideoBrowserInternal.h
index 3cfb6b9270c1..f4eaab8a6df3 100755
--- a/media/jni/mediaeditor/VideoBrowserInternal.h
+++ b/media/jni/mediaeditor/VideoBrowserInternal.h
@@ -26,9 +26,6 @@
#define VIDEO_BROWSER_BGR565
-
-#define VIDEO_BROWSER_PREDECODE_TIME 2000 /* In miliseconds */
-
/*---------------------------- MACROS ----------------------------*/
#define CHECK_PTR(fct, p, err, errValue) \
{ \
diff --git a/media/jni/mediaeditor/VideoBrowserMain.c b/media/jni/mediaeditor/VideoBrowserMain.c
index 2de55e311422..c6c6000ce6bc 100755
--- a/media/jni/mediaeditor/VideoBrowserMain.c
+++ b/media/jni/mediaeditor/VideoBrowserMain.c
@@ -447,13 +447,9 @@ M4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime,
VideoBrowserContext* pC = (VideoBrowserContext*)pContext;
M4OSA_ERR err = M4NO_ERROR;
M4OSA_UInt32 targetTime = 0;
- M4OSA_UInt32 jumpTime = 0;
M4_MediaTime timeMS = 0;
- M4OSA_Int32 rapTime = 0;
- M4OSA_Bool isBackward = M4OSA_FALSE;
M4OSA_Bool bJumpNeeded = M4OSA_FALSE;
-
/*--- Sanity checks ---*/
CHECK_PTR(videoBrowserPrepareFrame, pContext, err, M4ERR_PARAMETER);
CHECK_PTR(videoBrowserPrepareFrame, pTime, err, M4ERR_PARAMETER);
@@ -472,16 +468,11 @@ M4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime,
goto videoBrowserPrepareFrame_cleanUp;
}
- /*--- Check the duration ---*/
- /*--- If we jump backward, we need to jump ---*/
- if (targetTime < pC->m_currentCTS)
- {
- isBackward = M4OSA_TRUE;
- bJumpNeeded = M4OSA_TRUE;
- }
- /*--- If we jumpt to a time greater than "currentTime" + "predecodeTime"
- we need to jump ---*/
- else if (targetTime > (pC->m_currentCTS + VIDEO_BROWSER_PREDECODE_TIME))
+ // If we jump backward or forward to a time greater than current position by
+ // 85ms (~ 2 frames), we want to jump.
+ if (pC->m_currentCTS == 0 ||
+ targetTime < pC->m_currentCTS ||
+ targetTime > (pC->m_currentCTS + 85))
{
bJumpNeeded = M4OSA_TRUE;
}
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp
index 4c0e73157c60..69735cae1e03 100755
--- a/media/jni/mediaeditor/VideoEditorClasses.cpp
+++ b/media/jni/mediaeditor/VideoEditorClasses.cpp
@@ -402,7 +402,6 @@ VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFormat)
VIDEOEDIT_JAVA_CONSTANT_INIT("NO_VIDEO", M4VIDEOEDITING_kNoneVideo),
VIDEOEDIT_JAVA_CONSTANT_INIT("H263", M4VIDEOEDITING_kH263),
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4", M4VIDEOEDITING_kMPEG4),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_EMP", M4VIDEOEDITING_kMPEG4_EMP),
VIDEOEDIT_JAVA_CONSTANT_INIT("H264", M4VIDEOEDITING_kH264),
VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_VIDEO", M4VIDEOEDITING_kNullVideo),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kUnsupportedVideo),
@@ -448,73 +447,6 @@ VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize)
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoProfile)
-{
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_0", \
- M4VIDEOEDITING_kMPEG4_SP_Level_0),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_0B", \
- M4VIDEOEDITING_kMPEG4_SP_Level_0b),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_1", \
- M4VIDEOEDITING_kMPEG4_SP_Level_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_2", \
- M4VIDEOEDITING_kMPEG4_SP_Level_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_3", \
- M4VIDEOEDITING_kMPEG4_SP_Level_3),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_4A", \
- M4VIDEOEDITING_kMPEG4_SP_Level_4a),
- VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_5", \
- M4VIDEOEDITING_kMPEG4_SP_Level_5),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_10",\
- M4VIDEOEDITING_kH263_Profile_0_Level_10),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_20",\
- M4VIDEOEDITING_kH263_Profile_0_Level_20),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_30",\
- M4VIDEOEDITING_kH263_Profile_0_Level_30),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_40",\
- M4VIDEOEDITING_kH263_Profile_0_Level_40),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_45",\
- M4VIDEOEDITING_kH263_Profile_0_Level_45),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1", \
- M4VIDEOEDITING_kH264_Profile_0_Level_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1b",\
- M4VIDEOEDITING_kH264_Profile_0_Level_1b),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_1",\
- M4VIDEOEDITING_kH264_Profile_0_Level_1_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_2",\
- M4VIDEOEDITING_kH264_Profile_0_Level_1_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_3",\
- M4VIDEOEDITING_kH264_Profile_0_Level_1_3),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2", \
- M4VIDEOEDITING_kH264_Profile_0_Level_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2_1",\
- M4VIDEOEDITING_kH264_Profile_0_Level_2_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2_2",\
- M4VIDEOEDITING_kH264_Profile_0_Level_2_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3", \
- M4VIDEOEDITING_kH264_Profile_0_Level_3),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3_1",\
- M4VIDEOEDITING_kH264_Profile_0_Level_3_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3_2",\
- M4VIDEOEDITING_kH264_Profile_0_Level_3_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4", \
- M4VIDEOEDITING_kH264_Profile_0_Level_4),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4_1",\
- M4VIDEOEDITING_kH264_Profile_0_Level_4_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4_2",\
- M4VIDEOEDITING_kH264_Profile_0_Level_4_2),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_5", \
- M4VIDEOEDITING_kH264_Profile_0_Level_5),
- VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_5_1",\
- M4VIDEOEDITING_kH264_Profile_0_Level_5_1),
- VIDEOEDIT_JAVA_CONSTANT_INIT("OUT_OF_RANGE", \
- M4VIDEOEDITING_kProfile_and_Level_Out_Of_Range)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoProfile, VIDEO_PROFILE_CLASS_NAME, M4OSA_NULL,
- M4OSA_NULL)
-
-
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoTransition)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoTransitionType_None),
@@ -550,7 +482,10 @@ VIDEOEDIT_JAVA_DEFINE_FIELDS(Properties)
VIDEOEDIT_JAVA_FIELD_INIT("width", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("height", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("averageFrameRate", "F"),
- VIDEOEDIT_JAVA_FIELD_INIT("profileAndLevel", "I"),
+ VIDEOEDIT_JAVA_FIELD_INIT("profile", "I"),
+ VIDEOEDIT_JAVA_FIELD_INIT("level", "I"),
+ VIDEOEDIT_JAVA_FIELD_INIT("profileSupported", "Z"),
+ VIDEOEDIT_JAVA_FIELD_INIT("levelSupported", "Z"),
VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioDuration", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate", "I"),
@@ -620,6 +555,8 @@ VIDEOEDIT_JAVA_DEFINE_FIELDS(EditSettings)
VIDEOEDIT_JAVA_FIELD_INIT("outputFile", "Ljava/lang/String;" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I" ),
+ VIDEOEDIT_JAVA_FIELD_INIT("videoProfile", "I" ),
+ VIDEOEDIT_JAVA_FIELD_INIT("videoLevel", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFreq", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("maxFileSize", "I" ),
@@ -846,7 +783,6 @@ videoEditClasses_init(
videoEditJava_initVideoFormatConstants(pResult, pEnv);
videoEditJava_initVideoFrameRateConstants(pResult, pEnv);
videoEditJava_initVideoFrameSizeConstants(pResult, pEnv);
- videoEditJava_initVideoProfileConstants(pResult, pEnv);
videoEditJava_initVideoTransitionConstants(pResult, pEnv);
// Initialize the fields.
@@ -881,7 +817,6 @@ videoEditPropClass_init(
videoEditJava_initErrorConstants(pResult, pEnv);
videoEditJava_initFileTypeConstants(pResult, pEnv);
videoEditJava_initVideoFormatConstants(pResult, pEnv);
- videoEditJava_initVideoProfileConstants(pResult, pEnv);
// Initialize the fields.
videoEditJava_initPropertiesFields(pResult, pEnv);
@@ -1251,15 +1186,6 @@ videoEditClasses_logClipProperties(
"%*c fAverageFrameRate: %.3f", indentation, ' ',
pProperties->fAverageFrameRate);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
- "%*c ProfileAndLevel: %s", indentation, ' ',
- videoEditJava_getVideoProfileString(pProperties->ProfileAndLevel));
- VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
- "%*c uiH263level: %d", indentation, ' ',
- pProperties->uiH263level);
- VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
- "%*c uiVideoProfile: %d", indentation, ' ',
- pProperties->uiVideoProfile);
- VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bMPEG4dataPartition: %s", indentation, ' ',
pProperties->bMPEG4dataPartition ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
@@ -1650,9 +1576,21 @@ videoEditPropClass_createProperties(
// Set the averageFrameRate field.
pEnv->SetFloatField(object, fieldIds.averageFrameRate, pProperties->fAverageFrameRate);
- // Set the profileAndLevel field.
- pEnv->SetIntField(object, fieldIds.profileAndLevel,
- videoEditJava_getVideoProfileCToJava(pProperties->ProfileAndLevel));
+ // Set the profile field.
+ pEnv->SetIntField(object, fieldIds.profile,
+ pProperties->uiVideoProfile);
+
+ // Set the level field.
+ pEnv->SetIntField(object, fieldIds.level,
+ pProperties->uiVideoLevel);
+
+ // Set whether profile supported
+ pEnv->SetBooleanField(object, fieldIds.profileSupported,
+ pProperties->bProfileSupported);
+
+ // Set whether level supported
+ pEnv->SetBooleanField(object, fieldIds.levelSupported,
+ pProperties->bLevelSupported);
// Set the audioFormat field.
pEnv->SetIntField(object, fieldIds.audioFormat,
@@ -2062,6 +2000,14 @@ videoEditClasses_getEditSettings(
pSettings->xVSS.outputVideoBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.videoBitrate);
+ // Set the output video profile.
+ pSettings->xVSS.outputVideoProfile = (M4OSA_UInt32)pEnv->GetIntField(object,
+ fieldIds.videoProfile);
+
+ // Set the output video level.
+ pSettings->xVSS.outputVideoLevel = (M4OSA_UInt32)pEnv->GetIntField(object,
+ fieldIds.videoLevel);
+
// Set the output audio bitrate.
pSettings->xVSS.outputAudioBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.audioBitrate);
@@ -2256,6 +2202,12 @@ videoEditClasses_logEditSettings(
"%*c outputVideoFormat: %s", indentation, ' ',
videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoFormat));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
+ "%*c outputVideoProfile: %u", indentation, ' ',
+ videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoProfile));
+ VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
+ "%*c outputVideoLevel: %u", indentation, ' ',
+ videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoLevel));
+ VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputAudioFormat: %s", indentation, ' ',
videoEditJava_getAudioFormatString(pSettings->xVSS.outputAudioFormat));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
@@ -2984,10 +2936,6 @@ videoEditPropClass_logProperties(
pProperties->fAverageFrameRate);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
- "%*c ProfileAndLevel: %s", indentation, ' ',
- videoEditJava_getVideoProfileString(pProperties->ProfileAndLevel));
-
- VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c AudioStreamType: %s", indentation, ' ',
videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
diff --git a/media/jni/mediaeditor/VideoEditorClasses.h b/media/jni/mediaeditor/VideoEditorClasses.h
index 045f229311b2..3c10b1d24686 100755
--- a/media/jni/mediaeditor/VideoEditorClasses.h
+++ b/media/jni/mediaeditor/VideoEditorClasses.h
@@ -128,20 +128,23 @@ typedef struct
* Structure to hold media properties from native layer
*/
typedef struct {
- M4OSA_UInt32 uiClipDuration;
- VideoEditClasses_FileType FileType;
- M4VIDEOEDITING_VideoFormat VideoStreamType;
- M4OSA_UInt32 uiClipVideoDuration;
- M4OSA_UInt32 uiVideoBitrate;
- M4OSA_UInt32 uiVideoWidth;
- M4OSA_UInt32 uiVideoHeight;
- M4OSA_Float fAverageFrameRate;
- M4VIDEOEDITING_VideoProfileAndLevel ProfileAndLevel;
- M4VIDEOEDITING_AudioFormat AudioStreamType;
- M4OSA_UInt32 uiClipAudioDuration;
- M4OSA_UInt32 uiAudioBitrate;
- M4OSA_UInt32 uiNbChannels;
- M4OSA_UInt32 uiSamplingFrequency;
+ M4OSA_UInt32 uiClipDuration;
+ VideoEditClasses_FileType FileType;
+ M4VIDEOEDITING_VideoFormat VideoStreamType;
+ M4OSA_UInt32 uiClipVideoDuration;
+ M4OSA_UInt32 uiVideoBitrate;
+ M4OSA_UInt32 uiVideoWidth;
+ M4OSA_UInt32 uiVideoHeight;
+ M4OSA_Float fAverageFrameRate;
+ M4OSA_UInt32 uiVideoProfile; /**< H263 or MPEG-4 or H264 profile(from core decoder) */
+ M4OSA_UInt32 uiVideoLevel; /**< H263 or MPEG-4 or H264 level*/
+ M4OSA_Bool bProfileSupported;
+ M4OSA_Bool bLevelSupported;
+ M4VIDEOEDITING_AudioFormat AudioStreamType;
+ M4OSA_UInt32 uiClipAudioDuration;
+ M4OSA_UInt32 uiAudioBitrate;
+ M4OSA_UInt32 uiNbChannels;
+ M4OSA_UInt32 uiSamplingFrequency;
} VideoEditPropClass_Properties;
typedef struct
@@ -154,7 +157,10 @@ typedef struct
jfieldID width;
jfieldID height;
jfieldID averageFrameRate;
- jfieldID profileAndLevel;
+ jfieldID profile;
+ jfieldID level;
+ jfieldID profileSupported;
+ jfieldID levelSupported;
jfieldID audioFormat;
jfieldID audioDuration;
jfieldID audioBitrate;
@@ -192,6 +198,8 @@ typedef struct
jfieldID outputFile;
jfieldID videoFrameSize;
jfieldID videoFormat;
+ jfieldID videoProfile;
+ jfieldID videoLevel;
jfieldID audioFormat;
jfieldID audioSamplingFreq;
jfieldID maxFileSize;
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
index 14972a2f7623..b737e5d3b5af 100755
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorMain.cpp
@@ -13,7 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+#define LOG_NDEBUG 1
+#define LOG_TAG "VideoEditorMain"
#include <dlfcn.h>
#include <stdio.h>
#include <unistd.h>
@@ -103,6 +104,7 @@ typedef struct
bool mIsUpdateOverlay;
char *mOverlayFileName;
int mOverlayRenderingMode;
+ M4DECODER_VideoDecoders* decoders;
} ManualEditContext;
extern "C" M4OSA_ERR M4MCS_open_normalMode(
@@ -182,10 +184,11 @@ static int videoEditor_getPixelsList(
jintArray pixelArray,
M4OSA_UInt32 width,
M4OSA_UInt32 height,
- M4OSA_UInt32 deltatimeMS,
M4OSA_UInt32 noOfThumbnails,
- M4OSA_UInt32 startTime,
- M4OSA_UInt32 endTime);
+ jlong startTime,
+ jlong endTime,
+ jintArray indexArray,
+ jobject callback);
static void
videoEditor_startPreview(
@@ -288,7 +291,7 @@ static JNINativeMethod gManualEditMethods[] = {
(void *)videoEditor_release },
{"nativeGetPixels", "(Ljava/lang/String;[IIIJ)I",
(void*)videoEditor_getPixels },
- {"nativeGetPixelsList", "(Ljava/lang/String;[IIIIIJJ)I",
+ {"nativeGetPixelsList", "(Ljava/lang/String;[IIIIJJ[ILandroid/media/videoeditor/MediaArtistNativeHelper$NativeGetPixelsListCallback;)I",
(void*)videoEditor_getPixelsList },
{"getMediaProperties",
"(Ljava/lang/String;)Landroid/media/videoeditor/MediaArtistNativeHelper$Properties;",
@@ -483,6 +486,82 @@ static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType,
pContext->pVM->DetachCurrentThread();
}
+static M4OSA_ERR checkClipVideoProfileAndLevel(M4DECODER_VideoDecoders *pDecoders,
+ M4OSA_Int32 format, M4OSA_UInt32 profile, M4OSA_UInt32 level){
+
+ M4OSA_Int32 codec = 0;
+ M4OSA_Bool foundCodec = M4OSA_FALSE;
+ M4OSA_ERR result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
+ M4OSA_Bool foundProfile = M4OSA_FALSE;
+ LOGV("checkClipVideoProfileAndLevel format %d profile;%d level:0x%x",
+ format, profile, level);
+
+ switch (format) {
+ case M4VIDEOEDITING_kH263:
+ codec = M4DA_StreamTypeVideoH263;
+ break;
+ case M4VIDEOEDITING_kH264:
+ codec = M4DA_StreamTypeVideoMpeg4Avc;
+ break;
+ case M4VIDEOEDITING_kMPEG4:
+ codec = M4DA_StreamTypeVideoMpeg4;
+ break;
+ case M4VIDEOEDITING_kNoneVideo:
+ case M4VIDEOEDITING_kNullVideo:
+ case M4VIDEOEDITING_kUnsupportedVideo:
+ // For these case we do not check the profile and level
+ return M4NO_ERROR;
+ default :
+ LOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format);
+ break;
+ }
+
+ if (pDecoders != M4OSA_NULL && pDecoders->decoderNumber > 0) {
+ VideoDecoder *pVideoDecoder = pDecoders->decoder;
+ for(size_t k =0; k < pDecoders->decoderNumber; k++) {
+ if (pVideoDecoder != M4OSA_NULL) {
+ if (pVideoDecoder->codec == codec) {
+ foundCodec = M4OSA_TRUE;
+ break;
+ }
+ }
+ pVideoDecoder++;
+ }
+
+ if (foundCodec) {
+ VideoComponentCapabilities* pComponent = pVideoDecoder->component;
+ for (size_t i = 0; i < pVideoDecoder->componentNumber; i++) {
+ if (pComponent != M4OSA_NULL) {
+ VideoProfileLevel *pProfileLevel = pComponent->profileLevel;
+ for (size_t j =0; j < pComponent->profileNumber; j++) {
+ // Check the profile and level
+ if (pProfileLevel != M4OSA_NULL) {
+ if (profile == pProfileLevel->mProfile) {
+ foundProfile = M4OSA_TRUE;
+
+ if (level <= pProfileLevel->mLevel) {
+ return M4NO_ERROR;
+ }
+ } else {
+ foundProfile = M4OSA_FALSE;
+ }
+ }
+ pProfileLevel++;
+ }
+ }
+ pComponent++;
+ }
+ }
+ }
+
+ if (foundProfile) {
+ result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL;
+ } else {
+ result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
+ }
+
+ return result;
+}
static int videoEditor_stopPreview(JNIEnv* pEnv,
jobject thiz)
{
@@ -1243,6 +1322,8 @@ M4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext,
// Set the video format.
pOutputParams->OutputVideoFormat =
(M4VIDEOEDITING_VideoFormat)M4VIDEOEDITING_kNoneVideo;//M4VIDEOEDITING_kNoneVideo;
+ pOutputParams->outputVideoProfile = 1;
+ pOutputParams->outputVideoLevel = 1;
// Set the frame size.
pOutputParams->OutputVideoFrameSize
= (M4VIDEOEDITING_VideoFrameSize)M4VIDEOEDITING_kQCIF;
@@ -1796,7 +1877,8 @@ videoEditor_populateSettings(
}
fid = pEnv->GetFieldID(audioSettingClazz,"bRemoveOriginal","Z");
- pContext->mAudioSettings->bRemoveOriginal = pEnv->GetIntField(audioSettingObject,fid);
+ pContext->mAudioSettings->bRemoveOriginal =
+ pEnv->GetBooleanField(audioSettingObject,fid);
M4OSA_TRACE1_1("bRemoveOriginal = %d",pContext->mAudioSettings->bRemoveOriginal);
fid = pEnv->GetFieldID(audioSettingClazz,"channels","I");
@@ -1815,7 +1897,7 @@ videoEditor_populateSettings(
fid = pEnv->GetFieldID(audioSettingClazz,"startMs","J");
pContext->mAudioSettings->uiAddCts
- = pEnv->GetIntField(audioSettingObject,fid);
+ = pEnv->GetLongField(audioSettingObject,fid);
M4OSA_TRACE1_1("uiAddCts = %d",pContext->mAudioSettings->uiAddCts);
fid = pEnv->GetFieldID(audioSettingClazz,"volume","I");
@@ -1825,17 +1907,17 @@ videoEditor_populateSettings(
fid = pEnv->GetFieldID(audioSettingClazz,"loop","Z");
pContext->mAudioSettings->bLoop
- = pEnv->GetIntField(audioSettingObject,fid);
+ = pEnv->GetBooleanField(audioSettingObject,fid);
M4OSA_TRACE1_1("bLoop = %d",pContext->mAudioSettings->bLoop);
fid = pEnv->GetFieldID(audioSettingClazz,"beginCutTime","J");
pContext->mAudioSettings->beginCutMs
- = pEnv->GetIntField(audioSettingObject,fid);
+ = pEnv->GetLongField(audioSettingObject,fid);
M4OSA_TRACE1_1("begin cut time = %d",pContext->mAudioSettings->beginCutMs);
fid = pEnv->GetFieldID(audioSettingClazz,"endCutTime","J");
pContext->mAudioSettings->endCutMs
- = pEnv->GetIntField(audioSettingObject,fid);
+ = pEnv->GetLongField(audioSettingObject,fid);
M4OSA_TRACE1_1("end cut time = %d",pContext->mAudioSettings->endCutMs);
fid = pEnv->GetFieldID(audioSettingClazz,"fileType","I");
@@ -2089,8 +2171,44 @@ videoEditor_getProperties(
jstring file)
{
jobject object = M4OSA_NULL;
+ jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME);
+ jfieldID fid;
+ bool needToBeLoaded = true;
+ ManualEditContext* pContext = M4OSA_NULL;
+ M4OSA_ERR result = M4NO_ERROR;
+ int profile = 0;
+ int level = 0;
+ int videoFormat = 0;
+
+ // Get the context.
+ pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
+
+ videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
+ (M4OSA_NULL == clazz),
+ "not initialized");
+
object = videoEditProp_getProperties(pEnv,thiz,file);
+ if (object != M4OSA_NULL) {
+ fid = pEnv->GetFieldID(clazz,"profile","I");
+ profile = pEnv->GetIntField(object,fid);
+ fid = pEnv->GetFieldID(clazz,"level","I");
+ level = pEnv->GetIntField(object,fid);
+ fid = pEnv->GetFieldID(clazz,"videoFormat","I");
+ videoFormat = pEnv->GetIntField(object,fid);
+
+ result = checkClipVideoProfileAndLevel(pContext->decoders, videoFormat, profile, level);
+
+ fid = pEnv->GetFieldID(clazz,"profileSupported","Z");
+ if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE == result) {
+ pEnv->SetBooleanField(object,fid,false);
+ }
+
+ fid = pEnv->GetFieldID(clazz,"levelSupported","Z");
+ if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL == result) {
+ pEnv->SetBooleanField(object,fid,false);
+ }
+ }
return object;
}
@@ -2150,75 +2268,72 @@ static int videoEditor_getPixels(
}
static int videoEditor_getPixelsList(
- JNIEnv* env,
- jobject thiz,
- jstring path,
- jintArray pixelArray,
- M4OSA_UInt32 width,
- M4OSA_UInt32 height,
- M4OSA_UInt32 deltatimeMS,
+ JNIEnv* env,
+ jobject thiz,
+ jstring path,
+ jintArray pixelArray,
+ M4OSA_UInt32 width,
+ M4OSA_UInt32 height,
M4OSA_UInt32 noOfThumbnails,
- M4OSA_UInt32 startTime,
- M4OSA_UInt32 endTime)
+ jlong startTime,
+ jlong endTime,
+ jintArray indexArray,
+ jobject callback)
{
- M4OSA_ERR err;
+ M4OSA_ERR err = M4NO_ERROR;
M4OSA_Context mContext = M4OSA_NULL;
- jint* m_dst32;
- M4OSA_UInt32 timeMS = startTime;
- int arrayOffset = 0;
-
-
-
- // Add a text marker (the condition must always be true).
- ADD_TEXT_MARKER_FUN(NULL != env)
const char *pString = env->GetStringUTFChars(path, NULL);
if (pString == M4OSA_NULL) {
- if (env != NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Input string null");
- }
+ jniThrowException(env, "java/lang/RuntimeException", "Input string null");
return M4ERR_ALLOC;
}
err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE);
if (err != M4NO_ERROR || mContext == M4OSA_NULL) {
- if (env != NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed");
- }
+ jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed");
if (pString != NULL) {
env->ReleaseStringUTFChars(path, pString);
}
return err;
}
- m_dst32 = env->GetIntArrayElements(pixelArray, NULL);
+ jlong duration = (endTime - startTime);
+ M4OSA_UInt32 tolerance = duration / (2 * noOfThumbnails);
+ jint* m_dst32 = env->GetIntArrayElements(pixelArray, NULL);
+ jint* indices = env->GetIntArrayElements(indexArray, NULL);
+ jsize len = env->GetArrayLength(indexArray);
- M4OSA_UInt32 tolerance = deltatimeMS / 2;
- do {
- err = ThumbnailGetPixels32(mContext, ((M4OSA_Int32 *)m_dst32 + arrayOffset),
- width,height,&timeMS, tolerance);
- if (err != M4NO_ERROR ) {
- if (env != NULL) {
- jniThrowException(env, "java/lang/RuntimeException",\
- "ThumbnailGetPixels32 failed");
- }
- return err;
+ jclass cls = env->GetObjectClass(callback);
+ jmethodID mid = env->GetMethodID(cls, "onThumbnail", "(I)V");
+
+ for (int i = 0; i < len; i++) {
+ int k = indices[i];
+ M4OSA_UInt32 timeMS = startTime;
+ timeMS += (2 * k + 1) * duration / (2 * noOfThumbnails);
+ err = ThumbnailGetPixels32(mContext, ((M4OSA_Int32 *)m_dst32),
+ width, height, &timeMS, tolerance);
+ if (err != M4NO_ERROR) {
+ break;
}
- timeMS += deltatimeMS;
- arrayOffset += (width * height * 4);
- noOfThumbnails--;
- } while(noOfThumbnails > 0);
+ env->CallVoidMethod(callback, mid, (jint)k);
+ }
env->ReleaseIntArrayElements(pixelArray, m_dst32, 0);
+ env->ReleaseIntArrayElements(indexArray, indices, 0);
ThumbnailClose(mContext);
if (pString != NULL) {
env->ReleaseStringUTFChars(path, pString);
}
- return err;
+ if (err != M4NO_ERROR) {
+ jniThrowException(env, "java/lang/RuntimeException",\
+ "ThumbnailGetPixels32 failed");
+ }
+ return err;
}
static M4OSA_ERR
@@ -2501,12 +2616,13 @@ videoEditor_init(
//initialize the first char. so that strcat works.
M4OSA_Char *ptmpChar = (M4OSA_Char*)pContext->initParams.pTempPath;
ptmpChar[0] = 0x00;
- strncat((char *)pContext->initParams.pTempPath, (const char *)tmpString,
+ strncat((char *)pContext->initParams.pTempPath, (const char *)tmpString,
(size_t)strlen((const char *)tmpString));
strncat((char *)pContext->initParams.pTempPath, (const char *)"/", (size_t)1);
free(tmpString);
pContext->mIsUpdateOverlay = false;
pContext->mOverlayFileName = NULL;
+ pContext->decoders = NULL;
}
// Check if the initialization succeeded
@@ -2552,6 +2668,12 @@ videoEditor_init(
// Check if the library could be initialized.
videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
(M4NO_ERROR != result), result);
+
+ // Get platform video decoder capablities.
+ result = M4xVSS_getVideoDecoderCapabilities(&pContext->decoders);
+
+ videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
+ (M4NO_ERROR != result), result);
}
if(initialized)
@@ -2633,7 +2755,8 @@ M4OSA_ERR videoEditor_processClip(
ManualEditState completionState = ManualEditState_OPENED;
ManualEditState errorState = ManualEditState_ANALYZING_ERROR;
- // While analyzing progress goes from 0 to 50
+ // While analyzing progress goes from 0 to 10 (except Kenburn clip
+ // generation, which goes from 0 to 50)
progressBase = 0;
// Set the text rendering function.
@@ -2669,6 +2792,7 @@ M4OSA_ERR videoEditor_processClip(
// Check if a task is being performed.
// ??? ADD STOPPING MECHANISM
LOGV("videoEditor_processClip Entering processing loop");
+ M4OSA_UInt8 prevReportedProgress = 0;
while((result == M4NO_ERROR)
&&(pContext->state!=ManualEditState_SAVED)
&&(pContext->state!=ManualEditState_STOPPING)) {
@@ -2676,19 +2800,35 @@ M4OSA_ERR videoEditor_processClip(
// Perform the next processing step.
//LOGV("LVME_processClip Entering M4xVSS_Step()");
result = M4xVSS_Step(pContext->engineContext, &progress);
- //LOGV("LVME_processClip M4xVSS_Step() returned 0x%x", (unsigned int)result);
- // Log the the 1 % .. 100 % progress after processing.
- progress = progressBase + progress/2;
- if (progress != lastProgress)
- {
- // Send a progress notification.
- LOGV("videoEditor_processClip ITEM %d Progress indication %d",
- unuseditemID, progress);
- pEnv->CallVoidMethod(pContext->engine,
- pContext->onProgressUpdateMethodId,
- unuseditemID, progress);
- lastProgress = progress;
+ if (progress != prevReportedProgress) {
+ prevReportedProgress = progress;
+ // Log the 1 % .. 100 % progress after processing.
+ if (M4OSA_TRUE ==
+ pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) {
+ // For KenBurn clip generation, return 0 to 50
+ // for Analysis phase and 50 to 100 for Saving phase
+ progress = progressBase + progress/2;
+ } else {
+ // For export/transition clips, 0 to 10 for Analysis phase
+ // and 10 to 100 for Saving phase
+ if (ManualEditState_INITIALIZED == pContext->state) {
+ progress = 0.1*progress;
+ } else {
+ progress = progressBase + 0.9*progress;
+ }
+ }
+
+ if (progress > lastProgress)
+ {
+ // Send a progress notification.
+ LOGV("videoEditor_processClip ITEM %d Progress indication %d",
+ unuseditemID, progress);
+ pEnv->CallVoidMethod(pContext->engine,
+ pContext->onProgressUpdateMethodId,
+ unuseditemID, progress);
+ lastProgress = progress;
+ }
}
// Check if processing has been completed.
@@ -2721,20 +2861,26 @@ M4OSA_ERR videoEditor_processClip(
completionResult = M4VSS3GPP_WAR_SAVING_DONE;
errorState = ManualEditState_SAVING_ERROR;
- // While saving progress goes from 50 to 100
- progressBase = 50;
+ // While saving, progress goes from 10 to 100
+ // except for Kenburn clip which goes from 50 to 100
+ if (M4OSA_TRUE ==
+ pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) {
+ progressBase = 50;
+ } else {
+ progressBase = 10;
+ }
}
// Check if we encoding is ongoing
else if (pContext->state == ManualEditState_SAVED) {
- if (progress != 100) {
- // Send a progress notification.
- progress = 100;
- LOGI("videoEditor_processClip ITEM %d Last progress indication %d",
- unuseditemID, progress);
- pEnv->CallVoidMethod(pContext->engine,
- pContext->onProgressUpdateMethodId,
- unuseditemID, progress);
- }
+
+ // Send a progress notification.
+ progress = 100;
+ LOGV("videoEditor_processClip ITEM %d Last progress indication %d",
+ unuseditemID, progress);
+ pEnv->CallVoidMethod(pContext->engine,
+ pContext->onProgressUpdateMethodId,
+ unuseditemID, progress);
+
// Stop the encoding.
LOGV("videoEditor_processClip Calling M4xVSS_SaveStop()");
@@ -3075,6 +3221,47 @@ videoEditor_release(
free(pContext->mAudioSettings);
pContext->mAudioSettings = M4OSA_NULL;
}
+ // Free video Decoders capabilities
+ if (pContext->decoders != M4OSA_NULL) {
+ VideoDecoder *pDecoder = NULL;
+ VideoComponentCapabilities *pComponents = NULL;
+ int32_t decoderNumber = pContext->decoders->decoderNumber;
+ if (pContext->decoders->decoder != NULL &&
+ decoderNumber > 0) {
+ pDecoder = pContext->decoders->decoder;
+ for (int32_t k = 0; k < decoderNumber; k++) {
+ // free each component
+ LOGV("decoder index :%d",k);
+ if (pDecoder != NULL &&
+ pDecoder->component != NULL &&
+ pDecoder->componentNumber > 0) {
+ LOGV("component number %d",pDecoder->componentNumber);
+ int32_t componentNumber =
+ pDecoder->componentNumber;
+
+ pComponents = pDecoder->component;
+ for (int32_t i = 0; i< componentNumber; i++) {
+ LOGV("component index :%d",i);
+ if (pComponents != NULL &&
+ pComponents->profileLevel != NULL) {
+ free(pComponents->profileLevel);
+ pComponents->profileLevel = NULL;
+ }
+ pComponents++;
+ }
+ free(pDecoder->component);
+ pDecoder->component = NULL;
+ }
+
+ pDecoder++;
+ }
+ free(pContext->decoders->decoder);
+ pContext->decoders->decoder = NULL;
+ }
+ free(pContext->decoders);
+ pContext->decoders = NULL;
+ }
+
videoEditor_freeContext(pEnv, &pContext);
}
}
@@ -3399,6 +3586,7 @@ static int videoEditor_generateAudioWaveFormSync (JNIEnv* pEnv, jobject thiz,
M4OSA_ERR result = M4NO_ERROR;
ManualEditContext* pContext = M4OSA_NULL;
bool needToBeLoaded = true;
+ const char *pPCMFilePath, *pStringOutAudioGraphFile;
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
"videoEditor_generateAudioWaveFormSync() ");
@@ -3413,20 +3601,20 @@ static int videoEditor_generateAudioWaveFormSync (JNIEnv* pEnv, jobject thiz,
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
"videoEditor_generateAudioWaveFormSync Retrieving pStringOutAudioGraphFile");
- const char *pPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL);
+ pPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL);
if (pPCMFilePath == M4OSA_NULL) {
- if (pEnv != NULL) {
- jniThrowException(pEnv, "java/lang/RuntimeException",
- "Input string PCMFilePath is null");
- }
+ jniThrowException(pEnv, "java/lang/RuntimeException",
+ "Input string PCMFilePath is null");
+ result = M4ERR_PARAMETER;
+ goto out;
}
- const char *pStringOutAudioGraphFile = pEnv->GetStringUTFChars(outGraphfilePath, NULL);
+ pStringOutAudioGraphFile = pEnv->GetStringUTFChars(outGraphfilePath, NULL);
if (pStringOutAudioGraphFile == M4OSA_NULL) {
- if (pEnv != NULL) {
- jniThrowException(pEnv, "java/lang/RuntimeException",
- "Input string outGraphfilePath is null");
- }
+ jniThrowException(pEnv, "java/lang/RuntimeException",
+ "Input string outGraphfilePath is null");
+ result = M4ERR_PARAMETER;
+ goto out2;
}
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
@@ -3441,14 +3629,14 @@ static int videoEditor_generateAudioWaveFormSync (JNIEnv* pEnv, jobject thiz,
(M4OSA_UInt32)frameDuration,
pContext);
- if (pStringOutAudioGraphFile != NULL) {
- pEnv->ReleaseStringUTFChars(outGraphfilePath, pStringOutAudioGraphFile);
- }
+ pEnv->ReleaseStringUTFChars(outGraphfilePath, pStringOutAudioGraphFile);
+out2:
if (pPCMFilePath != NULL) {
pEnv->ReleaseStringUTFChars(pcmfilePath, pPCMFilePath);
}
+out:
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
"videoEditor_generateAudioWaveFormSync pContext->bSkipState ");
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
index 93fe70238349..2ca3a0836f49 100755
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
@@ -248,7 +248,11 @@ jobject videoEditProp_getProperties(
pProperties->uiVideoWidth = pClipProperties->uiVideoWidth;
pProperties->uiVideoHeight = pClipProperties->uiVideoHeight;
pProperties->fAverageFrameRate = pClipProperties->fAverageFrameRate;
- pProperties->ProfileAndLevel = pClipProperties->ProfileAndLevel;
+ pProperties->uiVideoProfile = pClipProperties->uiVideoProfile;
+ pProperties->uiVideoLevel = pClipProperties->uiVideoLevel;
+ // Set profile and level support to TRUE, pending check
+ pProperties->bProfileSupported = M4OSA_TRUE;
+ pProperties->bLevelSupported = M4OSA_TRUE;
pProperties->AudioStreamType = pClipProperties->AudioStreamType;
pProperties->uiClipAudioDuration = pClipProperties->uiClipAudioDuration;
pProperties->uiAudioBitrate = pClipProperties->uiAudioBitrate;
@@ -272,7 +276,8 @@ jobject videoEditProp_getProperties(
pProperties->uiVideoWidth = width;
pProperties->uiVideoHeight = height;
pProperties->fAverageFrameRate = 0.0f;
- pProperties->ProfileAndLevel = M4VIDEOEDITING_kProfile_and_Level_Out_Of_Range;
+ pProperties->uiVideoProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE;
+ pProperties->uiVideoLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL;
pProperties->AudioStreamType = M4VIDEOEDITING_kNoneAudio;
pProperties->uiClipAudioDuration = 0;
pProperties->uiAudioBitrate = 0;
@@ -291,11 +296,13 @@ jobject videoEditProp_getProperties(
}
}
- // Create a properties object.
- videoEditPropClass_createProperties(&gotten, pEnv, pProperties, &properties);
+ if (M4NO_ERROR == result) {
+ // Create a properties object.
+ videoEditPropClass_createProperties(&gotten, pEnv, pProperties, &properties);
- // Log the properties.
- VIDEOEDIT_PROP_LOG_PROPERTIES(pProperties);
+ // Log the properties.
+ VIDEOEDIT_PROP_LOG_PROPERTIES(pProperties);
+ }
// Free the properties.
videoEditOsal_free(pProperties);
diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp
index f0f07a2151f0..5a8bc6036463 100644
--- a/media/libmedia/MediaProfiles.cpp
+++ b/media/libmedia/MediaProfiles.cpp
@@ -26,6 +26,7 @@
#include <expat.h>
#include <media/MediaProfiles.h>
#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/openmax/OMX_Video.h>
namespace android {
@@ -377,7 +378,24 @@ void MediaProfiles::addStartTimeOffset(int cameraId, const char** atts)
LOGV("%s: cameraId=%d, offset=%d ms", __func__, cameraId, offsetTimeMs);
mStartTimeOffsets.replaceValueFor(cameraId, offsetTimeMs);
}
+/*static*/ MediaProfiles::ExportVideoProfile*
+MediaProfiles::createExportVideoProfile(const char **atts)
+{
+ CHECK(!strcmp("name", atts[0]) &&
+ !strcmp("profile", atts[2]) &&
+ !strcmp("level", atts[4]));
+
+ const size_t nMappings =
+ sizeof(sVideoEncoderNameMap)/sizeof(sVideoEncoderNameMap[0]);
+ const int codec = findTagForName(sVideoEncoderNameMap, nMappings, atts[1]);
+ CHECK(codec != -1);
+
+ MediaProfiles::ExportVideoProfile *profile =
+ new MediaProfiles::ExportVideoProfile(
+ codec, atoi(atts[3]), atoi(atts[5]));
+ return profile;
+}
/*static*/ MediaProfiles::VideoEditorCap*
MediaProfiles::createVideoEditorCap(const char **atts, MediaProfiles *profiles)
{
@@ -428,6 +446,8 @@ MediaProfiles::startElementHandler(void *userData, const char *name, const char
profiles->addImageEncodingQualityLevel(profiles->mCurrentCameraId, atts);
} else if (strcmp("VideoEditorCap", name) == 0) {
createVideoEditorCap(atts, profiles);
+ } else if (strcmp("ExportVideoProfile", name) == 0) {
+ profiles->mVideoEditorExportProfiles.add(createExportVideoProfile(atts));
}
}
@@ -830,6 +850,20 @@ MediaProfiles::createDefaultVideoEditorCap(MediaProfiles *profiles)
VIDEOEDITOR_DEFAULT_MAX_OUTPUT_FRAME_WIDTH,
VIDEOEDITOR_DEFUALT_MAX_OUTPUT_FRAME_HEIGHT);
}
+/*static*/ void
+MediaProfiles::createDefaultExportVideoProfiles(MediaProfiles *profiles)
+{
+ // Create default video export profiles
+ profiles->mVideoEditorExportProfiles.add(
+ new ExportVideoProfile(VIDEO_ENCODER_H263,
+ OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10));
+ profiles->mVideoEditorExportProfiles.add(
+ new ExportVideoProfile(VIDEO_ENCODER_MPEG_4_SP,
+ OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1));
+ profiles->mVideoEditorExportProfiles.add(
+ new ExportVideoProfile(VIDEO_ENCODER_H264,
+ OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13));
+}
/*static*/ MediaProfiles*
MediaProfiles::createDefaultInstance()
@@ -843,6 +877,7 @@ MediaProfiles::createDefaultInstance()
createDefaultEncoderOutputFileFormats(profiles);
createDefaultImageEncodingQualityLevels(profiles);
createDefaultVideoEditorCap(profiles);
+ createDefaultExportVideoProfiles(profiles);
return profiles;
}
@@ -940,7 +975,31 @@ int MediaProfiles::getVideoEncoderParamByName(const char *name, video_encoder co
LOGE("The given video encoder param name %s is not found", name);
return -1;
}
+int MediaProfiles::getVideoEditorExportParamByName(
+ const char *name, int codec) const
+{
+ LOGV("getVideoEditorExportParamByName: name %s codec %d", name, codec);
+ ExportVideoProfile *exportProfile = NULL;
+ int index = -1;
+ for (size_t i =0; i < mVideoEditorExportProfiles.size(); i++) {
+ exportProfile = mVideoEditorExportProfiles[i];
+ if (exportProfile->mCodec == codec) {
+ index = i;
+ break;
+ }
+ }
+ if (index == -1) {
+ LOGE("The given video decoder %d is not found", codec);
+ return -1;
+ }
+ if (!strcmp("videoeditor.export.profile", name))
+ return exportProfile->mProfile;
+ if (!strcmp("videoeditor.export.level", name))
+ return exportProfile->mLevel;
+ LOGE("The given video editor export param name %s is not found", name);
+ return -1;
+}
int MediaProfiles::getVideoEditorCapParamByName(const char *name) const
{
LOGV("getVideoEditorCapParamByName: %s", name);
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index b06f20d55c80..7fb141a02124 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -340,6 +340,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
}
finishFlushIfPossible();
+ } else if (what == ACodec::kWhatError) {
+ LOGE("Received error from %s decoder, aborting playback.",
+ audio ? "audio" : "video");
+
+ mRenderer->queueEOS(audio, UNKNOWN_ERROR);
} else {
CHECK_EQ((int)what, (int)ACodec::kWhatDrainThisBuffer);
@@ -358,13 +363,24 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
int32_t audio;
CHECK(msg->findInt32("audio", &audio));
+ int32_t finalResult;
+ CHECK(msg->findInt32("finalResult", &finalResult));
+
if (audio) {
mAudioEOS = true;
} else {
mVideoEOS = true;
}
- LOGV("reached %s EOS", audio ? "audio" : "video");
+ if (finalResult == ERROR_END_OF_STREAM) {
+ LOGV("reached %s EOS", audio ? "audio" : "video");
+ } else {
+ LOGE("%s track encountered an error (0x%08x)",
+ audio ? "audio" : "video", finalResult);
+
+ notifyListener(
+ MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, finalResult);
+ }
if ((mAudioEOS || mAudioDecoder == NULL)
&& (mVideoEOS || mVideoDecoder == NULL)) {
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 828e00863ea8..35ed43fc441e 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -200,19 +200,6 @@ void NuPlayer::Renderer::signalAudioSinkChanged() {
void NuPlayer::Renderer::onDrainAudioQueue() {
for (;;) {
- uint32_t numFramesPlayed;
- CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK);
-
- ssize_t numFramesAvailableToWrite =
- mAudioSink->frameCount() - (mNumFramesWritten - numFramesPlayed);
-
- size_t numBytesAvailableToWrite =
- numFramesAvailableToWrite * mAudioSink->frameSize();
-
- if (numBytesAvailableToWrite == 0) {
- break;
- }
-
if (mAudioQueue.empty()) {
break;
}
@@ -222,13 +209,26 @@ void NuPlayer::Renderer::onDrainAudioQueue() {
if (entry->mBuffer == NULL) {
// EOS
- notifyEOS(true /* audio */);
+ notifyEOS(true /* audio */, entry->mFinalResult);
mAudioQueue.erase(mAudioQueue.begin());
entry = NULL;
return;
}
+ uint32_t numFramesPlayed;
+ CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK);
+
+ ssize_t numFramesAvailableToWrite =
+ mAudioSink->frameCount() - (mNumFramesWritten - numFramesPlayed);
+
+ size_t numBytesAvailableToWrite =
+ numFramesAvailableToWrite * mAudioSink->frameSize();
+
+ if (numBytesAvailableToWrite == 0) {
+ break;
+ }
+
if (entry->mOffset == 0) {
int64_t mediaTimeUs;
CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));
@@ -330,7 +330,7 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
if (entry->mBuffer == NULL) {
// EOS
- notifyEOS(false /* audio */);
+ notifyEOS(false /* audio */, entry->mFinalResult);
mVideoQueue.erase(mVideoQueue.begin());
entry = NULL;
@@ -352,10 +352,11 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
notifyPosition();
}
-void NuPlayer::Renderer::notifyEOS(bool audio) {
+void NuPlayer::Renderer::notifyEOS(bool audio, status_t finalResult) {
sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatEOS);
notify->setInt32("audio", static_cast<int32_t>(audio));
+ notify->setInt32("finalResult", finalResult);
notify->post();
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
index 703e9715ad94..2713031f4b70 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
@@ -111,7 +111,7 @@ private:
void onPause();
void onResume();
- void notifyEOS(bool audio);
+ void notifyEOS(bool audio, status_t finalResult);
void notifyFlushComplete(bool audio);
void notifyPosition();
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 174ec926c692..5d91f6a97e72 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -285,21 +285,6 @@ private:
////////////////////////////////////////////////////////////////////////////////
-struct ACodec::ErrorState : public ACodec::BaseState {
- ErrorState(ACodec *codec);
-
-protected:
- virtual bool onMessageReceived(const sp<AMessage> &msg);
- virtual void stateEntered();
-
- virtual bool onOMXEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2);
-
-private:
- DISALLOW_EVIL_CONSTRUCTORS(ErrorState);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
struct ACodec::FlushingState : public ACodec::BaseState {
FlushingState(ACodec *codec);
@@ -335,7 +320,6 @@ ACodec::ACodec()
mExecutingToIdleState = new ExecutingToIdleState(this);
mIdleToLoadedState = new IdleToLoadedState(this);
- mErrorState = new ErrorState(this);
mFlushingState = new FlushingState(this);
mPortEOS[kPortIndexInput] = mPortEOS[kPortIndexOutput] = false;
@@ -594,7 +578,10 @@ status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) {
ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() {
ANativeWindowBuffer *buf;
- CHECK_EQ(mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf), 0);
+ if (mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf) != 0) {
+ LOGE("dequeueBuffer failed.");
+ return NULL;
+ }
for (size_t i = mBuffers[kPortIndexOutput].size(); i-- > 0;) {
BufferInfo *info =
@@ -1263,10 +1250,12 @@ bool ACodec::BaseState::onOMXEvent(
return false;
}
- LOGE("[%s] ERROR(0x%08lx, 0x%08lx)",
- mCodec->mComponentName.c_str(), data1, data2);
+ LOGE("[%s] ERROR(0x%08lx)", mCodec->mComponentName.c_str(), data1);
- mCodec->changeState(mCodec->mErrorState);
+ sp<AMessage> notify = mCodec->mNotify->dup();
+ notify->setInt32("what", ACodec::kWhatError);
+ notify->setInt32("omx-error", data1);
+ notify->post();
return true;
}
@@ -1595,13 +1584,15 @@ void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) {
info = mCodec->dequeueBufferFromNativeWindow();
}
- LOGV("[%s] calling fillBuffer %p",
- mCodec->mComponentName.c_str(), info->mBufferID);
+ if (info != NULL) {
+ LOGV("[%s] calling fillBuffer %p",
+ mCodec->mComponentName.c_str(), info->mBufferID);
- CHECK_EQ(mCodec->mOMX->fillBuffer(mCodec->mNode, info->mBufferID),
- (status_t)OK);
+ CHECK_EQ(mCodec->mOMX->fillBuffer(mCodec->mNode, info->mBufferID),
+ (status_t)OK);
- info->mStatus = BufferInfo::OWNED_BY_COMPONENT;
+ info->mStatus = BufferInfo::OWNED_BY_COMPONENT;
+ }
}
break;
}
@@ -1642,6 +1633,7 @@ bool ACodec::UninitializedState::onMessageReceived(const sp<AMessage> &msg) {
notify->post();
handled = true;
+ break;
}
case ACodec::kWhatFlush:
@@ -1651,6 +1643,7 @@ bool ACodec::UninitializedState::onMessageReceived(const sp<AMessage> &msg) {
notify->post();
handled = true;
+ break;
}
default:
@@ -1696,7 +1689,16 @@ void ACodec::UninitializedState::onSetup(
node = NULL;
}
- CHECK(node != NULL);
+ if (node == NULL) {
+ LOGE("Unable to instantiate a decoder for type '%s'.", mime.c_str());
+
+ sp<AMessage> notify = mCodec->mNotify->dup();
+ notify->setInt32("what", ACodec::kWhatError);
+ notify->setInt32("omx-error", OMX_ErrorComponentNotFound);
+ notify->post();
+
+ return;
+ }
sp<AMessage> notify = new AMessage(kWhatOMXMessage, mCodec->id());
observer->setNotificationMessage(notify);
@@ -2236,26 +2238,6 @@ bool ACodec::IdleToLoadedState::onOMXEvent(
////////////////////////////////////////////////////////////////////////////////
-ACodec::ErrorState::ErrorState(ACodec *codec)
- : BaseState(codec) {
-}
-
-bool ACodec::ErrorState::onMessageReceived(const sp<AMessage> &msg) {
- return BaseState::onMessageReceived(msg);
-}
-
-void ACodec::ErrorState::stateEntered() {
- LOGV("[%s] Now in ErrorState", mCodec->mComponentName.c_str());
-}
-
-bool ACodec::ErrorState::onOMXEvent(
- OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) {
- LOGV("EVENT(%d, 0x%08lx, 0x%08lx)", event, data1, data2);
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
ACodec::FlushingState::FlushingState(ACodec *codec)
: BaseState(codec) {
}
diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk
index b9e4f9fb1223..0b1a2af46bc5 100644
--- a/media/libstagefright/Android.mk
+++ b/media/libstagefright/Android.mk
@@ -131,11 +131,9 @@ LOCAL_SHARED_LIBRARIES += \
libdl \
LOCAL_STATIC_LIBRARIES += \
- libstagefright_chromium_http \
- libwebcore \
- libchromium_net \
+ libstagefright_chromium_http
-LOCAL_SHARED_LIBRARIES += libstlport
+LOCAL_SHARED_LIBRARIES += libstlport libchromium_net
include external/stlport/libstlport.mk
LOCAL_CPPFLAGS += -DCHROMIUM_AVAILABLE=1
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 0ea880b35a7a..f2673b33a867 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -59,6 +59,7 @@
#include <cutils/properties.h>
#define USE_SURFACE_ALLOC 1
+#define FRAME_DROP_FREQ 0
namespace android {
@@ -548,7 +549,7 @@ void AwesomePlayer::reset_l() {
mVideoTimeUs = 0;
mSeeking = NO_SEEK;
- mSeekNotificationSent = false;
+ mSeekNotificationSent = true;
mSeekTimeUs = 0;
mUri.setTo("");
@@ -574,6 +575,8 @@ void AwesomePlayer::reset_l() {
mStats.mTracks.clear();
}
+ mWatchForAudioSeekComplete = false;
+ mWatchForAudioEOS = false;
}
void AwesomePlayer::notifyListener_l(int msg, int ext1, int ext2) {
@@ -818,7 +821,12 @@ void AwesomePlayer::onStreamDone() {
return;
}
- if (mFlags & (LOOPING | AUTO_LOOPING)) {
+ if ((mFlags & LOOPING)
+ || ((mFlags & AUTO_LOOPING)
+ && (mAudioSink == NULL || mAudioSink->realtime()))) {
+ // Don't AUTO_LOOP if we're being recorded, since that cannot be
+ // turned off and recording would go on indefinitely.
+
seekTo_l(0);
if (mVideoSource != NULL) {
@@ -1202,7 +1210,6 @@ void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
if (mLastVideoTimeUs >= 0) {
mSeeking = SEEK;
- mSeekNotificationSent = true;
mSeekTimeUs = mLastVideoTimeUs;
modifyFlags((AT_EOS | AUDIO_AT_EOS | VIDEO_AT_EOS), CLEAR);
}
@@ -1303,8 +1310,10 @@ void AwesomePlayer::OnRTSPSeekDoneWrapper(void *cookie) {
}
void AwesomePlayer::onRTSPSeekDone() {
- notifyListener_l(MEDIA_SEEK_COMPLETE);
- mSeekNotificationSent = true;
+ if (!mSeekNotificationSent) {
+ notifyListener_l(MEDIA_SEEK_COMPLETE);
+ mSeekNotificationSent = true;
+ }
}
status_t AwesomePlayer::seekTo_l(int64_t timeUs) {
@@ -1516,14 +1525,29 @@ status_t AwesomePlayer::initVideoDecoder(uint32_t flags) {
}
if (mVideoSource != NULL) {
- Mutex::Autolock autoLock(mStatsLock);
- TrackStat *stat = &mStats.mTracks.editItemAt(mStats.mVideoTrackIndex);
-
- const char *component;
+ const char *componentName;
CHECK(mVideoSource->getFormat()
- ->findCString(kKeyDecoderComponent, &component));
+ ->findCString(kKeyDecoderComponent, &componentName));
- stat->mDecoderName = component;
+ {
+ Mutex::Autolock autoLock(mStatsLock);
+ TrackStat *stat = &mStats.mTracks.editItemAt(mStats.mVideoTrackIndex);
+
+ stat->mDecoderName = componentName;
+ }
+
+ static const char *kPrefix = "OMX.Nvidia.";
+ static const char *kSuffix = ".decode";
+ static const size_t kSuffixLength = strlen(kSuffix);
+
+ size_t componentNameLength = strlen(componentName);
+
+ if (!strncmp(componentName, kPrefix, strlen(kPrefix))
+ && componentNameLength >= kSuffixLength
+ && !strcmp(&componentName[
+ componentNameLength - kSuffixLength], kSuffix)) {
+ modifyFlags(SLOW_DECODER_HACK, SET);
+ }
}
return mVideoSource != NULL ? OK : UNKNOWN_ERROR;
@@ -1703,6 +1727,7 @@ void AwesomePlayer::onVideoEvent() {
if (mFlags & FIRST_FRAME) {
modifyFlags(FIRST_FRAME, CLEAR);
+ mSinceLastDropped = 0;
mTimeSourceDeltaUs = ts->getRealTimeUs() - timeUs;
}
@@ -1749,18 +1774,28 @@ void AwesomePlayer::onVideoEvent() {
if (latenessUs > 40000) {
// We're more than 40ms late.
- LOGV("we're late by %lld us (%.2f secs), dropping frame",
+ LOGV("we're late by %lld us (%.2f secs)",
latenessUs, latenessUs / 1E6);
- mVideoBuffer->release();
- mVideoBuffer = NULL;
+ if (!(mFlags & SLOW_DECODER_HACK)
+ || mSinceLastDropped > FRAME_DROP_FREQ)
{
- Mutex::Autolock autoLock(mStatsLock);
- ++mStats.mNumVideoFramesDropped;
- }
+ LOGV("we're late by %lld us (%.2f secs) dropping "
+ "one after %d frames",
+ latenessUs, latenessUs / 1E6, mSinceLastDropped);
- postVideoEvent_l();
- return;
+ mSinceLastDropped = 0;
+ mVideoBuffer->release();
+ mVideoBuffer = NULL;
+
+ {
+ Mutex::Autolock autoLock(mStatsLock);
+ ++mStats.mNumVideoFramesDropped;
+ }
+
+ postVideoEvent_l();
+ return;
+ }
}
if (latenessUs < -10000) {
@@ -1779,6 +1814,7 @@ void AwesomePlayer::onVideoEvent() {
}
if (mVideoRenderer != NULL) {
+ mSinceLastDropped++;
mVideoRenderer->render(mVideoBuffer);
}
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 73a05a5cec77..3b79f063c319 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -1687,6 +1687,11 @@ status_t MPEG4Extractor::verifyTrack(Track *track) {
}
}
+ if (!track->sampleTable->isValid()) {
+ // Make sure we have all the metadata we need.
+ return ERROR_MALFORMED;
+ }
+
return OK;
}
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 644c413f6fee..27dfeab4cb6f 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -3199,9 +3199,16 @@ void OMXCodec::setState(State newState) {
}
status_t OMXCodec::waitForBufferFilled_l() {
+
+ if (mIsEncoder) {
+ // For timelapse video recording, the timelapse video recording may
+ // not send an input frame for a _long_ time. Do not use timeout
+ // for video encoding.
+ return mBufferFilled.wait(mLock);
+ }
status_t err = mBufferFilled.waitRelative(mLock, kBufferFilledEventTimeOutUs);
if (err != OK) {
- LOGE("Timed out waiting for buffers from video encoder: %d/%d",
+ CODEC_LOGE("Timed out waiting for output buffers: %d/%d",
countBuffersWeOwn(mPortBuffers[kPortIndexInput]),
countBuffersWeOwn(mPortBuffers[kPortIndexOutput]));
}
diff --git a/media/libstagefright/SampleTable.cpp b/media/libstagefright/SampleTable.cpp
index a8a094e2bd5d..2b9d99bdf52d 100644
--- a/media/libstagefright/SampleTable.cpp
+++ b/media/libstagefright/SampleTable.cpp
@@ -84,6 +84,13 @@ SampleTable::~SampleTable() {
mSampleIterator = NULL;
}
+bool SampleTable::isValid() const {
+ return mChunkOffsetOffset >= 0
+ && mSampleToChunkOffset >= 0
+ && mSampleSizeOffset >= 0
+ && mTimeToSample != NULL;
+}
+
status_t SampleTable::setChunkOffsetParams(
uint32_t type, off64_t data_offset, size_t data_size) {
if (mChunkOffsetOffset >= 0) {
diff --git a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
index 7e83163c922e..61a02acf81f9 100644
--- a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
+++ b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp
@@ -66,7 +66,7 @@ void SoftVPX::initPorts() {
def.eDir = OMX_DirInput;
def.nBufferCountMin = kNumBuffers;
def.nBufferCountActual = def.nBufferCountMin;
- def.nBufferSize = 8192;
+ def.nBufferSize = 256 * 1024;
def.bEnabled = OMX_TRUE;
def.bPopulated = OMX_FALSE;
def.eDomain = OMX_PortDomainVideo;
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index 95f2ae83fd52..14476d3f7705 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -141,6 +141,8 @@ private:
TEXT_RUNNING = 0x10000,
TEXTPLAYER_STARTED = 0x20000,
+
+ SLOW_DECODER_HACK = 0x40000,
};
mutable Mutex mLock;
@@ -181,6 +183,7 @@ private:
uint32_t mFlags;
uint32_t mExtractorFlags;
+ uint32_t mSinceLastDropped;
int64_t mTimeSourceDeltaUs;
int64_t mVideoTimeUs;
diff --git a/media/libstagefright/include/SampleTable.h b/media/libstagefright/include/SampleTable.h
index f44e0a2495f7..a6a6524c06ad 100644
--- a/media/libstagefright/include/SampleTable.h
+++ b/media/libstagefright/include/SampleTable.h
@@ -34,6 +34,8 @@ class SampleTable : public RefBase {
public:
SampleTable(const sp<DataSource> &source);
+ bool isValid() const;
+
// type can be 'stco' or 'co64'.
status_t setChunkOffsetParams(
uint32_t type, off64_t data_offset, size_t data_size);
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index e1b9991983a5..3ef7b71e248d 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -493,7 +493,8 @@ MatroskaExtractor::MatroskaExtractor(const sp<DataSource> &source)
: mDataSource(source),
mReader(new DataSourceReader(mDataSource)),
mSegment(NULL),
- mExtractedThumbnails(false) {
+ mExtractedThumbnails(false),
+ mIsWebm(false) {
off64_t size;
mIsLiveStreaming =
(mDataSource->flags()
@@ -507,6 +508,10 @@ MatroskaExtractor::MatroskaExtractor(const sp<DataSource> &source)
return;
}
+ if (ebmlHeader.m_docType && !strcmp("webm", ebmlHeader.m_docType)) {
+ mIsWebm = true;
+ }
+
long long ret =
mkvparser::Segment::CreateInstance(mReader, pos, mSegment);
@@ -757,7 +762,10 @@ void MatroskaExtractor::findThumbnails() {
sp<MetaData> MatroskaExtractor::getMetaData() {
sp<MetaData> meta = new MetaData;
- meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_CONTAINER_MATROSKA);
+
+ meta->setCString(
+ kKeyMIMEType,
+ mIsWebm ? "video/webm" : MEDIA_MIMETYPE_CONTAINER_MATROSKA);
return meta;
}
diff --git a/media/libstagefright/matroska/MatroskaExtractor.h b/media/libstagefright/matroska/MatroskaExtractor.h
index 38ebd6121ba9..1294b4fe415a 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.h
+++ b/media/libstagefright/matroska/MatroskaExtractor.h
@@ -68,6 +68,7 @@ private:
mkvparser::Segment *mSegment;
bool mExtractedThumbnails;
bool mIsLiveStreaming;
+ bool mIsWebm;
void addTracks();
void findThumbnails();
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp
index 12ab94100d02..b612f899100c 100644
--- a/media/libstagefright/omx/OMXNodeInstance.cpp
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -419,7 +419,7 @@ status_t OMXNodeInstance::useGraphicBuffer2_l(
def.nVersion.s.nStep = 0;
def.nPortIndex = portIndex;
OMX_ERRORTYPE err = OMX_GetParameter(mHandle, OMX_IndexParamPortDefinition, &def);
- if (err != OK)
+ if (err != OMX_ErrorNone)
{
LOGE("%s::%d:Error getting OMX_IndexParamPortDefinition", __FUNCTION__, __LINE__);
return err;
@@ -474,9 +474,6 @@ status_t OMXNodeInstance::useGraphicBuffer(
return useGraphicBuffer2_l(portIndex, graphicBuffer, buffer);
}
- LOGW("Falling back to the deprecated useAndroidNativeBuffer support. You "
- "should switch to the useAndroidNativeBuffer2 extension.");
-
OMX_ERRORTYPE err = OMX_GetExtensionIndex(
mHandle,
const_cast<OMX_STRING>("OMX.google.android.index.useAndroidNativeBuffer"),
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
index 369a067165ce..e5ecd5cde2ee 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
@@ -16,8 +16,7 @@
package com.android.mediaframeworktest;
-import android.media.EncoderCapabilities.AudioEncoderCap;
-import android.media.EncoderCapabilities.VideoEncoderCap;
+import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.test.InstrumentationTestRunner;
@@ -29,20 +28,21 @@ import junit.framework.TestSuite;
public class MediaRecorderStressTestRunner extends InstrumentationTestRunner {
- public static List<VideoEncoderCap> videoEncoders = MediaProfileReader.getVideoEncoders();
- public static List<AudioEncoderCap> audioEncoders = MediaProfileReader.getAudioEncoders();
-
- //Get the first capability as the default
- public static VideoEncoderCap videoEncoder = videoEncoders.get(0);
- public static AudioEncoderCap audioEncoder = audioEncoders.get(0);
+ // MediaRecorder stress test sets one of the cameras as the video source. As
+ // a result, we should make sure that the encoding parameters as input to
+ // the test must be supported by the corresponding camera.
+ public static int mCameraId = 0;
+ public static int mProfileQuality = CamcorderProfile.QUALITY_HIGH;
+ public static CamcorderProfile profile =
+ CamcorderProfile.get(mCameraId, mProfileQuality);
public static int mIterations = 100;
- public static int mVideoEncoder = videoEncoder.mCodec;
- public static int mAudioEncdoer = audioEncoder.mCodec;
- public static int mFrameRate = videoEncoder.mMaxFrameRate;
- public static int mVideoWidth = videoEncoder.mMaxFrameWidth;
- public static int mVideoHeight = videoEncoder.mMaxFrameHeight;
- public static int mBitRate = audioEncoder.mMaxBitRate;
+ public static int mVideoEncoder = profile.videoCodec;
+ public static int mAudioEncdoer = profile.audioCodec;
+ public static int mFrameRate = profile.videoFrameRate;
+ public static int mVideoWidth = profile.videoFrameWidth;
+ public static int mVideoHeight = profile.videoFrameHeight;
+ public static int mBitRate = profile.videoBitRate;
public static boolean mRemoveVideo = true;
public static int mDuration = 10000;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
index 4d517db604e8..0ad6760d1ee8 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
@@ -71,7 +71,7 @@ public class MediaPropertiesTest extends
protected void validateVideoProperties(int aspectRatio, int fileType,
int videoCodecType, int duration, int videoBitrate, int fps,
- int videoProfile, int width, int height, int audioCodecType,
+ int videoProfile, int videoLevel, int width, int height, int audioCodecType,
int audioSamplingFrequency, int audioChannel, int audioBitrate,
MediaVideoItem mvi) throws Exception {
assertEquals("Aspect Ratio Mismatch", aspectRatio, mvi.getAspectRatio());
@@ -82,6 +82,8 @@ public class MediaPropertiesTest extends
duration, mvi.getDuration(), 10));
assertEquals("Video Profile " + mvi.getVideoProfile(), videoProfile,
mvi.getVideoProfile());
+ assertEquals("Video Level " + mvi.getVideoLevel(), videoLevel,
+ mvi.getVideoLevel());
assertEquals("Video height " + mvi.getHeight(), height, mvi.getHeight());
assertEquals("Video width " + mvi.getWidth(), width, mvi.getWidth());
/** Check FPS with 10% range */
@@ -143,7 +145,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 16000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
+ final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
+ final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
final int width = 854;
final int height = MediaProperties.HEIGHT_480;
@@ -152,7 +155,7 @@ public class MediaPropertiesTest extends
MediaItem.RENDERING_MODE_BLACK_BORDER);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -175,7 +178,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
final int audioSamplingFrequency = 8000;
final int audioChannel = 1;
- final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
+ final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
+ final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
final int width = 800;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -184,7 +188,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -206,7 +210,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 48000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
+ final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
+ final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
final int width = 720;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -215,7 +220,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -237,7 +242,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 48000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
+ final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
+ final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
final int width = 640;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -246,7 +252,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -268,7 +274,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
final int audioSamplingFrequency = 8000;
final int audioChannel = 1;
- final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
+ final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
+ final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
final int width = 176;
final int height = MediaProperties.HEIGHT_144;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -277,7 +284,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -299,7 +306,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 16000;
final int audioChannel = 1;
- final int videoProfile = MediaProperties.H263_PROFILE_0_LEVEL_10;
+ final int videoProfile = MediaProperties.H263Profile.H263ProfileBaseline;
+ final int videoLevel = MediaProperties.H263Level.H263Level10;
final int width = 176;
final int height = MediaProperties.HEIGHT_144;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -307,7 +315,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -321,7 +329,7 @@ public class MediaPropertiesTest extends
+ "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
final int fileType = MediaProperties.FILE_3GP;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77600;
final int videoBitrate = 745000;
final int audioBitrate = 64000;
@@ -329,7 +337,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 48000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 640;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -337,7 +346,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -351,7 +360,7 @@ public class MediaPropertiesTest extends
+ "H264_BP_720x480_25fps_256kbps_AMRNB_8khz_12.2kbps_m_0_26.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 26880;
final int videoBitrate = 244000;
final int audioBitrate = 12200;
@@ -359,7 +368,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
final int audioSamplingFrequency = 8000;
final int audioChannel = 1;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 720;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -368,7 +378,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -382,7 +392,7 @@ public class MediaPropertiesTest extends
"H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77466;
final int videoBitrate = 528000;
final int audioBitrate = 38000;
@@ -390,7 +400,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 24000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 800;
final int height = MediaProperties.HEIGHT_480;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -399,7 +410,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -413,7 +424,7 @@ public class MediaPropertiesTest extends
+ "H264_BP_1280x720_15fps_512kbps_AACLC_16khz_48kbps_s_1_17.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_16_9;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77600;
final int videoBitrate = 606000;
final int audioBitrate = 48000;
@@ -421,7 +432,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 16000;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 1280;
final int height = MediaProperties.HEIGHT_720;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -430,7 +442,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -444,7 +456,7 @@ public class MediaPropertiesTest extends
+ "H264_BP_1080x720_30fps_12Mbps_AACLC_44.1khz_64kbps_s_1_17.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77500;
final int videoBitrate = 1190000;
final int audioBitrate = 64000;
@@ -452,7 +464,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
final int audioSamplingFrequency = 44100;
final int audioChannel = 2;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 1080;
final int height = MediaProperties.HEIGHT_720;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -461,7 +474,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
@@ -491,7 +504,7 @@ public class MediaPropertiesTest extends
}
/**
- *To test media properties for H.264 Main/Advanced profile. (unsupported profile input)
+ *To test media properties for H.264 Main/Advanced profile.
*/
// TODO : Remove TC_MP_013
@LargeTest
@@ -499,19 +512,28 @@ public class MediaPropertiesTest extends
final String videoItemFilename = INPUT_FILE_PATH
+ "H264_MP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
- //final int videoCodecType = MediaProperties.VCODEC_H264BP;
- final int videoCodecType = MediaProperties.VCODEC_H264MP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
+ final int fileType = MediaProperties.FILE_MP4;
+ final int duration = 77500;
+ final int videoBitrate = 800000;
+ final int audioBitrate = 192000;
+ final int fps = 25;
+ final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
+ final int audioSamplingFrequency = 48000;
+ final int audioChannel = 2;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileMain;
+ final int videoLevel = MediaProperties.H264Level.H264Level31;
+ final int width = 960;
+ final int height = MediaProperties.HEIGHT_720;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
- boolean flagForException = false;
- try {
final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
(mVideoEditor, "m1", videoItemFilename, renderingMode);
- assertEquals("VideoCodec Mismatch", videoCodecType, mvi.getVideoType());
- }catch (IllegalArgumentException e){
- flagForException = true;
- }
- assertTrue("Unsupported Main Profile", flagForException);
+
+ validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
+ audioSamplingFrequency, audioChannel, audioBitrate, mvi);
+
}
/**
@@ -544,7 +566,7 @@ public class MediaPropertiesTest extends
"H264_BP_1080x720_30fps_800kbps_1_17.mp4";
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77366;
final int videoBitrate = 859000;
final int audioBitrate = 0;
@@ -552,7 +574,8 @@ public class MediaPropertiesTest extends
final int audioCodecType = -1;
final int audioSamplingFrequency = 0;
final int audioChannel = 0;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 1080;
final int height = MediaProperties.HEIGHT_720;
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
@@ -561,7 +584,7 @@ public class MediaPropertiesTest extends
(mVideoEditor, "m1", videoItemFilename, renderingMode);
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
- videoBitrate, fps, videoProfile, width, height, audioCodecType,
+ videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
index 74d47661edb2..e1b337df9c8a 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
@@ -166,7 +166,7 @@ public class VideoEditorExportTest extends
+ mediaImageItem6.getDuration();
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -294,7 +294,7 @@ public class VideoEditorExportTest extends
+ mediaImageItem6.getDuration();
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -352,7 +352,7 @@ public class VideoEditorExportTest extends
}
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, mediaImageItem.getDuration(),
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -412,7 +412,7 @@ public class VideoEditorExportTest extends
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, (mediaVideoItem.getTimelineDuration() +
mediaImageItem.getDuration()),
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -531,7 +531,7 @@ public class VideoEditorExportTest extends
+ mediaItem6.getTimelineDuration() - transition5And6.getDuration();
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -693,7 +693,7 @@ public class VideoEditorExportTest extends
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_144, 0, storyBoardDuration,
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -730,7 +730,7 @@ public class VideoEditorExportTest extends
}
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0, mediaItem1.getDuration(),
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
@@ -814,7 +814,7 @@ public class VideoEditorExportTest extends
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
MediaProperties.HEIGHT_720, 0,
(mediaVideoItem.getDuration()+ mediaVideoItem1.getDuration()),
- MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
+ MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
}
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
index 7eb6d22bc9d3..3d0be4fcdf5d 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
@@ -366,7 +366,7 @@ public class VideoEditorPerformance extends
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
final int outHeight = MediaProperties.HEIGHT_480;
final int outBitrate = MediaProperties.BITRATE_256K;
- final int outVcodec = MediaProperties.VCODEC_H264BP;
+ final int outVcodec = MediaProperties.VCODEC_H264;
final String[] loggingInfo = new String[1];
final String outFilename = mVideoEditorHelper
.createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
@@ -639,11 +639,12 @@ public class VideoEditorPerformance extends
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
final int fileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int duration = 77366;
final int videoBitrate = 3169971;
final int fps = 30;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int width = 1080;
final int height = MediaProperties.HEIGHT_720;
int timeTaken = 0;
@@ -665,6 +666,8 @@ public class VideoEditorPerformance extends
duration, mediaVideoItem.getDuration());
assertEquals("Video Profile ",
videoProfile, mediaVideoItem.getVideoProfile());
+ assertEquals("Video Level ",
+ videoLevel, mediaVideoItem.getVideoLevel());
assertEquals("Video height ",
height, mediaVideoItem.getHeight());
assertEquals("Video width ",
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java
index 94ffb8e736ae..4d3078473e2f 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java
@@ -665,9 +665,10 @@ public class VideoEditorStressTest
int i = 0;
final int videoAspectRatio = MediaProperties.ASPECT_RATIO_3_2;
final int videoFileType = MediaProperties.FILE_MP4;
- final int videoCodecType = MediaProperties.VCODEC_H264BP;
+ final int videoCodecType = MediaProperties.VCODEC_H264;
final int videoDuration = 77366;
- final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
+ final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
+ final int videoLevel = MediaProperties.H264Level.H264Level13;
final int videoHeight = MediaProperties.HEIGHT_720;
final int videoWidth = 1080;
@@ -698,6 +699,8 @@ public class VideoEditorStressTest
videoDuration, mediaItem1.getDuration());
assertEquals("Video Profile ",
videoProfile, mediaItem1.getVideoProfile());
+ assertEquals("Video Level ",
+ videoLevel, mediaItem1.getVideoLevel());
assertEquals("Video height ",
videoHeight, mediaItem1.getHeight());
assertEquals("Video width ",
@@ -939,9 +942,9 @@ public class VideoEditorStressTest
for ( i = 0; i < 50; i++) {
if(i%4 ==0){
- final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
+ final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
mVideoEditor.setAspectRatio(aspectRatio);
- mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
+ mVideoEditor.export(outFilename, MediaProperties.HEIGHT_288,
MediaProperties.BITRATE_256K,MediaProperties.ACODEC_AAC_LC,
MediaProperties.VCODEC_H263,
new ExportProgressListener() {
@@ -967,7 +970,7 @@ public class VideoEditorStressTest
mVideoEditor.setAspectRatio(aspectRatio);
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
MediaProperties.BITRATE_512K,MediaProperties.ACODEC_AAC_LC,
- MediaProperties.VCODEC_H264BP,
+ MediaProperties.VCODEC_H264,
new ExportProgressListener() {
public void onProgress(VideoEditor ve, String outFileName,
int progress) {
@@ -979,7 +982,7 @@ public class VideoEditorStressTest
mVideoEditor.setAspectRatio(aspectRatio);
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
MediaProperties.BITRATE_800K,MediaProperties.ACODEC_AAC_LC,
- MediaProperties.VCODEC_H264BP,
+ MediaProperties.VCODEC_H264,
new ExportProgressListener() {
public void onProgress(VideoEditor ve, String outFileName,
int progress) {
diff --git a/native/include/android/input.h b/native/include/android/input.h
index 7a0dcd3a64a0..f2befa9eadb0 100644
--- a/native/include/android/input.h
+++ b/native/include/android/input.h
@@ -373,6 +373,7 @@ enum {
AMOTION_EVENT_AXIS_GAS = 22,
AMOTION_EVENT_AXIS_BRAKE = 23,
AMOTION_EVENT_AXIS_DISTANCE = 24,
+ AMOTION_EVENT_AXIS_TILT = 25,
AMOTION_EVENT_AXIS_GENERIC_1 = 32,
AMOTION_EVENT_AXIS_GENERIC_2 = 33,
AMOTION_EVENT_AXIS_GENERIC_3 = 34,
diff --git a/opengl/libagl/state.cpp b/opengl/libagl/state.cpp
index 8b4136a45622..90e9612b8386 100644
--- a/opengl/libagl/state.cpp
+++ b/opengl/libagl/state.cpp
@@ -191,6 +191,9 @@ static void enable_disable(ogles_context_t* c, GLenum cap, int enabled)
// these need to fall through into the rasterizer
c->rasterizer.procs.enableDisable(c, cap, enabled);
break;
+ case GL_TEXTURE_EXTERNAL_OES:
+ c->rasterizer.procs.enableDisable(c, GL_TEXTURE_2D, enabled);
+ break;
case GL_MULTISAMPLE:
case GL_SAMPLE_ALPHA_TO_COVERAGE:
diff --git a/opengl/libagl/texture.cpp b/opengl/libagl/texture.cpp
index 8eb17c4355a8..88e865124ec7 100644
--- a/opengl/libagl/texture.cpp
+++ b/opengl/libagl/texture.cpp
@@ -633,7 +633,7 @@ void generateMipmap(ogles_context_t* c, GLint level)
static void texParameterx(
GLenum target, GLenum pname, GLfixed param, ogles_context_t* c)
{
- if (target != GL_TEXTURE_2D) {
+ if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES) {
ogles_error(c, GL_INVALID_ENUM);
return;
}
@@ -866,7 +866,7 @@ void glActiveTexture(GLenum texture)
void glBindTexture(GLenum target, GLuint texture)
{
ogles_context_t* c = ogles_context_t::get();
- if (target != GL_TEXTURE_2D) {
+ if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES) {
ogles_error(c, GL_INVALID_ENUM);
return;
}
@@ -1012,7 +1012,7 @@ void glTexParameteriv(
GLenum target, GLenum pname, const GLint* params)
{
ogles_context_t* c = ogles_context_t::get();
- if (target != GGL_TEXTURE_2D) {
+ if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES) {
ogles_error(c, GL_INVALID_ENUM);
return;
}
@@ -1605,7 +1605,7 @@ void glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h) {
void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
{
ogles_context_t* c = ogles_context_t::get();
- if (target != GL_TEXTURE_2D) {
+ if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES) {
ogles_error(c, GL_INVALID_ENUM);
return;
}
diff --git a/opengl/tests/swapinterval/swapinterval.cpp b/opengl/tests/swapinterval/swapinterval.cpp
index df53b6269925..8ca031bef5d2 100644
--- a/opengl/tests/swapinterval/swapinterval.cpp
+++ b/opengl/tests/swapinterval/swapinterval.cpp
@@ -48,31 +48,35 @@ int main(int argc, char** argv)
EGLNativeWindowType window = android_createDisplaySurface();
dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- eglInitialize(dpy, 0 ,0) ;//&majorVersion, &minorVersion);
+ eglInitialize(dpy, &majorVersion, &minorVersion);
eglGetConfigs(dpy, NULL, 0, &numConfigs);
printf("# configs = %d\n", numConfigs);
status_t err = EGLUtils::selectConfigForNativeWindow(
dpy, configAttribs, window, &config);
if (err) {
- fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
+ fprintf(stderr, "error: %s", EGLUtils::strerror(eglGetError()));
+ eglTerminate(dpy);
return 0;
}
- EGLint r,g,b,a;
+ EGLint r,g,b,a, vid;
eglGetConfigAttrib(dpy, config, EGL_RED_SIZE, &r);
eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g);
eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE, &b);
eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a);
+ eglGetConfigAttrib(dpy, config, EGL_NATIVE_VISUAL_ID, &vid);
surface = eglCreateWindowSurface(dpy, config, window, NULL);
if (surface == EGL_NO_SURFACE) {
EGLint err = eglGetError();
- fprintf(stderr, "%s, config=%p, format = %d-%d-%d-%d\n",
- EGLUtils::strerror(err), config, r,g,b,a);
+ fprintf(stderr, "error: %s, config=%p, format = %d-%d-%d-%d, visual-id = %d\n",
+ EGLUtils::strerror(err), config, r,g,b,a, vid);
+ eglTerminate(dpy);
return 0;
} else {
- printf("config=%p, format = %d-%d-%d-%d\n", config, r,g,b,a);
+ printf("config=%p, format = %d-%d-%d-%d, visual-id = %d\n",
+ config, r,g,b,a, vid);
}
context = eglCreateContext(dpy, config, NULL, NULL);
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
new file mode 100644
index 000000000000..f42a880d611f
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-en-rGB/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">"A full backup of all data to a connected desktop computer has been requested. Do you want to allow this to happen?"\n\n"If you did not request the backup yourself, do not allow the operation to proceed."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Back up my data"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Do not back up"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"A full restore of all data from a connected desktop computer has been requested. Do you want to allow this to happen?"\n\n"If you did not request the restore yourself, do not allow the operation to proceed. This will replace any data currently on the device!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restore my data"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Do not restore"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Please enter your current backup password below:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"If you wish to encrypt the full backup data, enter a password below:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"If the restore data is encrypted, please enter the password below:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
new file mode 100644
index 000000000000..3e903f273816
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-es-rUS/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 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="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="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>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-it/strings.xml b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
new file mode 100644
index 000000000000..221aac96ebde
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-it/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">"È stato richiesto un backup completo di tutti i dati su un computer desktop connesso. Consentire l\'operazione?"\n\n"Se non hai richiesto il backup, non consentire all\'operazione di procedere."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Effettua backup dei miei dati"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Non eseguire il backup"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"È stato richiesto un ripristino completo di tutti i dati da un computer desktop connesso. Consentire questa operazione?"\n\n"Se non hai richiesto il ripristino, non consentire all\'operazione di procedere. Questa operazione sostituirà tutti i dati attualmente presenti sul dispositivo."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Ripristina i miei dati"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Non ripristinare"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Inserisci la tua password di backup corrente di seguito:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Inserisci una password da utilizzare per la crittografia dei dati di backup completi. Se non ne inserisci una, verrà utilizzata la tua password di backup corrente:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Se desideri crittografare tutti i dati di backup, inserisci una password qui di seguito:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Se i dati di ripristino sono crittografati, inserisci la password qui di seguito:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
new file mode 100644
index 000000000000..de849e35d26c
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ms/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">"Sandaran lengkap bagi semua data ke komputer meja yang bersambung telah diminta. Adakah anda mahu membenarkan ini berlaku? "\n" "\n" Jika anda tidak meminta sandaran ini sendiri, jangan benarkan operasi diteruskan."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Sandarkan data saya"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Jangan buat sandaran"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Pemulihan penuh semua data dari komputer meja yang bersambung telah diminta. Adakah anda mahu membenarkan ini berlaku? "\n" "\n" Jika anda tidak meminta pemulihan ini sendiri, jangan benarkan operasi ini diteruskan. Ini akan menggantikan sebarang data semasa di peranti!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Kembalikan data saya"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Jangan kembalikan"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Sila masukkan kata laluan sandaran semasa anda di bawah:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Sila masukkan kata laluan untuk digunakan untuk menyulitkan data sandaran lengkap. Jika ini dibiarkan kosong, kata laluan sandaran semasa anda akan digunakan:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika anda ingin menyulitkan data sandaran lengkap, masukkan kata laluan di bawah:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Jika pemulihan data disulitkan, sila masukkan kata laluan di bawah:"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
new file mode 100644
index 000000000000..82384f9f5216
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-pl/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">"Zażądano wykonania pełnej kopii zapasowej wszystkich danych na podłączonym komputerze stacjonarnym. Czy chcesz na to zezwolić?"\n\n"Jeśli żądanie utworzenia kopii zapasowej nie pochodzi od Ciebie, nie zezwalaj na kontynuowanie tej operacji."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Utwórz kopię zapasową danych"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nie twórz kopii zapasowej"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"Zażądano pełnego przywrócenia wszystkich danych z połączonego komputera stacjonarnego. Czy chcesz na to zezwolić?"\n\n"Jeśli żądanie przywrócenia nie pochodzi od Ciebie, nie zezwalaj na kontynuowanie tej operacji. Spowoduje to zastąpienie wszelkich danych znajdujących się aktualnie w urządzeniu."</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Przywróć moje dane"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Nie przywracaj"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Wpisz poniżej aktualne hasło kopii zapasowej:"</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Wpisz hasło do zaszyfrowania pełnej kopii zapasowej. Jeśli pozostawisz puste pole, zostanie użyte aktualne hasło kopii zapasowej:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Jeśli chcesz zaszyfrować pełną kopię zapasową, wprowadź poniżej hasło:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Jeśli przywracane dane są zaszyfrowane, wpisz poniżej hasło:"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-iw/strings.xml b/packages/DefaultContainerService/res/values-iw/strings.xml
index c6756d6cb7af..4a93179d6333 100644
--- a/packages/DefaultContainerService/res/values-iw/strings.xml
+++ b/packages/DefaultContainerService/res/values-iw/strings.xml
@@ -20,5 +20,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="service_name" msgid="4841491635055379553">"מסייע גישה לחבילה"</string>
+ <string name="service_name" msgid="4841491635055379553">"מסייע בגישה לחבילה"</string>
</resources>
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index 8c575956ddf5..6e5f8567eea9 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -541,9 +541,9 @@ public class DefaultContainerService extends IntentService {
final int availSdMb;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
- StatFs sdStats = new StatFs(Environment.getExternalStorageDirectory().getPath());
- long availSdSize = (long) (sdStats.getAvailableBlocks() * sdStats.getBlockSize());
- availSdMb = (int) (availSdSize >> 20);
+ final StatFs sdStats = new StatFs(Environment.getExternalStorageDirectory().getPath());
+ final int blocksToMb = (1 << 20) / sdStats.getBlockSize();
+ availSdMb = sdStats.getAvailableBlocks() * blocksToMb;
} else {
availSdMb = -1;
}
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 2080fad6fcc0..d10911fcba10 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -29,6 +29,7 @@
<!-- started from PhoneWindowManager
TODO: Should have an android:permission attribute -->
<service android:name=".screenshot.TakeScreenshotService"
+ android:process=":screenshot"
android:exported="false" />
<service android:name=".LoadAverageService"
diff --git a/packages/SystemUI/res/drawable/recents_thumbnail_layers.xml b/packages/SystemUI/res/anim/recent_appear.xml
index 6cae2c496367..4400d9dcdce7 100644
--- a/packages/SystemUI/res/drawable/recents_thumbnail_layers.xml
+++ b/packages/SystemUI/res/anim/recent_appear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!-- Copyright (C) 2010 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.
@@ -13,7 +13,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:drawable="@drawable/recents_thumbnail_bg" android:id="@+id/base_layer"/>
- <item android:drawable="@drawable/recents_thumbnail_overlay" android:id="@+id/overlay_layer"/>
-</layer-list> \ No newline at end of file
+
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
diff --git a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_top_divider.9.png b/packages/SystemUI/res/drawable-hdpi/compat_mode_help_top_divider.9.png
deleted file mode 100644
index 03a5639f876f..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_top_divider.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png b/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png
index 165fa80ac689..d697c2fdce63 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_airplane_off.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_airplane_off.png
deleted file mode 100644
index a55716460841..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_airplane_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default.png
deleted file mode 100644
index 48cab60806b3..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default_land.png
deleted file mode 100644
index 000af5e087fa..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_apps_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default_land.png
deleted file mode 100644
index e77dfafbf915..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_brightness_low.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_brightness_low.png
deleted file mode 100644
index b91be0763728..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_brightness_low.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_gps_on.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_gps_on.png
deleted file mode 100644
index 31e747e0bc78..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_gps_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default_land.png
deleted file mode 100644
index 8883601d4aff..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png
deleted file mode 100644
index 13b969cc1a57..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png
deleted file mode 100644
index 25e7e6f214ce..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png
deleted file mode 100644
index da512e48960c..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png
deleted file mode 100644
index f2a7c6d67665..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_settings.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_settings.png
deleted file mode 100644
index 18fe5be51ca9..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_settings.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png
deleted file mode 100644
index ab581a162a20..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_off.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_off.png
deleted file mode 100644
index 0246cd4b610a..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_on.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_on.png
deleted file mode 100644
index bec75e5ea5cf..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_sound_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recent_overlay.png b/packages/SystemUI/res/drawable-hdpi/recent_overlay.png
deleted file mode 100644
index ce48e0b649a2..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/recent_overlay.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png b/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png
deleted file mode 100644
index f10a48756afe..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/shade_handlebar.9.png b/packages/SystemUI/res/drawable-hdpi/shade_handlebar.9.png
deleted file mode 100644
index 0c121038fcda..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/shade_handlebar.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/shade_header_background.9.png b/packages/SystemUI/res/drawable-hdpi/shade_header_background.9.png
deleted file mode 100644
index 8fbe78ee86e5..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/shade_header_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index e6c9e805e055..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png
deleted file mode 100644
index b2e725c1a392..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png b/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png
deleted file mode 100644
index 6eaf6c94a730..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/title_bar_portrait.9.png b/packages/SystemUI/res/drawable-hdpi/title_bar_portrait.9.png
deleted file mode 100644
index da1b6371a5ad..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/title_bar_portrait.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notification_open.png b/packages/SystemUI/res/drawable-mdpi/ic_notification_open.png
index ba0ca7076afc..839c134a7598 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notification_open.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notification_open.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_airplane_off.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_airplane_off.png
deleted file mode 100644
index 6d8b92396985..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_airplane_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default.png
deleted file mode 100644
index 2ed5df45f853..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default_land.png
deleted file mode 100644
index c877f7255843..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_apps_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default_land.png
deleted file mode 100644
index 14d437e27588..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_brightness_low.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_brightness_low.png
deleted file mode 100644
index 91e1429e79ee..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_brightness_low.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_gps_on.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_gps_on.png
deleted file mode 100644
index 08d60d1cb1f1..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_gps_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default_land.png
deleted file mode 100644
index e5711ebedeea..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png
deleted file mode 100644
index c046f58e94ff..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png
deleted file mode 100644
index 6b72be2462ca..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png
deleted file mode 100644
index 540af65d9594..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png
deleted file mode 100644
index 268a9bf0379e..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_settings.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_settings.png
deleted file mode 100644
index 06e09e72a86d..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_settings.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_shadow.9.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_shadow.9.png
deleted file mode 100644
index 897d21677adf..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_off.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_off.png
deleted file mode 100644
index a11dabbaafd2..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_on.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_on.png
deleted file mode 100644
index 16215bd3618e..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_sound_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recent_overlay.png b/packages/SystemUI/res/drawable-mdpi/recent_overlay.png
deleted file mode 100644
index 33eabb217ba0..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/recent_overlay.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recent_rez_border.png b/packages/SystemUI/res/drawable-mdpi/recent_rez_border.png
deleted file mode 100644
index 5da42a3d9325..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/recent_rez_border.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/shade_handlebar.9.png b/packages/SystemUI/res/drawable-mdpi/shade_handlebar.9.png
deleted file mode 100644
index d9598ae26cc5..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/shade_handlebar.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/shade_header_background.9.png b/packages/SystemUI/res/drawable-mdpi/shade_header_background.9.png
deleted file mode 100644
index 761ef054209a..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/shade_header_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index d4dca3e8c7eb..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png
deleted file mode 100644
index eecdefb2ec64..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png b/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png
deleted file mode 100644
index 6f19bf4325a3..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/title_bar_portrait.9.png b/packages/SystemUI/res/drawable-mdpi/title_bar_portrait.9.png
deleted file mode 100644
index 9de832412586..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/title_bar_portrait.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/bg_scrim_notification.png b/packages/SystemUI/res/drawable-nodpi/bg_scrim_notification.png
deleted file mode 100644
index 4d5135eb0f53..000000000000
--- a/packages/SystemUI/res/drawable-nodpi/bg_scrim_notification.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/compat_mode_help_bg.png b/packages/SystemUI/res/drawable-nodpi/compat_mode_help_bg.png
index 59a70ff9765c..87d8c4154cee 100644
--- a/packages/SystemUI/res/drawable-nodpi/compat_mode_help_bg.png
+++ b/packages/SystemUI/res/drawable-nodpi/compat_mode_help_bg.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/notify_glow_back.png b/packages/SystemUI/res/drawable-nodpi/notify_glow_back.png
deleted file mode 100644
index 269049ed2072..000000000000
--- a/packages/SystemUI/res/drawable-nodpi/notify_glow_back.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/notify_item_glow_left.png b/packages/SystemUI/res/drawable-nodpi/notify_item_glow_left.png
deleted file mode 100644
index 0e8c25c8337a..000000000000
--- a/packages/SystemUI/res/drawable-nodpi/notify_item_glow_left.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/notify_item_glow_top.png b/packages/SystemUI/res/drawable-nodpi/notify_item_glow_top.png
deleted file mode 100644
index 536357afb1f5..000000000000
--- a/packages/SystemUI/res/drawable-nodpi/notify_item_glow_top.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/panel_notification.png b/packages/SystemUI/res/drawable-nodpi/panel_notification.png
deleted file mode 100644
index 275e492fa0be..000000000000
--- a/packages/SystemUI/res/drawable-nodpi/panel_notification.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index 004aee3ea06f..000000000000
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index d71738d76f5c..000000000000
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index 4394f925da6e..000000000000
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notification_open.png b/packages/SystemUI/res/drawable-xhdpi/ic_notification_open.png
new file mode 100644
index 000000000000..4f8c98711c90
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notification_open.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_airplane_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_airplane_off.png
deleted file mode 100644
index ed968c81773e..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_airplane_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default.png
deleted file mode 100644
index 5641b2b9816c..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default_land.png
deleted file mode 100644
index 1ea83fc9bd82..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_apps_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default_land.png
deleted file mode 100644
index dc085508975b..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_brightness_low.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_brightness_low.png
deleted file mode 100644
index 03885fa8b5ae..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_brightness_low.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_gps_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_gps_on.png
deleted file mode 100644
index 92e86c6cdaa2..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_gps_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default_land.png
deleted file mode 100644
index 94acf9a7d286..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default_land.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd.png
deleted file mode 100644
index 4fc936bf2f86..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd_off.png
deleted file mode 100644
index 27357ead6e20..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_notification_dnd_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_lanscape.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_lanscape.png
deleted file mode 100644
index 53c7094eed9a..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_lanscape.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_portrait.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_portrait.png
deleted file mode 100644
index a882b948faaa..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_rotate_off_portrait.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_settings.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_settings.png
deleted file mode 100644
index fdcf4092d775..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_settings.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_shadow.9.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_shadow.9.png
deleted file mode 100644
index 792bac4a167e..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_off.png
deleted file mode 100644
index 31b4663636d5..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_off.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_on.png
deleted file mode 100644
index 45b5bf33b5ba..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_sound_on.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png
deleted file mode 100644
index ffac512d95ec..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_in_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_inandout_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_1x.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_3g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_4g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_e.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_g.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png
deleted file mode 100644
index 48038f0b2951..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_out_h.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable/compat_mode_help_bg.png b/packages/SystemUI/res/drawable/compat_mode_help_bg.png
deleted file mode 100644
index 87d8c4154cee..000000000000
--- a/packages/SystemUI/res/drawable/compat_mode_help_bg.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
index 8c290425e31c..16008a32add7 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
@@ -32,8 +32,14 @@
android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
android:scaleType="center"
android:clickable="true"
- android:background="@drawable/recents_thumbnail_layers"
- />
+ android:background="@drawable/recents_thumbnail_bg"
+ android:foreground="@drawable/recents_thumbnail_overlay">
+ <ImageView android:id="@+id/app_thumbnail_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ />
+ </FrameLayout>
<ImageView android:id="@+id/app_icon"
android:layout_width="wrap_content"
@@ -45,6 +51,7 @@
android:maxWidth="@dimen/status_bar_recents_thumbnail_max_width"
android:maxHeight="@dimen/status_bar_recents_thumbnail_max_height"
android:adjustViewBounds="true"
+ android:visibility="invisible"
/>
<TextView android:id="@+id/app_label"
@@ -60,6 +67,7 @@
android:layout_marginLeft="@dimen/recents_thumbnail_bg_padding_left"
android:singleLine="true"
android:ellipsize="marquee"
+ android:visibility="invisible"
/>
<TextView android:id="@+id/app_description"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
index c705a699a5d0..c0fce713fd3b 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
@@ -32,8 +32,14 @@
android:clickable="true"
android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
android:scaleType="center"
- android:background="@drawable/recents_thumbnail_layers"
- />
+ android:background="@drawable/recents_thumbnail_bg"
+ android:foreground="@drawable/recents_thumbnail_overlay">
+ <ImageView android:id="@+id/app_thumbnail_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ />
+ </FrameLayout>
<ImageView android:id="@+id/app_icon"
android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar.xml b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
index a204f17bc6e0..125c87e02795 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
@@ -44,24 +44,23 @@
/>
<!-- navigation controls -->
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
- android:layout_width="80dip"
- android:layout_height="match_parent"
- android:src="@drawable/ic_sysbar_back"
- android:layout_alignParentLeft="true"
- systemui:keyCode="4"
- android:contentDescription="@string/accessibility_back"
- systemui:glowBackground="@drawable/ic_sysbar_highlight"
- />
<LinearLayout
android:id="@+id/navigationArea"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_toRightOf="@+id/back"
+ android:layout_alignParentLeft="true"
android:orientation="horizontal"
android:clipChildren="false"
android:clipToPadding="false"
>
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+ android:layout_width="80dip"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_back"
+ systemui:keyCode="4"
+ android:contentDescription="@string/accessibility_back"
+ systemui:glowBackground="@drawable/ic_sysbar_highlight"
+ />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
android:layout_width="80dip"
android:layout_height="match_parent"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
index 955d8aee1c0f..d2358592ca91 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
@@ -130,6 +130,7 @@
android:id="@+id/battery"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
+ android:paddingLeft="6dip"
/>
</LinearLayout>
</LinearLayout>
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
index 386ce30a01dc..530650887927 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
@@ -32,8 +32,14 @@
android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
android:scaleType="center"
android:clickable="true"
- android:background="@drawable/recents_thumbnail_layers"
- />
+ android:background="@drawable/recents_thumbnail_bg"
+ android:foreground="@drawable/recents_thumbnail_overlay">
+ <ImageView android:id="@+id/app_thumbnail_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ />
+ </FrameLayout>
<ImageView android:id="@+id/app_icon"
android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml
index 6732feeb7a38..fbca299677ac 100644
--- a/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/packages/SystemUI/res/layout/navigation_bar.xml
@@ -23,12 +23,12 @@
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
android:layout_height="match_parent"
android:layout_width="match_parent"
+ android:background="#FF000000"
>
<FrameLayout android:id="@+id/rot0"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:background="#FF000000"
>
<LinearLayout
@@ -37,6 +37,7 @@
android:orientation="horizontal"
android:clipChildren="false"
android:clipToPadding="false"
+ android:id="@+id/nav_buttons"
>
<!-- navigation controls -->
@@ -66,6 +67,7 @@
android:layout_height="match_parent"
android:src="@drawable/ic_sysbar_home"
systemui:keyCode="3"
+ systemui:keyRepeat="false"
android:layout_weight="0"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:contentDescription="@string/accessibility_home"
@@ -96,6 +98,51 @@
/>
</LinearLayout>
+ <!-- lights out layout to match exactly -->
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="horizontal"
+ android:id="@+id/lights_out"
+ android:visibility="gone"
+ >
+ <ImageView
+ android:layout_width="80dp"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="40dp"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:scaleType="center"
+ android:layout_weight="0"
+ />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:visibility="invisible"
+ />
+ <ImageView
+ android:layout_width="80dp"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_lights_out_dot_large"
+ android:scaleType="center"
+ android:layout_weight="0"
+ />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:visibility="invisible"
+ />
+ <ImageView
+ android:layout_width="80dp"
+ android:layout_marginRight="40dp"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:scaleType="center"
+ android:layout_weight="0"
+ />
+ </LinearLayout>
+
<View android:id="@+id/deadzone"
android:layout_height="@dimen/navigation_bar_deadzone_size"
android:layout_width="match_parent"
@@ -107,7 +154,6 @@
<FrameLayout android:id="@+id/rot90"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:background="#FF000000"
android:visibility="gone"
android:paddingTop="24dp"
>
@@ -118,6 +164,7 @@
android:orientation="vertical"
android:clipChildren="false"
android:clipToPadding="false"
+ android:id="@+id/nav_buttons"
>
<!-- navigation controls -->
@@ -128,6 +175,8 @@
systemui:keyCode="82"
android:layout_weight="0"
android:visibility="invisible"
+ android:contentDescription="@string/accessibility_menu"
+ systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
/>
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
android:layout_height="80dp"
@@ -148,6 +197,7 @@
android:layout_width="match_parent"
android:src="@drawable/ic_sysbar_home_land"
systemui:keyCode="3"
+ systemui:keyRepeat="false"
android:layout_weight="0"
android:contentDescription="@string/accessibility_home"
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
@@ -167,15 +217,56 @@
android:contentDescription="@string/accessibility_back"
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
/>
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+ <View
android:layout_height="40dp"
android:layout_width="match_parent"
- android:src="@drawable/ic_sysbar_menu_land"
- systemui:keyCode="82"
android:layout_weight="0"
android:visibility="invisible"
- android:contentDescription="@string/accessibility_menu"
- systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+ />
+ </LinearLayout>
+
+ <!-- lights out layout to match exactly -->
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:id="@+id/lights_out"
+ android:visibility="gone"
+ >
+ <ImageView
+ android:layout_height="80dp"
+ android:layout_marginTop="40dp"
+ android:layout_width="match_parent"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:scaleType="center"
+ android:layout_weight="0"
+ />
+ <View
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:layout_weight="1"
+ android:visibility="invisible"
+ />
+ <ImageView
+ android:layout_height="80dp"
+ android:layout_width="match_parent"
+ android:src="@drawable/ic_sysbar_lights_out_dot_large"
+ android:scaleType="center"
+ android:layout_weight="0"
+ />
+ <View
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:layout_weight="1"
+ android:visibility="invisible"
+ />
+ <ImageView
+ android:layout_height="80dp"
+ android:layout_marginBottom="40dp"
+ android:layout_width="match_parent"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:scaleType="center"
+ android:layout_weight="0"
/>
</LinearLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 583446fdaec3..e42d33b9f44c 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -27,8 +27,6 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
<skip />
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
<skip />
<!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
@@ -101,8 +99,7 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Onlangse programme"</string>
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -191,18 +188,12 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data gedeaktiveer"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data gedeaktiveer"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobieldata gedeaktiveer"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data gedeaktiveer"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Die gespesifiseerde datagebruiklimiet is bereik. "\n\n" Addisionele datagebruik kan lei tot diensverskafferkostes."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Heraktiveer data"</string>
<!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
<!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index a5bf5dd5fa94..5eda25127a04 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -27,8 +27,6 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
<skip />
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
<skip />
<!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
@@ -101,8 +99,7 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"የቅርብ ጊዜ ትግበራዎች"</string>
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -191,18 +188,12 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
+ <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_enable" msgid="7729772039208664606">"ውሂብ ድጋሚ አንቃ"</string>
<!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
<!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 877c8455d428..a3172685ec89 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"إظهار التنبيهات"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"إزالة"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"فحص"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي تنبيهات"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"التنبيهات"</string>
@@ -62,23 +60,21 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"تكبير/تصغير التوافق"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"عند تصميم تطبيق لشاشة أصغر، سيظهر عنصر تحكم في التكبير/التصغير بجوار الساعة."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"تم حفظ لقطة الشاشة إلى المعرض."</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"تعذر حفظ لقطة الشاشة. قد يكون التخزين الخارجي قيد الاستخدام."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"خيارات نقل الملفات عبر USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"تحميل كمشغل وسائط (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تحميل ككاميرا (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"تثبيت تطبيق Android File Transfer لـ Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"رجوع"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"الصفحة الرئيسية"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"الرئيسية"</string>
<string name="accessibility_menu" msgid="316839303324695949">"القائمة"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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_bluetooth_connected" msgid="2707027633242983370">"تم توصيل البلوتوث."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"تم فصل البلوتوث."</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"ليست هناك بطارية مركبة."</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>
@@ -99,9 +95,9 @@
<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_3g" msgid="8628562305003568260">"شبكة الجيل الثالث"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"شبكة 3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"شبكة الجيل الرابع"</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">"WiFi"</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"تم تمكين المبرقة الكاتبة."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"رنين مع الاهتزاز."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنين صامت."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"تم تعيين الموقع بواسطة GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 71efb4ea95c3..4bd8361b7223 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показване на известията"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Премахване"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Инспектиране"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Няма известия"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"В момента"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известия"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Промяна на мащаба за съвместимост"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Когато дадено приложение е създадено за по-малък екран, до часовника ще се покаже управление за промяна на мащаба."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Екранната снимка е запазена в галерията"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Екранната снимка не можа да бъде запазена. Възможно е външното хранилище да се използва."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Опции за пренос на файлове чрез USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Свързване като медиен плейър (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Свързване като камера (PTP)"</string>
@@ -71,18 +68,17 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Начало"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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_bluetooth_connected" msgid="2707027633242983370">"Bluetooth се свърза."</string>
- <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth се изключи."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth е включен."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth е изключен."</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_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>
@@ -113,28 +109,18 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Местоположението е зададено от GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 30198b65296e..a1a6225fb46b 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notificacions"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Elimina"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecciona"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Cap notificació"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continu"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacions"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitat"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quan una aplicació s\'hagi dissenyat per a una pantalla més petita, apareixerà un control de zoom al costat del rellotge."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla desada a la galeria"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"No s\'ha pogut desar la captura de pantalla. És possible que l\'emmagatzematge extern estigui en ús."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcions transf. fitxers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Munta com a reproductor multimèdia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Munta com a càmera (PTP)"</string>
@@ -71,70 +68,61 @@
<string name="accessibility_back" msgid="567011538994429120">"Enrere"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Pàgina d\'inici"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'introducció."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicacions recents"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'entrada."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botó de zoom de compatibilitat."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Amplia menys com més gran sigui la pantalla."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connectat."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth desconnectat."</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"No hi ha bateria"</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateria: una barra"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"No hi ha bateria."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateria: una barra."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateria: dues barres."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateria: tres barres."</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateria completa."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateria carregada."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"No hi ha senyal de telèfon."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Senyal de telèfon: una barra"</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Senyal de telèfon: dues barres."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Senyal de telèfon: tres barres."</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Senyal de telèfon: completa."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Senyal de telèfon: complet."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Senyal de dades: no n\'hi ha"</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Senyal de dades: una barra."</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Senyal de dades: dos barres."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Senyal de dades: dues barres."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Senyal de dades: tres barres."</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Senyal de dades: completa."</string>
- <string name="accessibility_no_wifi" msgid="4017628918351949575">"Senyal Wi-Fi: no n\'hi ha."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Senyal Wi-Fi: un barra."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Senyal de dades: complet."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Senyal Wi-Fi: no n\'hi ha"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Senyal Wi-Fi: una barra."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Senyal Wi-Fi: dues barres."</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Senyal Wi-Fi: tres barres."</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Senyal Wi-Fi: completa."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Senyal Wi-Fi: complet."</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">"Vora"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"No hi ha cap targeta SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Connexió Bluetooth mitjançant dispositiu portàtil"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode d\'avió"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria: <xliff:g id="NUMBER">%d</xliff:g>%."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode d\'avió."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Botó Configuració."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Botó de notificacions."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Elimina la notificació."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"S\'està adquirint el GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletip activat."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibració del so de trucada."</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"So de trucada en silenci."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Mode vibració."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dades 2G-3G desactivades"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dades 4G desactivades"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dades mòbils desactivades"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dades desactivades"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"S\'ha assolit el límit d\'ús de dades especificat."\n\n"Si s\'utilitzen més dades, l\'operador hi podria aplicar càrrecs."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Torna a activar les dades"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No hi ha connexió a Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: connectada"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"S\'està cercant un GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"S\'ha establert la ubicació per GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index ecd07e08bb66..543bb9eca9b2 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobrazit upozornění"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Odebrat"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Zkontrolovat"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žádná oznámení"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Probíhající"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Oznámení"</string>
@@ -62,17 +60,15 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilní přiblížení"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Pokud je aplikace navržena pro menší obrazovku, zobrazí se vedle hodin ovládací prvek přiblížení."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímek obrazovky byl uložen do Galerie"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Snímek obrazovky se nepodařilo uložit. Je možné, že se externí úložiště právě používá."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti přenosu souborů pomocí rozhraní USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Připojit jako přehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Připojit jako fotoaparát (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Instalovat aplikaci Android File Transfer pro Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Zpět"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Domovská stránka"</string>
- <string name="accessibility_menu" msgid="316839303324695949">"Nabídka"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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_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>
@@ -100,41 +96,33 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Plný signál sítě Wi-Fi."</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_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Žádná karta SIM."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Sdílené datové připojení prostřednictvím Bluetooth."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering přes Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim V letadle."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterie <xliff:g id="NUMBER">%d</xliff:g> %."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Tlačítko Nastavení."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Tlačítko upozornění."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odebrat oznámení."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odebrat oznámení"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS je povoleno."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Zaměřování GPS."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhraní TeleTypewriter je povoleno."</string>
+ <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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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" 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>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: připojeno"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhledávání satelitů GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavena pomocí systému GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index a40959bc57db..4753500a2127 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis meddelelser"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Fjern"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspicer"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen meddelelser"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelelser"</string>
@@ -62,8 +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>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke gemme screenshot. 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>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Tilbage"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Seneste applikationer"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string>
@@ -117,24 +113,14 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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="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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Placeringen er angivet ved hjælp af GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index bce887e398d3..2fbd38b1b6a5 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Benachrichtigungen zeigen"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Entfernen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Prüfen"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Keine Benachrichtigungen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktuell"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Benachrichtigungen"</string>
@@ -62,23 +60,21 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitätszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wenn eine App für einen kleineren Bildschirm ausgelegt ist, wird ein Zoom-Steuerelement neben der Uhr angezeigt."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot in Galerie gespeichert"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Screenshot konnte nicht gespeichert werden. Möglicherweise wird der externe Speicher gerade verwendet."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-Dateiübertragungsoptionen"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Als Medienplayer (MTP) bereitstellen"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Als Kamera (PTP) bereitstellen"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"App \"Android File Transfer\" für Mac installieren"</string>
<string name="accessibility_back" msgid="567011538994429120">"Zurück"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Startseite"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Startbildschirm"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Zuletzt verwendete Anwendungen"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Schaltfläche für Kompatibilitätszoom"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom auf einen größeren Bildschirm"</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Mit Bluetooth verbunden"</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-Verbindung getrennt"</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"Kein Akku"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Akku leer"</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akku - ein Balken"</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akku - zwei Balken"</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akku - drei Balken"</string>
@@ -100,7 +96,7 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Volle WLAN-Signalstärke"</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>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Schreibtelefonie aktiviert"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Klingeltonmodus \"Vibration\""</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Klingelton lautlos"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-Daten deaktiviert"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile Daten deaktiviert"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Daten deaktiviert"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Das für die Datennutzung festgelegte Limit wurde erreicht."\n\n"Eine weitere Datennutzung kann mit zusätzlichen Kosten vonseiten des Mobilfunkanbieters verbunden sein."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Daten erneut aktivieren"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Standort durch GPS festgelegt"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index fb472f8e90e3..f29619d26ad6 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Εμφάνιση ειδοποιήσεων"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Κατάργηση"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Επιθεώρηση"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Δεν υπάρχουν ειδοποιήσεις"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Εν εξελίξει"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ειδοποιήσεις"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Ζουμ για συμβατότητα"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Όταν μια εφαρμογή έχει σχεδιαστεί για προβολή σε μικρότερη οθόνη, δίπλα από το ρολόι θα εμφανιστεί ένα στοιχείο ελέγχου ζουμ."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Το στιγμιότυπο οθόνης αποθηκεύτηκε στη συλλογή"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Δεν ήταν δυνατή η αποθήκευση στιγμιότυπου οθόνης. Μπορεί να χρησιμοποιείται εξωτερικός χώρος αποθήκευσης."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Επιλογές μεταφοράς αρχείων μέσω USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Προσάρτηση ως μονάδας αναπαραγωγής μέσων (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Πίσω"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -108,7 +104,9 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Δεν υπάρχει SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Σύνδεση Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Λειτουργία πτήσης."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Μπαταρία <xliff:g id="NUMBER">%d</xliff:g> %."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Κουμπί ρυθμίσεων."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Κουμπί ειδοοποιήσεων"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Κατάργηση ειδοποίησης."</string>
@@ -117,24 +115,14 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Ρύθμιση τοποθεσίας με GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 12a4d9a0f434..b2caea9abc07 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Show notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Remove"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspect"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibility Zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"When an app was designed for a smaller screen, a zoom control will appear by the clock."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot saved to Gallery"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Could not save screenshot. External storage may be in use."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Back"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Recent applications"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile data disabled"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data disabled"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"The specified data usage limit has been reached."\n\n"Additional data use may incur operator charges."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Reenable data"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 13a60166cf26..898b124116e0 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eliminar"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspeccionar"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No hay notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continuo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Cuando una aplicación fue diseñada para una pantalla más pequeña, aparece un control de zoom junto al reloj."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la Galería"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"No se pudo guardar la captura de pantalla. Es posible que el almacenamiento externo esté en uso."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atrás"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página principal"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaciones recientes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -83,7 +79,7 @@
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Dos barras de batería"</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Tres barras de batería"</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"Batería completa"</string>
- <string name="accessibility_no_phone" msgid="4894708937052611281">"No hay teléfono."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Sin teléfono"</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Una barra de teléfono"</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dos barras de teléfono"</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tres barras de teléfono"</string>
@@ -93,48 +89,40 @@
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dos barras de datos"</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tres barras de datos"</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Señal de datos completa"</string>
- <string name="accessibility_no_wifi" msgid="4017628918351949575">"No hay WiFi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Una barra de WiFi"</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dos barras de WiFi"</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tres barras de WiFi"</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Señal de WiFi completa"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"No hay Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Una barra de Wi-Fi"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dos barras de Wi-Fi"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tres barras de Wi-Fi"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Señal de Wi-Fi completa"</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_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Anclaje a red Bluetooth."</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Batería <xliff:g id="NUMBER">%d</xliff:g> por ciento"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avión"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Botón de configuración"</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Botón de notificaciones"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquisición de GPS"</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter habilitado"</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Timbre vibrar"</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre silencio"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Timbre en vibración"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre en silencio"</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos de 4G inhabilitados"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Se inhabilitaron los datos móviles"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Datos inhabilitados"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Se ha alcanzado el límite de uso de datos especificado."\n\n"El uso de datos adicionales puede conllevar cargos para el proveedor."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Volver a habilitar datos"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sin conexión a Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"La ubicación se estableció por GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3cebaa7d9406..8816826a55b5 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eliminar"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspeccionar"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No tienes notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Entrante"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si la aplicación se ha diseñado para una pantalla más pequeña, aparecerá un control de zoom junto al reloj."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la galería"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"No se ha podido guardar la captura de pantalla. Es posible que el almacenamiento externo esté en uso."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Atrás"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Inicio"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaciones recientes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de introducción"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -84,23 +80,23 @@
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Tres barras de batería"</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"Batería completa"</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Sin teléfono"</string>
- <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Una barra de teléfono"</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dos barras de teléfono"</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tres barras de teléfono"</string>
- <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Señal de teléfono completa"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Una barra de cobertura"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dos barras de cobertura"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tres barras de cobertura"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Cobertura al máximo"</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Sin datos"</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Una barra de datos"</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dos barras de datos"</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tres barras de datos"</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Señal de datos completa"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Señal de datos al máximo"</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Sin redes Wi-Fi"</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Una barra de Wi-Fi"</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dos barras de Wi-Fi"</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tres barras de Wi-Fi"</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Señal de Wi-Fi completa"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Señal de Wi-Fi al máximo"</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.5 G"</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">"Tipo Edge"</string>
@@ -113,28 +109,18 @@
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Botón de notificaciones"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminar notificación"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Obteniendo GPS..."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Obteniendo ubicación..."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletipo habilitado"</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Timbre en vibración"</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre en silencio"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Modo vibración"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Modo silencio"</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos 2G-3G inhabilitados"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos 4G inhabilitados"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Datos móviles inhabilitados"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Datos inhabilitados"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Se ha alcanzado el límite de uso de datos especificado."\n\n"Se pueden aplicar cargos adicionales si utilizas más datos."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Volver a habilitar los datos"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sin conexión a Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Con conexión Wi-Fi"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Ubicación definida por GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 909867ed53a3..6634435a16cf 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"نمایش اعلان ها"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"حذف"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"بازرسی"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"اعلانی موجود نیست"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"در حال انجام"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"اعلان ها"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"بزرگنمایی سازگاری"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"اگر یک برنامه برای صفحه کوچک تری طراحی شده باشد، یک کنترل بزرگنمایی توسط ساعت نشان داده می شود."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"تصویر از صفحه در گالری ذخیره شد"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"نمی‌تواند عکس صفحه را ذخیره کند. ممکن است محل ذخیره خارجی در حال استفاده باشد."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"گزینه های انتقال فایل USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"نصب به عنوان دستگاه پخش رسانه (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تصب به عنوان دوربین (PTP)"</string>
@@ -71,11 +68,10 @@
<string name="accessibility_back" msgid="567011538994429120">"برگشت"</string>
<string name="accessibility_home" msgid="8217216074895377641">"صفحه اصلی"</string>
<string name="accessibility_menu" msgid="316839303324695949">"منو"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -88,7 +84,7 @@
<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_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>
@@ -106,35 +102,25 @@
<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">"بدون سیم کارت."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"اتصال اینترنت با بلوتوث تلفن همراه"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"اتصال اینترنت با بلوتوث تلفن همراه."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"حالت هواپیما."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"باتری <xliff:g id="NUMBER">%d</xliff:g> درصد."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"دکمه تنظیمات."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"دکمه اعلان ها."</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_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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"مکان تنظیم شده توسط GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index d58fcd4d49d0..f9f75d5b78f9 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Näytä ilmoitukset"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Poista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Tarkasta"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ei ilmoituksia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Käynnissä olevat"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ilmoitukset"</string>
@@ -62,19 +60,17 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Yhteensopivuustilan zoomaus"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jos sovellus on suunniteltu pienemmälle näytölle, kellon viereen tulee näkyviin zoomaussäädin."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Kuvakaappaus on tallennettu galleriaan"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kuvakaappauksen tallennus epäonnistui. Ulkoinen tallennustila voi olla käytössä."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-tiedostonsiirtoasetukset"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Käytä mediasoittimena (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Käytä kamerana (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Asenna Android File Transfer -sovellus Macille"</string>
<string name="accessibility_back" msgid="567011538994429120">"Takaisin"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Aloitusruutu"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Aloituspainike"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Valikko"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vaihda syöttötapapainiketta."</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuus-zoomauspainike."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Viimeaikaiset sovellukset"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Syöttötavan vaihtopainike."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuuszoomaus-painike."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoomaa pienemmältä suuremmalle ruudulle."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth yhdistetty."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-yhteys katkaistu."</string>
@@ -83,16 +79,16 @@
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akun virta - kaksi palkkia."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akun virta - kolme palkkia."</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"Akku täynnä."</string>
- <string name="accessibility_no_phone" msgid="4894708937052611281">"Katvealueella."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Ei puhelinverkkoyhteyttä."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Puhelinverkkosignaali - yksi palkki."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Puhelinverkkosignaali - kaksi palkkia."</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Puhelinverkkosignaali - kolme palkkia."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Vahva puhelinverkkosignaali."</string>
- <string name="accessibility_no_data" msgid="4791966295096867555">"Ei tietoja."</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Datasignaali - yksi palkki"</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Datasignaali - kaksi palkkia"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ei datasignaalia."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Datasignaali - yksi palkki."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Datasignaali - kaksi palkkia."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Datasignaali - kolme palkkia"</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Vahva datasignaali."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Vahva kuuluvuus."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Ei wifi-yhteyttä."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wifi-signaali - yksi palkki."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wifi-signaali - kaksi palkkia."</string>
@@ -106,35 +102,25 @@
<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">"Ei SIM-korttia."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetyhteyden jakaminen Bluetoothin kautta"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetyhteyden jakaminen Bluetoothin kautta."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akun virta <xliff:g id="NUMBER">%d</xliff:g> prosenttia."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Asetukset-painike."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Ilmoitukset-painike."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Poista ilmoitus."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS käytössä."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Haetaan GPS-signaalia."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter käytössä."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Tekstipuhelin käytössä."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Soittoääni: värinä."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Soittoääni: äänetön."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-tiedonsiirto pois käytöstä"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-tiedonsiirto pois käytöstä"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiilitiedonsiirto pois käytöstä"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Tiedonsiirto pois käytöstä"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Asetettu tiedonsiirtoraja on täynnä."\n\n"Operaattori voi veloittaa lisätiedonsiirrosta."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Ota tiedonsiirto käyttöön"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ei internetyhteyttä"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wifi yhdistetty"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Haetaan GPS-yhteyttä"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Sijainti määritetty GPS:n avulla"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index a5475f67f815..b97ac2fbeeca 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afficher les notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Supprimer"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecter"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilité"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si une application a été conçue pour un écran plus petit, une commande de zoom s\'affiche à côté de l\'horloge."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Capture d\'écran enregistrée dans la galerie."</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Impossible d\'enregistrer la capture d\'écran. Il est possible que le périphérique de stockage externe soit en cours d\'utilisation."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Installer en tant que lecteur multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Installer en tant qu\'appareil photo (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Retour"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Accueil"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Applications récentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string>
@@ -100,7 +96,7 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Signal Wi-Fi excellent"</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">"3G+"</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>
@@ -108,7 +104,9 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Aucune carte SIM"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Partage de connexion Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode Avion"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Batterie : <xliff:g id="NUMBER">%d</xliff:g> %"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Bouton \"Paramètres\""</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Bouton \"Notifications\""</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Supprimer la notification"</string>
@@ -117,24 +115,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Téléscripteur activé"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Sonnerie en mode vibreur"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonnerie en mode silencieux"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G désactivées"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Service Internet mobile désactivé"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Données désactivées"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Vous avez atteint la limite d\'utilisation de données spécifiée."\n\n"L\'utilisation supplémentaire de données peut entraîner la facturation de frais par votre opérateur."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Réactiver connexion données"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Aucune connexion"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Position définie par GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index a46ea4bfb26b..73804c0064dd 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -24,9 +24,7 @@
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Ne uznemiravaj"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Prikaži obavijesti"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Ukloni"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Pregledati"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Provjeri"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bez obavijesti"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"U tijeku"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obavijesti"</string>
@@ -62,40 +60,38 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilni zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kada je aplikacija dizajnirana za manji zaslon, kontrole zumiranja prikazuju se pored sata."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snimak zaslona spremljen u Galeriju"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ne mogu spremiti snimak zaslona. Možda se upotrebljava vanjska pohrana."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prijenosa datoteka"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Učitaj kao media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Učitaj kao fotoaparat (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Instalacija aplikacije Android File Transfer za Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Natrag"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Početna stranica"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Početna"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Izbornik"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nedavne aplikacije"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za promjenu načina unosa."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb za kompatibilnost zumiranja."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zumiranje manjeg zaslona na veći."</string>
<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 jedan stupac."</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterija dva stupca."</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_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 dva stupca."</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefonski signal tri stupca."</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_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 stupca."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Podatkovni signal tri linije."</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 dva stupca."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi signal dvije linije."</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>
@@ -111,30 +107,20 @@
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterija <xliff:g id="NUMBER">%d</xliff:g> posto."</string>
<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 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_acquiring" msgid="8959333351058967158">"Dohvaćanje GPS-a."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter 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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Traženje GPS-a"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokaciju utvrdio GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 7a75cfe46710..1cc61974f698 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Értesítések megjelenítése"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eltávolítás"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Vizsgálat"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nincs értesítés"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Folyamatban van"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Értesítések"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitás -- nagyítás/kicsinyítés"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ha egy alkalmazást kisebb képernyőre terveztek, akkor a nagyítás/kicsinyítés vezérlője az óra mellett jelenik meg."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Képernyőkép mentve a galériába"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nem lehet menteni a képernyőképet. Lehet, hogy a külső tároló használatban van."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB-fájlátvitel beállításai"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Csatlakoztatás médialejátszóként (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Csatlakoztatás kameraként (PTP)"</string>
@@ -71,8 +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>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"A legújabb 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>
@@ -90,14 +86,14 @@
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonjel megtelt."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Nincsenek adatok."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Adat egy sáv."</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Adatok két sáv."</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Adatok három sáv."</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Adatjel megtelt."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Adat két sáv."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Adat három sáv."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Adatjel teljes."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Nincs Wi-Fi."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi egy sáv."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi két sáv."</string>
<string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi három sáv."</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi jel megtelt."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi jel teljes."</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>
@@ -114,27 +110,17 @@
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Értesítés eltávolítása."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS engedélyezve."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS lekérése."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Távgépíró engedélyezve."</string>
+ <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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index bbcd9e945554..7a4c8457c989 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tampilkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Hapus"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Memeriksa"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -62,8 +60,7 @@
<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>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak dapat menyimpan tangkapan layar. Penyimpan eksternal mungkin 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>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Beranda"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter diaktifkan."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dinonaktifkan"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dinonaktifkan"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data seluler dinonaktifkan"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data dinonaktifkan"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Telah mencapai batas penggunaan data yang ditetapkan."\n\n"Penggunaan data tambahan mungkin akan dikenai biaya operator."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Aktifkan ulang data"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tidak ada sambungan internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tersambung"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Menelusuri GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi yang disetel oleh GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 8edea16cf535..c7ef3f6c94ad 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notifiche"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Rimuovi"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Esamina"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string>
@@ -86,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."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nessun dato presente."</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>
@@ -106,7 +104,9 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nessuna SIM presente."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modalità aereo."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Batteria: <xliff:g id="NUMBER">%d</xliff:g>%."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Pulsante Impostazioni."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Pulsante per le notifiche."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Rimuovi la notifica."</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 disabilati"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dati disabilitati"</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 646100a37b7c..b51c919b95cf 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -25,10 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"הצג התראות"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"הסר"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"בדיקה"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string>
- <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתבצע"</string>
+ <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>
@@ -42,7 +40,7 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"השתק"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"אוטומטי"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"התראות"</string>
- <string name="recent_tasks_title" msgid="3691764623638127888">"אחרונות"</string>
+ <string name="recent_tasks_title" msgid="3691764623638127888">"נוצרו לאחרונה"</string>
<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>
@@ -62,18 +60,16 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"שינוי מרחק מתצוגה לתאימות"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"כאשר יישום מיועד למסך קטן יותר, פקד של מרחק מתצוגה יופיע ליד השעון."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"צילום המסך נשמר בגלריה"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"אין אפשרות לשמור את צילום המסך. ייתכן שנעשה שימוש באמצעי אחסון חיצוני."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"אפשרויות העברת קבצים ב-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"טען כנגן מדיה (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"טען כמצלמה (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"התקן את יישום העברת הקבצים של Android עבור Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"הקודם"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"דף הבית"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"בית"</string>
<string name="accessibility_menu" msgid="316839303324695949">"תפריט"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"החלף לחצן של שיטת קלט."</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>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth מחובר."</string>
@@ -83,7 +79,7 @@
<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>
@@ -108,33 +104,23 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"אין כרטיס SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"שיתוף אינטרנט בין ניידים של Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"מצב טיסה"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"סוללה <xliff:g id="NUMBER">%d</xliff:g> אחוזים."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string>
<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_acquiring" msgid="8959333351058967158">"רכישת GPS."</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">"TeleTypewriter מופעל"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"צלצול ורטט."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"צלצול שקט."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"מיקום מוגדר על ידי GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 91b12e41a543..d29d65764dae 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"通知を表示"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"削除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"検査"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"通知なし"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"実行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"互換ズーム"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"より小型の画面向けのアプリの場合は、ズームコントロールが時計のそばに表示されます。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"スクリーンショットがギャラリーに保存されました"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"スクリーンショットを保存できませんでした。外部ストレージが使用中の可能性があります。"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USBファイル転送オプション"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"メディアプレーヤー(MTP)としてマウント"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"カメラ(PTP)としてマウント"</string>
@@ -71,33 +68,32 @@
<string name="accessibility_back" msgid="567011538994429120">"戻る"</string>
<string name="accessibility_home" msgid="8217216074895377641">"ホーム"</string>
<string name="accessibility_menu" msgid="316839303324695949">"メニュー"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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_bluetooth_connected" msgid="2707027633242983370">"Bluetoothに接続済みです。"</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>
- <string name="accessibility_no_battery" msgid="358343022352820946">"電池: なし"</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"電池: レベル1"</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"電池: レベル2"</string>
- <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"電池: レベル3"</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">"電波状態: レベル1"</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電波状態: レベル2"</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電波状態: レベル3"</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">"データ信号: レベル1"</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"データ信号: レベル2"</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"データ信号: レベル3"</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信号: レベル1"</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi信号: レベル2"</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi信号: レベル3"</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi信号: フル"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"電池残量:なし"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"電池残量:レベル1"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"電池残量:レベル2"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"電池残量:レベル3"</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">"電波状態:レベル1"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電波状態:レベル2"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電波状態:レベル3"</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">"データ信号:レベル1"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"データ信号:レベル2"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"データ信号:レベル3"</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電波:レベル1"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi電波:レベル2"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi電波:レベル3"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi電波:フル"</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>
@@ -108,33 +104,25 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIMがありません。"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothテザリング。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"機内モード。"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"電池: <xliff:g id="NUMBER">%d</xliff:g>パーセント"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<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_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_ringer_vibrate" msgid="666585363364155055">"バイブレーション着信。"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"マナーモード着信。"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPSにより現在地が設定されました"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 1da52e5a12ba..202f35181f64 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -24,9 +24,7 @@
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"응답 거부"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"알림 표시"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"삭제"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"조사"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"검사"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"알림"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"호환성 확대/축소"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"앱이 작은 화면에 맞도록 설계된 경우 시계 옆에 확대/축소 컨트롤이 표시됩니다."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"캡쳐화면이 갤러리에 저장되었습니다."</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"캡쳐 화면을 저장할 수 없습니다. 외부 저장소를 사용 중인 것 같습니다."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 파일 전송 옵션"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"미디어 플레이어로 마운트(MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"카메라로 마운트(PTP)"</string>
@@ -71,19 +68,18 @@
<string name="accessibility_back" msgid="567011538994429120">"뒤로"</string>
<string name="accessibility_home" msgid="8217216074895377641">"홈"</string>
<string name="accessibility_menu" msgid="316839303324695949">"메뉴"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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">"블루투스가 연결되었습니다."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"블루투스 연결이 끊어졌습니다."</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"배터리 없음"</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>
@@ -93,7 +89,7 @@
<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_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>
@@ -105,36 +101,26 @@
<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">"WiFi"</string>
- <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM 없음"</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"블루투스 테더링"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"비행기 모드"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM이 없습니다."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"블루투스 테더링입니다."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"비행기 모드입니다."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"배터리 <xliff:g id="NUMBER">%d</xliff:g>퍼센트"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"설정 버튼"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"알림 버튼"</string>
+ <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_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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS 검색 중"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS에서 위치 설정"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 4c7b213a8c01..2dd1716fa2c9 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rodyti pranešimus"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Pašalinti"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Tikrinti"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nėra įspėjimų"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Vykstantys"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Įspėjimai"</string>
@@ -62,17 +60,15 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Suderinamumo mastelio keitimas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kai programa bus pritaikyta mažesniam ekranui, mastelio keitimo valdiklis bus parodytas šalia laikrodžio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrano kopija išsaugota galerijoje"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nepavyko išsaugoti ekrano kopijos. Gali būti naudojama išorinė atmintis."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB failo perdavimo parinktys"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos grotuvą (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Įmontuoti kaip fotoaparatą (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Įdiegti „Mac“ skirtą „Android“ failų perd. progr."</string>
<string name="accessibility_back" msgid="567011538994429120">"Atgal"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Pagrindinis puslapis"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Pagrindinis"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Naujausios programos"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Perjungti įvesties metodo mygtuką."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Suderinamumo priartinimo mygtukas."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Padidinti ekraną."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"„TeleTypewriter“ įgalinta."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibracija skambinant."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Skambutis tylus."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G duomenys neleidžiami"</string>
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Ieškoma GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS nustatyta vieta"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index be9f7f5a2857..ebd4e1bf4786 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Notīrīt"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Netraucēt"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rādīt paziņojumus"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Noņemšana"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Noņemt"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Apskatīt"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nav paziņojumu"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Notiekošs"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Paziņojumi"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Saderības tālummaiņa"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ja lietotne ir paredzēta mazākam ekrānam, blakus pulkstenim tiks parādīta tālummaiņas vadīkla."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrānuzņēmums ir saglabāts galerijā."</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nevarēja saglabāt ekrānuzņēmumu. Iespējams, tiek izmantota ārējā atmiņa."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB failu pārsūtīšanas opcijas"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pievienot kā multivides atskaņotāju (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pievienot kā kameru (PTP)"</string>
@@ -71,32 +68,31 @@
<string name="accessibility_back" msgid="567011538994429120">"Atpakaļ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Sākums"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Izvēlne"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga"</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga"</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku"</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Jaunākās lietojumprogrammas"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth savienojums ir izveidots."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth savienojums ir pārtraukts."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Nav akumulatora."</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akumulators: viena josla"</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akumulators: divas joslas"</string>
- <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akumulators: trīs joslas"</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"Pilna piekļuve akumulatoram"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akumulators: viena josla."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akumulators: divas joslas."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akumulators: trīs joslas."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Akumulators ir pilnīgi uzlādēts."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Nav tālruņa."</string>
- <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Tālrunis: viena josla"</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Tālrunis: divas joslas"</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tālrunis: trīs joslas"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Tālrunis: viena josla."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Tālrunis: divas joslas."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tālrunis: trīs joslas."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Pilna piekļuve tālruņa signālam"</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Nav datu."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Dati: viena josla"</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dati: divas joslas"</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dati: trīs joslas"</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Pilna piekļuve datu signālam"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dati: divas joslas."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dati: trīs joslas."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Pilna piekļuve datu signālam."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Nav Wi-Fi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: viena josla"</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: divas joslas"</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: trīs joslas"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: viena josla."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: divas joslas."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: trīs joslas."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Pilna piekļuve Wi-Fi signālam"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
@@ -106,35 +102,25 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nav SIM kartes."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth piesaiste"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lidmašīnas režīms"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth piesaiste."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lidmašīnas režīms."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Akumulators: <xliff:g id="NUMBER">%d</xliff:g> procenti"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Iestatījumu poga"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Paziņojumu poga"</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Noņemt paziņojumu"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Iestatījumu poga."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Paziņojumu poga."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Noņemt paziņojumu."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ir iespējots."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS iegūšana"</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS iegūšana."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletaips ir iespējots."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvana signāls — vibrācija"</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvana signāls — kluss"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvana signāls — vibrācija."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvana signāls — kluss."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G dati atspējoti"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G dati atspējoti"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilie dati atspējoti"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dati atspējoti"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Norādītais datu izmantošanas ierobežojums ir sasniegts."\n\n"Izmantojot papildu datus, sakaru operators var no jums iekasēt maksu."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Atkārtoti iespējot datus"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nav interneta sav."</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Izv. sav. ar Wi-Fi"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Notiek GPS meklēšana..."</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS iestatītā atrašanās vieta"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 745e2832cb70..a7beb09dc90c 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tunjukkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Alih keluar"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Periksa"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -62,18 +60,16 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Keserasian Zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Apabila apl direka untuk skrin yang lebih kecil, kawalan zum akan muncul di tepi jam."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan skrin disimpan ke Galeri"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak boleh menyimpan tangkapan skrin. Storan luaran mungkin sedang digunakan."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Pasang aplikasi Pemindahan Fail Android untuk Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Laman Utama"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Rumah"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah masukan."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplikasi terbaru"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth disambungkan."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dilumpuhkan"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dilumpuhkan"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data mudah alih dilumpuhkan"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data dilumpuhkan"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Had penggunaan data yang ditentukan telah dicapai."\n\n"Penggunaan data tambahan mungkin dikenakan caj oleh pembawa."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Dayakan semula data"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tiada smbg Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Mencari GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi ditetapkan oleh GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index d3d86e7f6728..ae65b6cf4e6d 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis varslinger"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Fjern"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspiser"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen varslinger"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktiviteter"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Varslinger"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitets-zooming"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er utformet for en mindre skjerm, vises det en zoomkontroll ved klokken."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skjermdump ble lagret i galleriet"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke lagre skjermdump. Det kan hende at ekstern lagring er i bruk."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Altern. for USB-filoverføring"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Sett inn som mediespiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Sett inn som kamera (PTP)"</string>
@@ -71,18 +68,17 @@
<string name="accessibility_back" msgid="567011538994429120">"Tilbake"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nyere applikasjoner"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoomknapp for kompatibilitet."</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skjerm."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom fra mindre til større skjerm."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth er tilkoblet."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth frakoblet."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Uten batteri."</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batteri – én stolpe."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batteri – to stolper."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batteri – tre stolper."</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"Batteri er fullt."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batteriet er fullt."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Ingen telefon."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon – én stolpe."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon – to stolper."</string>
@@ -96,45 +92,35 @@
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Ingen Wi-Fi."</string>
<string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi – én stolpe."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi – to stolper."</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi – tre stolper."</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"WiFi-signal er fullt."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi – tre stolper."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi-signal er fullt."</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_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
- <string name="accessibility_no_sim" msgid="8274017118472455155">"Uten SIM"</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tilknytning"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Uten SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-deling."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flymodus."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri – <xliff:g id="NUMBER">%d</xliff:g> prosent."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Innstillinger-knapp."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Varslingsknapp."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knapp for varslinger"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Fjern varsling."</string>
- <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktivert."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS er aktivert."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Henting av GPS-signal."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktivert."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter er aktivert."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibreringsmodus."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Stille modus."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktivert"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktivert"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata er deaktivert"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data deaktivert"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Den angitte databruksgrensen er nådd."\n\n"Ytterligere databruk kan medføre høyere kostnader hos leverandøren."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Aktiver data på nytt"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen Internett-forbindelse"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tilkoblet"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Søker etter GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Posisjon angitt av GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 1c99563c477f..8bc011cfd36a 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen weergeven"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Verwijderen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecteren"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen meldingen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibiliteitszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop weergegeven."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Schermafbeelding is opgeslagen in de galerij"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kan schermafbeelding niet opslaan. Mogelijk is de externe opslag in gebruik."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opties voor USB-bestandsoverdracht"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Koppelen als mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Koppelen als camera (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startpagina"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Recente apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knop voor compatibiliteitszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kleiner scherm uitzoomen naar groter scherm."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ingeschakeld."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Belsoftware trilt."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Belsoftware stil."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-gegevens uitgeschakeld"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-gegevens uitgeschakeld"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiele gegevens uitgeschakeld"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Gegevens uitgeschakeld"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"De opgegeven limiet voor gegevensgebruik is bereikt."\n\n"Aanvullend gegevensgebruik kan leiden tot providerkosten."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Gegevens opnieuw inschakelen"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Geen internetverbinding"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Verbonden via Wi-Fi"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Zoeken naar GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Locatie bepaald met GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 990166a466d5..495288cc4a6f 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaż powiadomienia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Usuń"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Sprawdź"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Brak powiadomień"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Powiększenie w trybie zgodności"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jeśli aplikacja została przystosowana do mniejszego ekranu, obok zegara zostanie wyświetlony element sterujący powiększeniem."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Zrzut ekranu został zapisany w galerii."</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nie można zapisać zrzutu ekranu. Pamięć zewnętrzna może być używana."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB – opcje przesyłania plików"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Podłącz jako odtwarzacz multimedialny (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Podłącz jako aparat (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Wróć"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ekran główny"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Dalekopis (TTY) włączony."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Dzwonek z wibracjami."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Dzwonek wyciszony."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string>
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja ustawiona według GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 60f1c334710b..706be485b04c 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Remover"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecionar"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em curso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibilidade de zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Sempre que uma aplicação tiver sido concebida para ecrãs mais pequenos, aparecerá um controlo de zoom junto ao relógio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecrã guardada na Galeria"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Não foi possível guardar a captura de ecrã. O armazenamento externo poderá estar a ser utilizado."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opções de transm. de fich. USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montar como leitor de multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como câmara (PTP)"</string>
@@ -71,14 +68,13 @@
<string name="accessibility_back" msgid="567011538994429120">"Anterior"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicações recentes"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alternar botão de método de introdução."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão zoom de compatibilidade."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom menor para ecrã maior."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ligado."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth desligado."</string>
- <string name="accessibility_no_battery" msgid="358343022352820946">"Sem bateria"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Sem bateria."</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Uma barra de bateria."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Duas barras de bateria."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Três barras de bateria."</string>
@@ -100,7 +96,7 @@
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinal Wi-Fi completo."</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>
@@ -108,7 +104,7 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ligação Bluetooth via telemóvel."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria a <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Botão Definições."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificações."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Remover notificação."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ativado."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Campainha em vibração."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha em silêncio."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Os dados 2G-3G estão desativados"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Os dados 4G estão desativados"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Os dados móveis estão desativados"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dados desativados"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"O limite de utilização de dados especificado foi atingido."\n\n"A utilização de dados adicionais poderá estar sujeita a tarifas por parte do operador."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Reativar dados"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sem ligação internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ligado"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"A procurar GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Localização definida por GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 982353d6dc40..97c978b4c2fa 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Remover"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecionar"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom em modo de compatibilidade"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quando um aplicativo é desenvolvido para uma tela menor, um controle de zoom é exibido perto do relógio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"A captura de tela foi salva na Galeria"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Não foi possível salvar a captura de tela. Armazenamento externo pode estar em uso."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opções transf. arq. por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Conectar como media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como uma câmera (PTP)"</string>
@@ -71,10 +68,9 @@
<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>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicativos 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">"Compatibilidade do botão de zoom."</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>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth desconectado."</string>
@@ -91,50 +87,42 @@
<string name="accessibility_no_data" msgid="4791966295096867555">"Nenhum dado."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Uma barra de sinal de dados."</string>
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Duas barras de sinal de dados."</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Três barras de sinal de dados."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Três barras do sinal de dados."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Sinal de dados cheio."</string>
- <string name="accessibility_no_wifi" msgid="4017628918351949575">"Sem WiFi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Uma barra de sinal WiFi."</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Duas barras de sinal WiFi."</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Três barras de sinal WiFi."</string>
- <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinal do WiFi cheio."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Sem Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Uma barra de sinal Wi-Fi."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Duas barras de sinal Wi-Fi."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Três barras de sinal Wi-Fi."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinal do Wi-Fi cheio."</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">"WiFi"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Vínculo Bluetooth."</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo para avião."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria em <xliff:g id="NUMBER">%d</xliff:g>%."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Botão Configurações."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificação."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificações."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Remover notificação."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Aquisição de GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTYpewriter ativado."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrar campainha."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibração da campainha."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha silenciosa."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dados 2G e 3G desativados"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dados 4G desativados"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dados móveis desativados"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dados desativados"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"O limite de uso de dados especificado foi alcançado."\n\n"O uso de dados adicionais poderá gerar cobranças da operadora."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Reativar dados"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sem conexão à Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Local definido por GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 9a6bf12a6b08..cd6b41a3f63a 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -30,8 +30,6 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
<skip />
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nagins avis"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actual"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Avis"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index b950a24c0337..03ce115c91d2 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afişaţi notificări"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eliminaţi"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspectaţi"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nicio notificare"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"În desfăşurare"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificări"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitate"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Atunci când o aplicaţie a fost concepută pentru un ecran mai mic, o comandă pentru mărire/micşorare va apărea alături de ceas."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecran a fost salvată în Galerie"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Captura de ecran nu a putut fi salvată. Este posibil să fie utilizată stocarea externă."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opţiuni pentru transferul de fişiere prin USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montaţi ca player media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montaţi drept cameră foto (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Înapoi"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Ecranul de pornire"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Aplicaţii recente"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Buton pentru comutarea metodei de introducere."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Buton zoom pentru compatibilitate."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceţi zoom de la o imagine mai mică la una mai mare."</string>
@@ -82,7 +78,7 @@
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterie: o bară."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterie: două bare."</string>
<string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterie: trei bare."</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"Baterie încărcată complet."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Baterie: complet."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Nu există semnal pentru telefon."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Semnal pentru telefon: o bară."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Semnal pentru telefon: două bare."</string>
@@ -94,9 +90,9 @@
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Semnal pentru date: trei bare."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Semnal pentru date: complet."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Nu există semnal Wi-Fi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: o bară."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Semnal Wi-Fi: o bară."</string>
<string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Semnal Wi-Fi: două bare."</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: trei bare."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Semnal Wi-Fi: trei bare."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Semnal Wi-Fi: complet."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
@@ -106,7 +102,7 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Niciun card SIM."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering prin Bluetooth."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conectarea ca modem prin Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod Avion."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterie: <xliff:g id="NUMBER">%d</xliff:g> procente."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Butonul Setări."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter activat."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrare sonerie."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonerie silenţioasă."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datele 2G-3G au fost dezactivate"</string>
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Se caută GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Locaţie setată prin GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index fd8202594033..70a7c88eb660 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очистить"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Не беспокоить"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показать уведомления"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Удаление"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Удалить"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Просмотр свойств"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нет уведомлений"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текущие"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Уведомления"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Масштаб и совместимость"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Если приложение рассчитано на экран меньших размеров, рядом с часами появятся средства масштабирования."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Скриншот сохранен в галерее"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Не удается сохранить скриншот. Возможно, внешние накопители используются."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Параметры передачи через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Подключить как мультимедийный проигрыватель (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
@@ -71,11 +68,10 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Главная страница"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <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_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_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-соединение установлено."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-соединение разорвано."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Батарея разряжена."</string>
@@ -83,10 +79,10 @@
<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_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_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_signal_full" msgid="6471834868580757898">"Надежный телефонный сигнал."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Сигнал передачи данных отсутствует."</string>
<string name="accessibility_data_one_bar" msgid="1415625833238273628">"Сигнал передачи данных: одно деление."</string>
@@ -99,42 +95,34 @@
<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_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_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_no_sim" msgid="8274017118472455155">"SIM-карта отсутствует."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Общий Bluetooth-модем"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Общий Bluetooth-модем."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим полета."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Заряд батареи: <xliff:g id="NUMBER">%d</xliff:g>%"</string>
- <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.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
+ <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_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_vibrate" msgid="666585363364155055">"Вибровызов."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Беззвучный режим."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Местоположение установлено с помощью GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index cdf5fd9bdb18..b6a774cb7a69 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobraziť upozornenia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Odstrániť"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Skontrolovať"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žiadne upozornenia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Prebiehajúce"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Upozornenia"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilné priblíženie"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ak je aplikácia navrhnutá pre menšiu obrazovku, zobrazí sa vedľa hodín ovládací prvok priblíženia."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímka obrazovky bola uložená do Galérie"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Snímku obrazovky sa nepodarilo uložiť. Externý ukladací priestor sa možno práve používa."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosu súborov USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pripojiť ako prehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pripojiť ako fotoaparát (PTP)"</string>
@@ -71,32 +68,31 @@
<string name="accessibility_back" msgid="567011538994429120">"Späť"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Plocha"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nedávne aplikácie"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačidlo prepnutia metódy vstupu."</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačidlo priblíženia kompatibility."</string>
- <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zväčšiť menšie na väčšiu obrazovku."</string>
- <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Rozhranie Bluetooth je pripojené."</string>
- <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Rozhranie Bluetooth je odpojené."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačidlo úpravy veľkosti z dôvodu kompatibility."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zväčšiť menší obrázok na väčšiu obrazovku."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth pripojené."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth je odpojené."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Žiadna batéria."</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Jeden stĺpec batérie."</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Dva stĺpce batérie."</string>
- <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Tri stĺpce batérie."</string>
- <string name="accessibility_battery_full" msgid="8909122401720158582">"Plná batéria."</string>
- <string name="accessibility_no_phone" msgid="4894708937052611281">"Žiadna telefóna sieť."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Jedna čiarka batérie."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Dve čiarky batérie."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Tri čiarky batérie."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batéria je nabitá."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Žiadna telefónna sieť."</string>
<string name="accessibility_phone_one_bar" msgid="687699278132664115">"Jeden stĺpec signálu telefónnej siete."</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dva stĺpce signálu telefónnej siete."</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tri stĺpce signálu telefónnej siete."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dve čiarky signálu telefónnej siete."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tri čiarky signálu telefónnej siete."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Plný signál telefónnej siete."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Žiadna dátová sieť."</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Jeden stĺpec signálu dátovej siete."</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dva stĺpce signálu dátovej siete."</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tri stĺpce signálu dátovej siete."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Jedna čiarka signálu dátovej siete."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dve čiarky signálu dátovej siete."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tri čiarky signálu dátovej siete."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Plný signál dátovej siete."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Žiadna sieť Wi-Fi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Jeden stĺpec signálu siete Wi-Fi."</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dva stĺpce signálu siete Wi-Fi."</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tri stĺpce signálu siete Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Jedna čiarka signálu siete Wi-Fi."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dve čiarky signálu siete Wi-Fi."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tri čiarky signálu siete Wi-Fi."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Plný signál siete Wi-Fi."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
@@ -107,8 +103,10 @@
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Žiadna karta SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Zdieľanie dátového pripojenia cez Bluetooth."</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim V lietadle"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Batéria <xliff:g id="NUMBER">%d</xliff:g> %"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim V lietadle."</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"Tlačidlo Nastavenia."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Tlačidlo upozornení."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Odstrániť upozornenie."</string>
@@ -117,24 +115,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhranie TeleTypewriter je povolené."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibračné zvonenie."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché zvonenie."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhľadávanie satelitov GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavená pomocou GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 93975ffff1c4..b7dc8940dd7c 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaži obvestila"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Odstrani"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Preverite"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ni obvestil"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Trenutno"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obvestila"</string>
@@ -62,18 +60,16 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Povečava združljivosti"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Če je program izdelan za manjše zaslone, se ob uri pokaže kontrolnik za povečavo."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Posnetek zaslona je shranjen v galerijo"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Posnetka zaslona ni mogoče shraniti. Zunanja shramba je morda v uporabi."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosa datotek prek USB-ja"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Vpni kot predvajalnik (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Vpni kot fotoaparat (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Namestite program Android File Transfer za Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Nazaj"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Domača stran"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Začetni zaslon"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meni"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklo načina vnosa."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Nedavni programi"</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>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Povezava Bluetooth vzpostavljena."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter omogočen."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvonjenje z vibriranjem."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvonjenje izklopljeno."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Podatki 2G-3G so onemogočeni"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Podatki 4G so onemogočeni"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilni podatki so onemogočeni"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Podatki onemogočeni"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Dosežena je določena omejitev porabe podatkov."\n\n"Dodatno porabo podatkov vam lahko operater zaračuna."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Znova omogoči podatke"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ni internetne povez."</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Iskanje GPS-a"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokacija nastavljena z GPS-om"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index e31de4e1e80b..d00521acbab7 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Обриши"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Не узнемиравај"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Приказуј упозорења"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Уклањање"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Уклони"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Провера"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема обавештења"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текуће"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Обавештења"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Компатибилно зумирање"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Када је апликација намењена мањем екрану, контрола зумирања приказује се поред сата."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Снимак екрана је сачуван у Галерији"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Није могуће сачувати снимак екрана. Могуће је да је спољно складиште у употреби."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Опције USB преноса датотека"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Прикључи као медија плејер (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Прикључи као камеру (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Почетна"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Мени"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -92,12 +88,12 @@
<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_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_signal_full" msgid="1275764416228473932">"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>
@@ -108,7 +104,7 @@
<string name="accessibility_no_sim" msgid="8274017118472455155">"Нема SIM картице."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth привезивање."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим рада у авиону."</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"Батерија <xliff:g id="NUMBER">%d</xliff:g> процен(ат)а."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Батерија је на <xliff:g id="NUMBER">%d</xliff:g> посто."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Дугме Подешавања."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Дугме Обавештења."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Уклони обавештење."</string>
@@ -117,24 +113,14 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Локацију је подесио GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index ef36aa301a4f..faeff71de924 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Visa aviseringar"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Ta bort"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Kontrollera"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Inga aviseringar"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Pågående"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelanden"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom i kompatibilitetsläge"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"När en app är anpassad för en mindre skärm visas ett zoomreglage vid klockan."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skärmdumpen sparades i galleriet"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Det gick inte att spara skärmdumpen. Extern lagring kanske används."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Överföringsalternativ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montera som mediaspelare (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montera som kamera (PTP)"</string>
@@ -71,10 +68,9 @@
<string name="accessibility_back" msgid="567011538994429120">"Tillbaka"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startsida"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knappen växla inmatningsmetod."</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knappen kompatibilitetszoom."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Senaste apparna"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knapp för byte av inmatningsmetod."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knapp för kompatibilitetszoom."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zooma mindre skärm till större."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ansluten."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth har kopplats från."</string>
@@ -110,31 +106,21 @@
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Flygplansläge"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Knappen Inställningar."</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knappen Aviseringar."</string>
- <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ta bort avisering."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knapp för meddelanden."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ta bort meddelandet"</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiverad."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS erhålls."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Tar emot GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiverad."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrerande ringsignal."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tyst ringsignal."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data via 2G-3G har inaktiverats"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data via 4G har inaktiverats"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata har inaktiverats"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data har inaktiverats"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Den angivna gränsen för dataanvändning har nåtts."\n" "\n"Ytterligare dataanvändning kan medföra operatörsavgifter."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Återaktivera data"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen anslutning"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ansluten"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Sökning efter GPS pågår"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Platsen har identifierats av GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index e654f4a5940b..1f984085dbe7 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -27,8 +27,6 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
<skip />
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
<skip />
<!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
@@ -101,8 +99,7 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Programu za hivi karibuni"</string>
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -191,18 +188,12 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data ya 2G-3G imelemazwa"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data ya 4G imelemazwa"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data ya kifaa cha mkononi imelemazwa"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data imelemazwa"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Kikomo cha utumizi wa data kilichobainishwa kimefikiwa. "\n" "\n" Utumizi wa data ya ziada huenda ukagharimu gharama za mbembaji."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Wezesha upya data"</string>
<!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
<!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 4145d1426123..f69539ae5b5d 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"แสดงการแจ้งเตือน"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"นำออก"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"ตรวจสอบ"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ไม่มีการแจ้งเตือน"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ดำเนินอยู่"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"การแจ้งเตือน"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"ความเข้ากันได้ของการย่อ/ขยาย"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"สำหรับแอปพลิเคชันที่ออกแบบมาสำหรับหน้าจอขนาดเล็ก ตัวควบคุมการย่อ/ขยายจะปรากฏขึ้นข้างนาฬิกา"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"บันทึกภาพหน้าจอในแกลเลอรีแล้ว"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"ไม่สามารถบันทึกภาพหน้าจอ ที่จัดเก็บข้อมูลภายนอกอาจมีการใช้งานอยู่"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"ตัวเลือกการถ่ายโอนไฟล์ USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"ย้อนกลับ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"หน้าแรก"</string>
<string name="accessibility_menu" msgid="316839303324695949">"เมนู"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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,24 +113,14 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"ตำแหน่งที่กำหนดโดย GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 2b6bbb72948b..d59edd8d9528 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Magpakita ng notification"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Alisin"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Siyasatin"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Walang mga notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Nagpapatuloy"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Mga Notification"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom sa Pagiging Tugma"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kapag nakadisenyo ang isang app para sa mas maliit na screen, isang kontrol ng zoom ang lalabas sa may orasan."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Na-save ang screenshot sa Gallery"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Hindi ma-save ang screenshot. Maaaring ginagamit ang panlabas na storage."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Opsyon paglipat ng USB file"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"I-mount bilang isang media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"I-mount bilang camera (PTP)"</string>
@@ -71,32 +68,31 @@
<string name="accessibility_back" msgid="567011538994429120">"Bumalik"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button ng pamamaraan ng pag-input."</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng compatibility."</string>
+ <string name="accessibility_recent" msgid="3027675523629738534">"Mga kamakailang application"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button na pamamaraan ng pag-input."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng pagiging tugma."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Mag-zoom nang mas maliit sa mas malaking screen."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Nakakonekta ang Bluetooth."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Nadiskonekta ang Bluetooth."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Walang baterya."</string>
- <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterya isang bar."</string>
- <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterya dalawang bar."</string>
- <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterya tatlong bar."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterya na isang bar."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterya na dalawang bar."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterya na tatlong bar."</string>
<string name="accessibility_battery_full" msgid="8909122401720158582">"Puno na ang baterya."</string>
<string name="accessibility_no_phone" msgid="4894708937052611281">"Walang telepono."</string>
- <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telepono isang bar."</string>
- <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telepono dalawang bar."</string>
- <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telepono tatlong bar."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telepono na isang bar."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telepono na dalawang bar."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telepono na tatlong bar."</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Puno ang signal ng telepono."</string>
<string name="accessibility_no_data" msgid="4791966295096867555">"Walang data."</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data isang bar."</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dalawang bar."</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tatlong bar."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data na isang bar."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data na dalawang bar."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data na tatlong bar."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Puno ang signal ng data."</string>
<string name="accessibility_no_wifi" msgid="4017628918351949575">"Walang WiFi."</string>
- <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi isang bar."</string>
- <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi dalawang bar."</string>
- <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tatlong bar."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi na isang bar."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi na dalawang bar."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi na tatlong bar."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Puno ang signal ng WiFi."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
@@ -107,34 +103,24 @@
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Walang SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pag-tether ng Bluetooth."</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Airplane mode"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode na eroplano."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterya <xliff:g id="NUMBER">%d</xliff:g> (na) porsyento."</string>
<string name="accessibility_settings_button" msgid="7913780116850379698">"Button ng mga setting."</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"Button ng mga notification."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Alisin ang notification."</string>
- <string name="accessibility_gps_enabled" msgid="3511469499240123019">"Pinagana ang GPS."</string>
- <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Nag-a-acquire ang GPS."</string>
- <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Pinagana ang TeleTypewriter."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Naka-vibrate ang ringer."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"Pinapagana ang GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Kumukuha ng GPS."</string>
+ <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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Naghahanap ng GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasyong itinatakda ng GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index f3b79b1788ba..616baca5e5f2 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bildirimleri göster"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Kaldır"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Araştır"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirim yok"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sürüyor"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirimler"</string>
@@ -62,19 +60,17 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Uyumluluk Zum\'u"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Uygulama küçük bir ekran için tasarlanmışsa saatin yanında bir yakınlaştırma denetimi görünür."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekran görüntüsü Galeri\'ye kaydedildi"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ekran görüntüsü kaydedilemedi. Harici depolama birimi kullanımda olabilir."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB dosya aktarım seçenekleri"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Medya oynatıcı olarak ekle (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera olarak ekle (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Mac için Android Dosya Aktarımı uygulamasını yükle"</string>
<string name="accessibility_back" msgid="567011538994429120">"Geri"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Ana Sayfa"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Ana sayfa"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Son uygulamalar"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string>
- <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk yakınlaştırma düğmesi."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk zum düğmesi."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha büyük ekrana daha küçük yakınlaştır."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth bağlandı."</string>
<string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth bağlantısı kesildi."</string>
@@ -106,35 +102,25 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Kablosuz"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM kart yok."</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth İnternet paylaşımı"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçak modu."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Pil yüzdesi: <xliff:g id="NUMBER">%d</xliff:g>"</string>
- <string name="accessibility_settings_button" msgid="7913780116850379698">"Ayarlar düğmesi"</string>
- <string name="accessibility_notifications_button" msgid="2933903195211483438">"Bildirim düğmesi."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Ayarlar düğmesi."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Bildirimler düğmesi."</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"Bildirimi kaldır."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS etkin."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS alınıyor."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter etkin."</string>
- <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zil programı titreşim."</string>
- <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zil programı sessiz."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Telefon zili titreşim."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Telefon zili sessiz."</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G verileri devre dışı bırakıldı"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G verileri devre dışı"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil veriler devre dışı"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Veriler devre dışı"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Belirtilen veri kullanım sınırına ulaşıldı."\n\n"Ek veri kullanımında operatör ücretleri alınabilir."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Veriyi yeniden etkinleştir"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"İnternet bağlantısı yok"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Kablosuz bağlandı"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS aranıyor"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Konum GPS ile belirlendi"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index de2efaed8ff3..1d764e2edade 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показувати сповіщення"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Видалити"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Перевірити"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Немає сповіщень"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string>
@@ -62,17 +60,15 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Елемент керування масштабом для сумісності"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Якщо програму призначено для менших екранів, елемент керування масштабом буде відображатися біля годинника."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Знімок екрана збережено в Галереї"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Не вдалося зберегти знімок екрана. Можливо, зовнішня пам’ять використовується."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Парам.передав.файлів через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Підключити як медіапрогравач (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Підключити як камеру (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Установити програму Android File Transfer для Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Домашня сторінка"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Головна"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -81,8 +77,8 @@
<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_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_phone_one_bar" msgid="687699278132664115">"Одна смужка сигналу телефону."</string>
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Дві смужки сигналу телефону."</string>
@@ -117,24 +113,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп увімкнено."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Дзвінок на вібросигналі."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Дзвінок беззвучний."</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Місцезнаходження встановлено за допомогою GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index c1ce41651193..bc8626bcc2df 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Hiển thị thông báo"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Xóa"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Kiểm tra"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Không có thông báo nào"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Đang diễn ra"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Thông báo"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Thu phóng tương thích"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Khi ứng dụng được thiết kế cho một màn hình nhỏ hơn, điều khiển thu phóng sẽ xuất hiện bên cạnh đồng hồ."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Đã lưu ảnh chụp màn hình vào Thư viện"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Không thể lưu ảnh chụp màn hình. Bộ nhớ ngoài có thể đang được sử dụng."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Tùy chọn truyền tệp USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Gắn như một trình phát đa phương tiện (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Gắn như một máy ảnh (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Quay lại"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Trang chủ"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Trình đơn"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Các ứng dụng gần đây"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Nút thu phóng khả năng tương thích."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Thu phóng màn hình lớn hơn hoặc nhỏ hơn."</string>
@@ -117,24 +113,14 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Đã tắt dữ liệu 2G-3G"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Đã tắt dữ liệu 4G"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dữ liệu di động bị vô hiệu hóa"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Dữ liệu đã bị vô hiệu hóa"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Đã đạt tới giới hạn sử dụng dữ liệu được chỉ định."\n\n"Nhà cung cấp có thể tính phí cho việc sử dụng thêm dữ liệu."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Bật lại dữ liệu"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ko có k.nối Internet"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Đang tìm kiếm GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Vị trí đặt bởi GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index aeff89dc3423..420612ff21ee 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"显示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"删除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"检查"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"无通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"正在进行的"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"兼容性缩放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"如果应用程序是针对较小屏幕设计的,则时钟旁会显示缩放控件。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"屏幕截图已保存到“图库”"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"无法保存屏幕截图。外部存储设备可能在使用中。"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 文件传输选项"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"作为媒体播放器 (MTP) 装载"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"作为摄像头 (PTP) 装载"</string>
@@ -71,9 +68,8 @@
<string name="accessibility_back" msgid="567011538994429120">"返回"</string>
<string name="accessibility_home" msgid="8217216074895377641">"主屏幕"</string>
<string name="accessibility_menu" msgid="316839303324695949">"菜单"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
- <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切换输入法按钮。"</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>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"蓝牙已连接。"</string>
@@ -93,22 +89,24 @@
<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">"无 SIM 卡。"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"蓝牙绑定。"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"飞行模式"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"电池电量为 <xliff:g id="NUMBER">%d</xliff:g>%。"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"飞行模式。"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"设置按钮。"</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"通知按钮。"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"删除通知。"</string>
@@ -116,25 +114,15 @@
<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>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜索 GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"已通过 GPS 确定位置"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 23a36c916327..54fbefb02e5a 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -25,8 +25,6 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"顯示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"移除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"查驗"</string>
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"沒有通知"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"進行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -62,8 +60,7 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"相容性縮放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"執行專為較小螢幕設計的應用程式時,系統會在時鐘旁顯示縮放控制項。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"螢幕擷取畫面已儲存至圖片庫"</string>
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"無法儲存螢幕擷取畫面,外部儲存裝置可能正在使用中。"</string>
<string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
@@ -71,8 +68,7 @@
<string name="accessibility_back" msgid="567011538994429120">"返回"</string>
<string name="accessibility_home" msgid="8217216074895377641">"主螢幕"</string>
<string name="accessibility_menu" msgid="316839303324695949">"選單"</string>
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <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>
@@ -105,10 +101,12 @@
<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">"WiFi"</string>
- <string name="accessibility_no_sim" msgid="8274017118472455155">"無 SIM 卡。"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"沒有 SIM 卡。"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"藍牙數據連線"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"飛航模式。"</string>
- <string name="accessibility_battery_level" msgid="7451474187113371965">"電池電量為 <xliff:g id="NUMBER">%d</xliff:g>%。"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"飛行模式。"</string>
+ <!-- String.format failed for translation -->
+ <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+ <skip />
<string name="accessibility_settings_button" msgid="7913780116850379698">"設定按鈕。"</string>
<string name="accessibility_notifications_button" msgid="2933903195211483438">"通知按鈕。"</string>
<string name="accessibility_remove_notification" msgid="4883990503785778699">"移除通知。"</string>
@@ -117,24 +115,14 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter (TTY) 已啟用。"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"鈴聲震動。"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"鈴聲靜音。"</string>
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
- <skip />
- <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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_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>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS 已定位"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 034ee91b827f..5efeac5bd7d2 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -27,8 +27,6 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
<skip />
- <!-- no translation found for status_bar_date_formatter (7518819808535663629) -->
- <skip />
<!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
<skip />
<!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
@@ -101,8 +99,7 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
- <!-- no translation found for accessibility_recent (3027675523629738534) -->
- <skip />
+ <string name="accessibility_recent" msgid="3027675523629738534">"Izinhlelo zokusebenza zamanje"</string>
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -191,18 +188,12 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
- <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
- <skip />
- <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
- <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"idatha ye-2G-3G ivimbelwe"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Idatha ye-4G ivimbelwe"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Idatha yefoni ivimbelwe"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Idatha ivimbelwe"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"Umkhawulo wokusebenzisa idatha ocacisiwe ufinyelelwe."\n\n"Ukusebenzisa idatha okwengeziwe kungabanga izindlezo zokuthwala."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Vumela futhi idatha"</string>
<!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
<!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index b2b6d506b0ed..56d1295fc18e 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -16,7 +16,11 @@
<resources>
<declare-styleable name="KeyButtonView">
+ <!-- key code to send when pressed; if absent or 0, no key is sent -->
<attr name="keyCode" format="integer" />
+ <!-- does this button generate longpress / repeat events? -->
+ <attr name="keyRepeat" format="boolean" />
+ <!-- drawable to use for a swelling, glowing background on press -->
<attr name="glowBackground" format="reference" />
</declare-styleable>
<declare-styleable name="ToggleSlider">
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 2818f875dcf0..e7ed0528a275 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -30,7 +30,7 @@ import android.view.View;
public class SwipeHelper {
static final String TAG = "com.android.systemui.SwipeHelper";
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
private static final boolean DEBUG_INVALIDATE = false;
private static final boolean SLOW_ANIMATIONS = false; // DEBUG;
@@ -142,7 +142,7 @@ public class SwipeHelper {
// invalidate a rectangle relative to the view's coordinate system all the way up the view
// hierarchy
public static void invalidateGlobalRegion(View view, RectF childBounds) {
- childBounds.offset(view.getX(), view.getY());
+ //childBounds.offset(view.getTranslationX(), view.getTranslationY());
if (DEBUG_INVALIDATE)
Log.v(TAG, "-------------");
while (view.getParent() != null && view.getParent() instanceof View) {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
index 36f16596b653..8da2db641867 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
@@ -120,6 +120,9 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView
}
public void onBeginDrag(View v) {
+ // We do this so the underlying ScrollView knows that it won't get
+ // the chance to intercept events anymore
+ requestDisallowInterceptTouchEvent(true);
}
public View getChildAtPosition(MotionEvent ev) {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 28a5cc8dd7fc..8c03ef8e206f 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -41,6 +41,10 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Process;
+import android.os.SystemClock;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -51,12 +55,15 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
+import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.RelativeLayout;
+import android.widget.ScrollView;
import android.widget.TextView;
import com.android.systemui.R;
@@ -68,11 +75,12 @@ import com.android.systemui.statusbar.tablet.TabletStatusBar;
public class RecentsPanelView extends RelativeLayout
implements OnItemClickListener, RecentsCallback, StatusBarPanel, Animator.AnimatorListener {
static final String TAG = "RecentsListView";
- static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG;
+ static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false;
private static final int DISPLAY_TASKS = 20;
private static final int MAX_TASKS = DISPLAY_TASKS + 1; // allow extra for non-apps
private StatusBar mBar;
private ArrayList<ActivityDescription> mActivityDescriptions;
+ private AsyncTask<Void, Integer, Void> mThumbnailLoader;
private int mIconDpi;
private View mRecentsScrim;
private View mRecentsGlowView;
@@ -87,31 +95,47 @@ public class RecentsPanelView extends RelativeLayout
private Choreographer mChoreo;
private View mRecentsDismissButton;
private ActivityDescriptionAdapter mListAdapter;
+ private final Handler mHandler = new Handler();
- /* package */ final static class ActivityDescription {
+ /* package */ final class ActivityDescription {
+ final ActivityManager.RecentTaskInfo recentTaskInfo;
+ final ResolveInfo resolveInfo;
int taskId; // application task id for curating apps
- Bitmap thumbnail; // generated by Activity.onCreateThumbnail()
- Drawable icon; // application package icon
- String label; // application package label
- CharSequence description; // generated by Activity.onCreateDescription()
Intent intent; // launch intent for application
Matrix matrix; // arbitrary rotation matrix to correct orientation
String packageName; // used to override animations (see onClick())
int position; // position in list
- public ActivityDescription(Bitmap _thumbnail,
- Drawable _icon, String _label, CharSequence _desc, Intent _intent,
- int _id, int _pos, String _packageName)
- {
- thumbnail = _thumbnail;
- icon = _icon;
- label = _label;
- description = _desc;
+ private Bitmap mThumbnail; // generated by Activity.onCreateThumbnail()
+ private Drawable mIcon; // application package icon
+ private CharSequence mLabel; // application package label
+
+ public ActivityDescription(ActivityManager.RecentTaskInfo _recentInfo,
+ ResolveInfo _resolveInfo, Intent _intent,
+ int _id, int _pos, String _packageName) {
+ recentTaskInfo = _recentInfo;
+ resolveInfo = _resolveInfo;
intent = _intent;
taskId = _id;
position = _pos;
packageName = _packageName;
}
+
+ public CharSequence getLabel() {
+ return mLabel;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ public void setThumbnail(Bitmap thumbnail) {
+ mThumbnail = compositeBitmap(mGlowBitmap, thumbnail);
+ }
+
+ public Bitmap getThumbnail() {
+ return mThumbnail;
+ }
}
private final class OnLongClickDelegate implements View.OnLongClickListener {
@@ -126,6 +150,7 @@ public class RecentsPanelView extends RelativeLayout
/* package */ final static class ViewHolder {
View thumbnailView;
+ ImageView thumbnailViewImage;
ImageView iconView;
TextView labelView;
TextView descriptionView;
@@ -157,6 +182,8 @@ public class RecentsPanelView extends RelativeLayout
convertView = mInflater.inflate(R.layout.status_bar_recent_item, null);
holder = new ViewHolder();
holder.thumbnailView = convertView.findViewById(R.id.app_thumbnail);
+ holder.thumbnailViewImage = (ImageView) convertView.findViewById(
+ R.id.app_thumbnail_image);
holder.iconView = (ImageView) convertView.findViewById(R.id.app_icon);
holder.labelView = (TextView) convertView.findViewById(R.id.app_label);
holder.descriptionView = (TextView) convertView.findViewById(R.id.app_description);
@@ -169,11 +196,10 @@ public class RecentsPanelView extends RelativeLayout
final int activityId = mActivityDescriptions.size() - position - 1;
final ActivityDescription activityDescription = mActivityDescriptions.get(activityId);
- final Bitmap thumb = activityDescription.thumbnail;
- updateDrawable(holder.thumbnailView, compositeBitmap(mGlowBitmap, thumb));
- holder.iconView.setImageDrawable(activityDescription.icon);
- holder.labelView.setText(activityDescription.label);
- holder.descriptionView.setText(activityDescription.description);
+ holder.thumbnailViewImage.setImageBitmap(activityDescription.getThumbnail());
+ holder.iconView.setImageDrawable(activityDescription.getIcon());
+ holder.labelView.setText(activityDescription.getLabel());
+ holder.descriptionView.setText(activityDescription.recentTaskInfo.description);
holder.thumbnailView.setTag(activityDescription);
holder.thumbnailView.setOnLongClickListener(new OnLongClickDelegate(convertView));
holder.activityDescription = activityDescription;
@@ -201,20 +227,6 @@ public class RecentsPanelView extends RelativeLayout
return x >= l && x < r && y >= t && y < b;
}
- private void updateDrawable(View thumbnailView, Bitmap bitmap) {
- Drawable d = thumbnailView.getBackground();
- if (d instanceof LayerDrawable) {
- LayerDrawable layerD = (LayerDrawable) d;
- Drawable thumb = layerD.findDrawableByLayerId(R.id.base_layer);
- if (thumb != null) {
- layerD.setDrawableByLayerId(R.id.base_layer,
- new BitmapDrawable(getResources(), bitmap));
- return;
- }
- }
- Log.w(TAG, "Failed to update drawable");
- }
-
public void show(boolean show, boolean animate) {
if (animate) {
if (mShowing != show) {
@@ -373,12 +385,12 @@ public class RecentsPanelView extends RelativeLayout
}
}
- private Drawable getFullResDefaultActivityIcon() {
+ Drawable getFullResDefaultActivityIcon() {
return getFullResIcon(Resources.getSystem(),
com.android.internal.R.mipmap.sym_def_app_icon);
}
- private Drawable getFullResIcon(Resources resources, int iconId) {
+ Drawable getFullResIcon(Resources resources, int iconId) {
try {
return resources.getDrawableForDensity(iconId, mIconDpi);
} catch (Resources.NotFoundException e) {
@@ -442,15 +454,13 @@ public class RecentsPanelView extends RelativeLayout
final String title = info.loadLabel(pm).toString();
// Drawable icon = info.loadIcon(pm);
Drawable icon = getFullResIcon(resolveInfo, pm);
- int id = recentTasks.get(i).id;
+ int id = recentInfo.id;
if (title != null && title.length() > 0 && icon != null) {
if (DEBUG) Log.v(TAG, "creating activity desc for id=" + id + ", label=" + title);
ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(
recentInfo.persistentId);
- ActivityDescription item = new ActivityDescription(
- thumbs != null ? thumbs.mainThumbnail : null,
- icon, title, recentInfo.description, intent, id,
- index, info.packageName);
+ ActivityDescription item = new ActivityDescription(recentInfo,
+ resolveInfo, intent, id, index, info.packageName);
activityDescriptions.add(item);
++index;
} else {
@@ -474,12 +484,137 @@ public class RecentsPanelView extends RelativeLayout
return desc;
}
+ void loadActivityDescription(ActivityDescription ad, int index) {
+ final ActivityManager am = (ActivityManager)
+ mContext.getSystemService(Context.ACTIVITY_SERVICE);
+ final PackageManager pm = mContext.getPackageManager();
+ ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(
+ ad.recentTaskInfo.persistentId);
+ CharSequence label = ad.resolveInfo.activityInfo.loadLabel(pm);
+ Drawable icon = getFullResIcon(ad.resolveInfo, pm);
+ if (DEBUG) Log.v(TAG, "Loaded bitmap for #" + index + " in "
+ + ad + ": " + thumbs.mainThumbnail);
+ synchronized (ad) {
+ ad.mLabel = label;
+ ad.mIcon = icon;
+ ad.setThumbnail(thumbs.mainThumbnail);
+ }
+ }
+
+ void applyActivityDescription(ActivityDescription ad, int index, boolean anim) {
+ synchronized (ad) {
+ if (mRecentsContainer != null) {
+ ViewGroup container = mRecentsContainer;
+ if (container instanceof HorizontalScrollView
+ || container instanceof ScrollView) {
+ container = (ViewGroup)container.findViewById(
+ R.id.recents_linear_layout);
+ }
+ // Look for a view showing this thumbnail, to update.
+ for (int i=0; i<container.getChildCount(); i++) {
+ View v = container.getChildAt(i);
+ if (v.getTag() instanceof ViewHolder) {
+ ViewHolder h = (ViewHolder)v.getTag();
+ if (h.activityDescription == ad) {
+ if (DEBUG) Log.v(TAG, "Updatating thumbnail #" + index + " in "
+ + h.activityDescription
+ + ": " + ad.getThumbnail());
+ h.iconView.setImageDrawable(ad.getIcon());
+ if (anim) {
+ h.iconView.setAnimation(AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
+ }
+ h.iconView.setVisibility(View.VISIBLE);
+ h.labelView.setText(ad.getLabel());
+ if (anim) {
+ h.labelView.setAnimation(AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
+ }
+ h.labelView.setVisibility(View.VISIBLE);
+ Bitmap thumbnail = ad.getThumbnail();
+ if (thumbnail != null) {
+ // Should remove the default image in the frame
+ // that this now covers, to improve scrolling speed.
+ // That can't be done until the anim is complete though.
+ h.thumbnailViewImage.setImageBitmap(thumbnail);
+ if (anim) {
+ h.thumbnailViewImage.setAnimation(AnimationUtils.loadAnimation(
+ mContext, R.anim.recent_appear));
+ }
+ h.thumbnailViewImage.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
private void refreshApplicationList() {
+ if (mThumbnailLoader != null) {
+ mThumbnailLoader.cancel(false);
+ mThumbnailLoader = null;
+ }
mActivityDescriptions = getRecentTasks();
mListAdapter.notifyDataSetInvalidated();
if (mActivityDescriptions.size() > 0) {
if (DEBUG) Log.v(TAG, "Showing " + mActivityDescriptions.size() + " apps");
updateUiElements(getResources().getConfiguration());
+ final ArrayList<ActivityDescription> descriptions = mActivityDescriptions;
+ loadActivityDescription(descriptions.get(0), 0);
+ applyActivityDescription(descriptions.get(0), 0, false);
+ if (descriptions.size() > 1) {
+ mThumbnailLoader = new AsyncTask<Void, Integer, Void>() {
+ @Override
+ protected void onProgressUpdate(Integer... values) {
+ final ActivityDescription ad = descriptions.get(values[0]);
+ if (!isCancelled()) {
+ applyActivityDescription(ad, values[0], true);
+ }
+ // This is to prevent the loader thread from getting ahead
+ // of our UI updates.
+ mHandler.post(new Runnable() {
+ @Override public void run() {
+ synchronized (ad) {
+ ad.notifyAll();
+ }
+ }
+ });
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ final int origPri = Process.getThreadPriority(Process.myTid());
+ Process.setThreadPriority(Process.THREAD_GROUP_BG_NONINTERACTIVE);
+ long nextTime = SystemClock.uptimeMillis();
+ for (int i=1; i<descriptions.size(); i++) {
+ ActivityDescription ad = descriptions.get(i);
+ loadActivityDescription(ad, i);
+ long now = SystemClock.uptimeMillis();
+ nextTime += 200;
+ if (nextTime > now) {
+ try {
+ Thread.sleep(nextTime-now);
+ } catch (InterruptedException e) {
+ }
+ }
+ if (isCancelled()) {
+ break;
+ }
+ synchronized (ad) {
+ publishProgress(i);
+ try {
+ ad.wait(500);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ Process.setThreadPriority(origPri);
+ return null;
+ }
+ };
+ mThumbnailLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
} else {
// Immediately hide this panel
if (DEBUG) Log.v(TAG, "Nothing to show");
@@ -548,7 +683,7 @@ public class RecentsPanelView extends RelativeLayout
public void handleSwipe(View view) {
ActivityDescription ad = ((ViewHolder) view.getTag()).activityDescription;
- if (DEBUG) Log.v(TAG, "Jettison " + ad.label);
+ if (DEBUG) Log.v(TAG, "Jettison " + ad.getLabel());
mActivityDescriptions.remove(ad);
// Handled by widget containers to enable LayoutTransitions properly
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
index 89900a1663fa..b1a30d9e0407 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
@@ -66,20 +66,34 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper
private void update() {
mLinearLayout.removeAllViews();
+ // Once we can clear the data associated with individual item views,
+ // we can get rid of the removeAllViews() and the code below will
+ // recycle them.
for (int i = 0; i < mAdapter.getCount(); i++) {
- final View view = mAdapter.getView(i, null, mLinearLayout);
- view.setClickable(true);
- view.setOnLongClickListener(mOnLongClick);
-
- final View thumbnail = getChildContentView(view);
- // thumbnail is set to clickable in the layout file
- thumbnail.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- mCallback.handleOnClick(view);
- }
- });
+ View old = null;
+ if (i < mLinearLayout.getChildCount()) {
+ old = mLinearLayout.getChildAt(i);
+ old.setVisibility(View.VISIBLE);
+ }
+ final View view = mAdapter.getView(i, old, mLinearLayout);
+
+ if (old == null) {
+ view.setClickable(true);
+ view.setOnLongClickListener(mOnLongClick);
- mLinearLayout.addView(view);
+ final View thumbnail = getChildContentView(view);
+ // thumbnail is set to clickable in the layout file
+ thumbnail.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ mCallback.handleOnClick(view);
+ }
+ });
+
+ mLinearLayout.addView(view);
+ }
+ }
+ for (int i = mAdapter.getCount(); i < mLinearLayout.getChildCount(); i++) {
+ mLinearLayout.getChildAt(i).setVisibility(View.GONE);
}
// Scroll to end after layout.
post(new Runnable() {
@@ -121,6 +135,9 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper
}
public void onBeginDrag(View v) {
+ // We do this so the underlying ScrollView knows that it won't get
+ // the chance to intercept events anymore
+ requestDisallowInterceptTouchEvent(true);
}
public View getChildAtPosition(MotionEvent ev) {
@@ -128,8 +145,9 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper
final float y = ev.getY() + getScrollY();
for (int i = 0; i < mLinearLayout.getChildCount(); i++) {
View item = mLinearLayout.getChildAt(i);
- if (x >= item.getLeft() && x < item.getRight()
- && y >= item.getTop() && y < item.getBottom()) {
+ if (item.getVisibility() == View.VISIBLE
+ && x >= item.getLeft() && x < item.getRight()
+ && y >= item.getTop() && y < item.getBottom()) {
return item;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 86dc9a63d687..fe255cba2686 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -69,6 +69,7 @@ import java.util.Date;
class SaveImageInBackgroundData {
Context context;
Bitmap image;
+ Runnable finisher;
int result;
}
@@ -141,6 +142,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi
Toast.makeText(params.context, R.string.screenshot_saving_toast,
Toast.LENGTH_SHORT).show();
}
+ params.finisher.run();
};
}
@@ -231,11 +233,9 @@ class GlobalScreenshot {
WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED_SYSTEM
- | WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
PixelFormat.TRANSLUCENT);
- mWindowLayoutParams.token = new Binder();
mWindowLayoutParams.setTitle("ScreenshotAnimation");
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mDisplay = mWindowManager.getDefaultDisplay();
@@ -244,10 +244,11 @@ class GlobalScreenshot {
/**
* Creates a new worker thread and saves the screenshot to the media store.
*/
- private void saveScreenshotInWorkerThread() {
+ private void saveScreenshotInWorkerThread(Runnable finisher) {
SaveImageInBackgroundData data = new SaveImageInBackgroundData();
data.context = mContext;
data.image = mScreenBitmap;
+ data.finisher = finisher;
new SaveImageInBackgroundTask().execute(data);
}
@@ -269,7 +270,7 @@ class GlobalScreenshot {
/**
* Takes a screenshot of the current display and shows an animation.
*/
- void takeScreenshot() {
+ void takeScreenshot(Runnable finisher) {
// We need to orient the screenshot correctly (and the Surface api seems to take screenshots
// only in the natural orientation of the device :!)
mDisplay.getRealMetrics(mDisplayMetrics);
@@ -302,18 +303,19 @@ class GlobalScreenshot {
if (mScreenBitmap == null) {
Toast.makeText(mContext, R.string.screenshot_failed_toast,
Toast.LENGTH_SHORT).show();
+ finisher.run();
return;
}
// Start the post-screenshot animation
- startAnimation();
+ startAnimation(finisher);
}
/**
* Starts the animation after taking the screenshot
*/
- private void startAnimation() {
+ private void startAnimation(final Runnable finisher) {
// Add the view for the animation
mScreenshotView.setImageBitmap(mScreenBitmap);
mScreenshotLayout.requestFocus();
@@ -332,8 +334,7 @@ class GlobalScreenshot {
@Override
public void onAnimationEnd(Animator animation) {
// Save the screenshot once we have a bit of time now
- saveScreenshotInWorkerThread();
-
+ saveScreenshotInWorkerThread(finisher);
mWindowManager.removeView(mScreenshotLayout);
}
});
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
index 35eaedf1f941..05ff8be1e54a 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
@@ -26,7 +26,11 @@ import android.net.Uri;
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
import android.util.Log;
import com.android.internal.app.AlertActivity;
@@ -39,12 +43,30 @@ public class TakeScreenshotService extends Service {
private static GlobalScreenshot mScreenshot;
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case 1:
+ final Messenger callback = msg.replyTo;
+ if (mScreenshot == null) {
+ mScreenshot = new GlobalScreenshot(TakeScreenshotService.this);
+ }
+ mScreenshot.takeScreenshot(new Runnable() {
+ @Override public void run() {
+ Message reply = Message.obtain(null, 1);
+ try {
+ callback.send(reply);
+ } catch (RemoteException e) {
+ }
+ }
+ });
+ }
+ }
+ };
+
@Override
public IBinder onBind(Intent intent) {
- if (mScreenshot == null) {
- mScreenshot = new GlobalScreenshot(this);
- }
- mScreenshot.takeScreenshot();
- return null;
+ return new Messenger(mHandler).getBinder();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 325a6053ee2f..65b022a7610b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar;
import android.content.Context;
import android.util.AttributeSet;
+import android.util.Slog;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -32,8 +33,16 @@ public class SignalClusterView
extends LinearLayout
implements NetworkController.SignalCluster {
+ static final boolean DEBUG = false;
+ static final String TAG = "SignalClusterView";
+
NetworkController mNC;
+ private boolean mWifiVisible = false;
+ private int mWifiStrengthId = 0, mWifiActivityId = 0;
+ private boolean mMobileVisible = false;
+ private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
+
ViewGroup mWifiGroup, mMobileGroup;
ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType;
@@ -50,6 +59,7 @@ public class SignalClusterView
}
public void setNetworkController(NetworkController nc) {
+ if (DEBUG) Slog.d(TAG, "NetworkController=" + nc);
mNC = nc;
}
@@ -64,37 +74,74 @@ public class SignalClusterView
mMobile = (ImageView) findViewById(R.id.mobile_signal);
mMobileActivity = (ImageView) findViewById(R.id.mobile_inout);
mMobileType = (ImageView) findViewById(R.id.mobile_type);
+
+ apply();
}
@Override
protected void onDetachedFromWindow() {
+ mWifiGroup = null;
+ mWifi = null;
+ mWifiActivity = null;
+ mMobileGroup = null;
+ mMobile = null;
+ mMobileActivity = null;
+ mMobileType = null;
+
super.onDetachedFromWindow();
}
public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon) {
+ mWifiVisible = visible;
+ mWifiStrengthId = strengthIcon;
+ mWifiActivityId = activityIcon;
+
+ apply();
+ }
+
+ public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
+ int typeIcon) {
+ mMobileVisible = visible;
+ mMobileStrengthId = strengthIcon;
+ mMobileActivityId = activityIcon;
+ mMobileTypeId = typeIcon;
+
+ apply();
+ }
+
+ // Run after each indicator change.
+ private void apply() {
if (mWifiGroup == null) return;
- if (visible) {
+ if (mWifiVisible) {
mWifiGroup.setVisibility(View.VISIBLE);
- mWifi.setImageResource(strengthIcon);
- mWifiActivity.setImageResource(activityIcon);
+ mWifi.setImageResource(mWifiStrengthId);
+ mWifiActivity.setImageResource(mWifiActivityId);
} else {
mWifiGroup.setVisibility(View.GONE);
}
- }
- public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
- int typeIcon) {
- if (mMobileGroup == null) return;
+ if (DEBUG) Slog.d(TAG,
+ String.format("wifi: %s sig=%d act=%d",
+ (mWifiVisible ? "VISIBLE" : "GONE"),
+ mWifiStrengthId, mWifiActivityId));
- if (visible) {
+ if (mMobileVisible) {
mMobileGroup.setVisibility(View.VISIBLE);
- mMobile.setImageResource(strengthIcon);
- mMobileActivity.setImageResource(activityIcon);
- mMobileType.setImageResource(typeIcon);
+ mMobile.setImageResource(mMobileStrengthId);
+ mMobileActivity.setImageResource(mMobileActivityId);
+ mMobileType.setImageResource(mMobileTypeId);
} else {
mMobileGroup.setVisibility(View.GONE);
}
+
+ if (DEBUG) Slog.d(TAG,
+ String.format("mobile: %s sig=%d act=%d typ=%d",
+ (mMobileVisible ? "VISIBLE" : "GONE"),
+ mMobileStrengthId, mMobileActivityId, mMobileTypeId));
+
+ mMobileType.setVisibility(
+ !mWifiVisible ? View.VISIBLE : View.GONE);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 1e2723308912..a90eb3fa9217 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -59,13 +59,17 @@ public class StatusBarIconView extends AnimatedImageView {
mNotification = notification;
setContentDescription(notification);
- final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
- final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size);
- final float scale = (float)imageBounds / (float)outerBounds;
- setScaleX(scale);
- setScaleY(scale);
- final float alpha = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
- setAlpha(alpha);
+ // We do not resize and scale system icons (on the right), only notification icons (on the
+ // left).
+ if (notification != null) {
+ final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
+ final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size);
+ final float scale = (float)imageBounds / (float)outerBounds;
+ setScaleX(scale);
+ setScaleY(scale);
+ final float alpha = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
+ setAlpha(alpha);
+ }
}
private static boolean streq(String a, String b) {
@@ -247,4 +251,9 @@ public class StatusBarIconView extends AnimatedImageView {
}
}
}
+
+ public String toString() {
+ return "StatusBarIconView(slot=" + mSlot + " icon=" + mIcon
+ + " notification=" + mNotification + ")";
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index abf505c5367c..e6c0b96019e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -25,10 +25,12 @@ import android.content.res.Resources;
import android.os.ServiceManager;
import android.util.AttributeSet;
import android.util.Slog;
+import android.view.animation.AccelerateInterpolator;
import android.view.Display;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Surface;
import android.view.WindowManager;
import android.widget.LinearLayout;
@@ -46,6 +48,8 @@ public class NavigationBarView extends LinearLayout {
final static boolean NAVBAR_ALWAYS_AT_RIGHT = true;
+ final static boolean ANIMATE_HIDE_TRANSITION = false; // turned off because it introduces unsightly delay when videos goes to full screen
+
protected IStatusBarService mBarService;
final Display mDisplay;
View mCurrentView = null;
@@ -55,7 +59,8 @@ public class NavigationBarView extends LinearLayout {
int mBarSize;
boolean mVertical;
- boolean mHidden;
+ boolean mHidden, mLowProfile;
+ boolean mEnabled = true;
public View getRecentsButton() {
return mCurrentView.findViewById(R.id.recent_apps);
@@ -67,6 +72,7 @@ public class NavigationBarView extends LinearLayout {
public NavigationBarView(Context context, AttributeSet attrs) {
super(context, attrs);
+
mHidden = false;
mDisplay = ((WindowManager)context.getSystemService(
@@ -79,6 +85,70 @@ public class NavigationBarView extends LinearLayout {
mVertical = false;
}
+ public void setEnabled(final boolean enable) {
+ mEnabled = enable;
+ mCurrentView.setVisibility(enable ? View.VISIBLE : View.INVISIBLE);
+ }
+
+ View.OnTouchListener mLightsOutListener = new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent ev) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ // even though setting the systemUI visibility below will turn these views
+ // on, we need them to come up faster so that they can catch this motion
+ // event
+ setLowProfile(false, false);
+
+ try {
+ mBarService.setSystemUiVisibility(0);
+ } catch (android.os.RemoteException ex) {
+ }
+ }
+ return false;
+ }
+ };
+
+ public void setLowProfile(final boolean lightsOut) {
+ setLowProfile(lightsOut, true);
+ }
+
+ public void setLowProfile(final boolean lightsOut, final boolean animate) {
+ if (lightsOut == mLowProfile) return;
+
+ mLowProfile = lightsOut;
+
+ if (DEBUG) Slog.d(TAG, "setting lights " + (lightsOut?"out":"on"));
+
+ final View navButtons = mCurrentView.findViewById(R.id.nav_buttons);
+ final View lowLights = mCurrentView.findViewById(R.id.lights_out);
+
+ if (!animate) {
+ lowLights.setVisibility(View.GONE);
+ navButtons.setAlpha(1f);
+ } else {
+ navButtons.animate()
+ .alpha(lightsOut ? 0f : 1f)
+ .setDuration(lightsOut ? 600 : 200)
+ .start();
+
+ lowLights.setOnTouchListener(mLightsOutListener);
+ lowLights.setAlpha(0f);
+ lowLights.setVisibility(View.VISIBLE);
+ lowLights.animate()
+ .alpha(lightsOut ? 1f : 0f)
+ .setStartDelay(lightsOut ? 500 : 0)
+ .setDuration(lightsOut ? 1000 : 300)
+ .setInterpolator(new AccelerateInterpolator(2.0f))
+ .setListener(lightsOut ? null : new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator _a) {
+ lowLights.setVisibility(View.GONE);
+ }
+ })
+ .start();
+ }
+ }
+
public void setHidden(final boolean hide) {
if (hide == mHidden) return;
@@ -86,6 +156,14 @@ public class NavigationBarView extends LinearLayout {
Slog.d(TAG,
(hide ? "HIDING" : "SHOWING") + " navigation bar");
+ // bring up the lights no matter what
+ setLowProfile(false);
+
+ if (!ANIMATE_HIDE_TRANSITION) {
+ setVisibility(hide ? View.GONE : View.VISIBLE);
+ return;
+ }
+
float oldAlpha = mCurrentView.getAlpha();
if (DEBUG) {
Slog.d(TAG, "animating alpha: " + oldAlpha + " -> "
@@ -129,13 +207,20 @@ public class NavigationBarView extends LinearLayout {
? findViewById(R.id.rot90)
: findViewById(R.id.rot270);
+ for (View v : mRotatedViews) {
+ // this helps avoid drawing artifacts with glowing navigation keys
+ ViewGroup group = (ViewGroup) v.findViewById(R.id.nav_buttons);
+ group.setMotionEventSplittingEnabled(false);
+ }
mCurrentView = mRotatedViews[Surface.ROTATION_0];
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
- // immediately bring up the lights
- setHidden(false);
+ try {
+ mBarService.setSystemUiVisibility(0);
+ } catch (android.os.RemoteException ex) {
+ }
return false; // pass it on
}
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 81c25e06891d..fe9eceb797d7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone;
import android.animation.ObjectAnimator;
+import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.Dialog;
import android.app.Notification;
@@ -90,6 +91,7 @@ public class PhoneStatusBar extends StatusBar {
static final String TAG = "PhoneStatusBar";
public static final boolean DEBUG = false;
public static final boolean SPEW = false;
+ public static final boolean DUMPTRUCK = true; // extra dumpsys info
// additional instrumentation for testing purposes; intended to be left on during development
public static final boolean CHATTY = DEBUG || true;
@@ -282,6 +284,8 @@ public class PhoneStatusBar extends StatusBar {
mNavigationBarView =
(NavigationBarView) View.inflate(context, R.layout.navigation_bar, null);
+ mNavigationBarView.setEnabled((mDisabled & StatusBarManager.DISABLE_NAVIGATION) == 0);
+
sb.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
@@ -315,8 +319,8 @@ public class PhoneStatusBar extends StatusBar {
mPile = (ViewGroup)expanded.findViewById(R.id.latestItems);
mExpandedContents = mPile; // was: expanded.findViewById(R.id.notificationLinearLayout);
mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle);
- mNoNotificationsTitle.setAlpha(0f);
- mNoNotificationsTitle.setVisibility(View.VISIBLE);
+ mNoNotificationsTitle.setVisibility(View.GONE); // disabling for now
+
mClearButton = expanded.findViewById(R.id.clear_all_button);
mClearButton.setOnClickListener(mClearButtonListener);
mClearButton.setAlpha(0f);
@@ -348,6 +352,7 @@ public class PhoneStatusBar extends StatusBar {
final SignalClusterView signalCluster =
(SignalClusterView)sb.findViewById(R.id.signal_cluster);
mNetworkController.addSignalCluster(signalCluster);
+ signalCluster.setNetworkController(mNetworkController);
// Recents Panel
updateRecentsPanel();
@@ -370,9 +375,11 @@ public class PhoneStatusBar extends StatusBar {
WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
- | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
- | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+ | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
(translucent ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT));
+ if (ActivityManager.isHighEndGfx(mDisplay)) {
+ lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
+ }
lp.gravity = Gravity.BOTTOM | Gravity.LEFT;
lp.setTitle("RecentsPanel");
lp.windowAnimations = R.style.Animation_RecentPanel;
@@ -467,7 +474,7 @@ public class PhoneStatusBar extends StatusBar {
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
| WindowManager.LayoutParams.FLAG_SLIPPERY,
- PixelFormat.TRANSLUCENT);
+ PixelFormat.OPAQUE);
lp.setTitle("NavigationBar");
switch (rotation) {
@@ -1022,6 +1029,7 @@ public class PhoneStatusBar extends StatusBar {
mClearButton.setAlpha(clearable ? 1.0f : 0.0f);
}
+ /*
if (mNoNotificationsTitle.isShown()) {
if (any != (mNoNotificationsTitle.getAlpha() == 0.0f)) {
ObjectAnimator a = ObjectAnimator.ofFloat(mNoNotificationsTitle, "alpha",
@@ -1033,6 +1041,7 @@ public class PhoneStatusBar extends StatusBar {
} else {
mNoNotificationsTitle.setAlpha(any ? 0.0f : 0.75f);
}
+ */
}
@@ -1044,12 +1053,32 @@ public class PhoneStatusBar extends StatusBar {
final int diff = state ^ old;
mDisabled = state;
+ if (DEBUG) {
+ Slog.d(TAG, String.format("disable: 0x%08x -> 0x%08x (diff: 0x%08x)",
+ old, state, diff));
+ }
+
if ((diff & StatusBarManager.DISABLE_EXPAND) != 0) {
if ((state & StatusBarManager.DISABLE_EXPAND) != 0) {
Slog.d(TAG, "DISABLE_EXPAND: yes");
animateCollapse();
}
}
+
+ if ((diff & StatusBarManager.DISABLE_NAVIGATION) != 0) {
+ if ((state & StatusBarManager.DISABLE_NAVIGATION) != 0) {
+ Slog.d(TAG, "DISABLE_NAVIGATION: yes");
+
+ // close recents if it's visible
+ mHandler.removeMessages(MSG_CLOSE_RECENTS_PANEL);
+ mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL);
+ }
+
+ if (mNavigationBarView != null) {
+ mNavigationBarView.setEnabled((state & StatusBarManager.DISABLE_NAVIGATION) == 0);
+ }
+ }
+
if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
if ((state & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: yes");
@@ -1465,11 +1494,20 @@ public class PhoneStatusBar extends StatusBar {
@Override // CommandQueue
public void setSystemUiVisibility(int vis) {
- if (vis != mSystemUiVisibility) {
+ final int old = mSystemUiVisibility;
+ final int diff = vis ^ old;
+
+ if (diff != 0) {
mSystemUiVisibility = vis;
- if (0 != (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE)) {
- animateCollapse();
+ if (0 != (diff & View.SYSTEM_UI_FLAG_LOW_PROFILE)) {
+ final boolean lightsOut = (0 != (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE));
+ if (lightsOut) {
+ animateCollapse();
+ }
+ if (mNavigationBarView != null) {
+ mNavigationBarView.setLowProfile(lightsOut);
+ }
}
notifyUiVisibilityChanged();
@@ -1675,26 +1713,28 @@ public class PhoneStatusBar extends StatusBar {
pw.println(" mScrollView: " + viewInfo(mScrollView)
+ " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY());
}
- /*
- synchronized (mNotificationData) {
- int N = mNotificationData.ongoingCount();
- pw.println(" ongoingCount.size=" + N);
- for (int i=0; i<N; i++) {
- StatusBarNotification n = mNotificationData.getOngoing(i);
- pw.println(" [" + i + "] key=" + n.key + " view=" + n.view);
- pw.println(" data=" + n.data);
+
+ if (DUMPTRUCK) {
+ synchronized (mNotificationData) {
+ int N = mNotificationData.size();
+ pw.println(" notification icons: " + N);
+ for (int i=0; i<N; i++) {
+ NotificationData.Entry e = mNotificationData.get(i);
+ pw.println(" [" + i + "] key=" + e.key + " icon=" + e.icon);
+ StatusBarNotification n = e.notification;
+ pw.println(" pkg=" + n.pkg + " id=" + n.id + " priority=" + n.priority);
+ pw.println(" notification=" + n.notification);
+ pw.println(" tickerText=\"" + n.notification.tickerText + "\"");
+ }
}
- N = mNotificationData.latestCount();
- pw.println(" ongoingCount.size=" + N);
+
+ int N = mStatusIcons.getChildCount();
+ pw.println(" system icons: " + N);
for (int i=0; i<N; i++) {
- StatusBarNotification n = mNotificationData.getLatest(i);
- pw.println(" [" + i + "] key=" + n.key + " view=" + n.view);
- pw.println(" data=" + n.data);
+ StatusBarIconView ic = (StatusBarIconView) mStatusIcons.getChildAt(i);
+ pw.println(" [" + i + "] icon=" + ic);
}
- }
- */
-
- if (false) {
+
pw.println("see the logcat for a dump of the views we have created.");
// must happen on ui thread
mHandler.post(new Runnable() {
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 38a10299fa12..6368d1d8549e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -49,6 +49,8 @@ import com.android.systemui.R;
public class KeyButtonView extends ImageView {
private static final String TAG = "StatusBar.KeyButtonView";
+ final float GLOW_MAX_SCALE_FACTOR = 1.8f;
+
IWindowManager mWindowManager;
long mDownTime;
boolean mSending;
@@ -57,11 +59,12 @@ public class KeyButtonView extends ImageView {
int mTouchSlop;
Drawable mGlowBG;
float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
+ boolean mSupportsLongpress = true;
Runnable mCheckLongPress = new Runnable() {
public void run() {
if (isPressed()) {
-
+ // Slog.d("KeyButtonView", "longpressed: " + this);
if (mCode != 0) {
mRepeat++;
sendEvent(KeyEvent.ACTION_DOWN,
@@ -89,6 +92,8 @@ public class KeyButtonView extends ImageView {
defStyle, 0);
mCode = a.getInteger(R.styleable.KeyButtonView_keyCode, 0);
+
+ mSupportsLongpress = a.getBoolean(R.styleable.KeyButtonView_keyRepeat, true);
mGlowBG = a.getDrawable(R.styleable.KeyButtonView_glowBackground);
if (mGlowBG != null) {
@@ -156,17 +161,22 @@ public class KeyButtonView extends ImageView {
mGlowScale = x;
final float w = getWidth();
final float h = getHeight();
- if (x < 1.0f) {
+ if (GLOW_MAX_SCALE_FACTOR <= 1.0f) {
+ // this only works if we know the glow will never leave our bounds
invalidate();
} else {
- final float rx = (w * (x - 1.0f)) / 2.0f;
- final float ry = (h * (x - 1.0f)) / 2.0f;
+ final float rx = (w * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f;
+ final float ry = (h * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f;
com.android.systemui.SwipeHelper.invalidateGlobalRegion(
this,
new RectF(getLeft() - rx,
getTop() - ry,
getRight() + rx,
getBottom() + ry));
+
+ // also invalidate our immediate parent to help avoid situations where nearby glows
+ // interfere
+ ((View)getParent()).invalidate();
}
}
@@ -180,7 +190,7 @@ public class KeyButtonView extends ImageView {
setDrawingAlpha(1f);
as.playTogether(
ObjectAnimator.ofFloat(this, "glowAlpha", 1f),
- ObjectAnimator.ofFloat(this, "glowScale", 1.8f)
+ ObjectAnimator.ofFloat(this, "glowScale", GLOW_MAX_SCALE_FACTOR)
);
as.setDuration(50);
} else {
@@ -207,11 +217,19 @@ public class KeyButtonView extends ImageView {
mDownTime = SystemClock.uptimeMillis();
mRepeat = 0;
mSending = true;
+ setPressed(true);
sendEvent(KeyEvent.ACTION_DOWN,
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY, mDownTime);
- setPressed(true);
- removeCallbacks(mCheckLongPress);
- postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
+ } else {
+ mSending = false;
+ sendEvent(KeyEvent.ACTION_UP,
+ KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY, mDownTime);
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+ playSoundEffect(SoundEffectConstants.CLICK);
+ }
break;
case MotionEvent.ACTION_MOVE:
if (mSending) {
@@ -230,7 +248,9 @@ public class KeyButtonView extends ImageView {
sendEvent(KeyEvent.ACTION_UP,
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY
| KeyEvent.FLAG_CANCELED);
- removeCallbacks(mCheckLongPress);
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ }
}
break;
case MotionEvent.ACTION_UP:
@@ -239,15 +259,15 @@ public class KeyButtonView extends ImageView {
if (mSending) {
mSending = false;
final int flags = KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY;
- removeCallbacks(mCheckLongPress);
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ }
if (mCode != 0) {
if (doIt) {
sendEvent(KeyEvent.ACTION_UP, flags);
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
playSoundEffect(SoundEffectConstants.CLICK);
- } else {
- sendEvent(KeyEvent.ACTION_UP, flags | KeyEvent.FLAG_CANCELED);
}
} else {
// no key code, just a regular ImageView
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 1a24d05e4824..16db1d7b697e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -79,11 +79,11 @@ public class NetworkController extends BroadcastReceiver {
String mNetworkNameDefault;
String mNetworkNameSeparator;
int mPhoneSignalIconId;
- int mDataDirectionIconId;
- int mDataDirectionOverlayIconId;
+ int mDataDirectionIconId; // data + data direction on phones
int mDataSignalIconId;
int mDataTypeIconId;
boolean mDataActive;
+ int mMobileActivityIconId; // overlay arrows for data direction
String mContentDescriptionPhoneSignal;
String mContentDescriptionWifi;
@@ -97,6 +97,7 @@ public class NetworkController extends BroadcastReceiver {
int mWifiLevel;
String mWifiSsid;
int mWifiIconId = 0;
+ int mWifiActivityIconId = 0; // overlay arrows for wifi direction
int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE;
// bluetooth
@@ -221,8 +222,17 @@ public class NetworkController extends BroadcastReceiver {
mLabelViews.add(v);
}
- public void addSignalCluster(SignalCluster v) {
- mSignalClusters.add(v);
+ public void addSignalCluster(SignalCluster cluster) {
+ mSignalClusters.add(cluster);
+ cluster.setWifiIndicators(
+ mWifiEnabled,
+ mWifiIconId,
+ mWifiActivityIconId);
+ cluster.setMobileDataIndicators(
+ hasMobileDataFeature(),
+ mPhoneSignalIconId,
+ mMobileActivityIconId,
+ mDataTypeIconId);
}
public void setStackedMode(boolean stacked) {
@@ -670,7 +680,7 @@ public class NetworkController extends BroadcastReceiver {
if (mDataAndWifiStacked) {
mWifiIconId = 0;
} else {
- mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[0][0];
+ mWifiIconId = mWifiEnabled ? WifiIcons.WIFI_SIGNAL_STRENGTH[0][0] : 0;
}
mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi);
}
@@ -735,85 +745,93 @@ public class NetworkController extends BroadcastReceiver {
// ===== Update the views =======================================================
- // figure out what to show- there should be one connected network or nothing
- // General order of preference is: wifi, 3G than bluetooth. This might vary by product.
void refreshViews() {
Context context = mContext;
- int combinedSignalIconId;
- int dataDirectionOverlayIconId = 0,
- wifiActivityIconId = 0,
- mobileActivityIconId = 0;
- int dataTypeIconId;
- String label;
+ int combinedSignalIconId = 0;
+ int combinedActivityIconId = 0;
+ String label = "";
int N;
+ if (mDataConnected) {
+ label = mNetworkName;
+ combinedSignalIconId = mDataSignalIconId;
+ switch (mDataActivity) {
+ case TelephonyManager.DATA_ACTIVITY_IN:
+ mMobileActivityIconId = R.drawable.stat_sys_signal_in;
+ break;
+ case TelephonyManager.DATA_ACTIVITY_OUT:
+ mMobileActivityIconId = R.drawable.stat_sys_signal_out;
+ break;
+ case TelephonyManager.DATA_ACTIVITY_INOUT:
+ mMobileActivityIconId = R.drawable.stat_sys_signal_inout;
+ break;
+ default:
+ mMobileActivityIconId = 0;
+ break;
+ }
+
+ combinedActivityIconId = mMobileActivityIconId;
+ combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon()
+ mContentDescriptionCombinedSignal = mContentDescriptionDataType;
+ }
+
if (mWifiConnected) {
if (mWifiSsid == null) {
label = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
+ mWifiActivityIconId = 0; // no wifis, no bits
} else {
label = mWifiSsid;
switch (mWifiActivity) {
case WifiManager.DATA_ACTIVITY_IN:
- dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_in;
+ mWifiActivityIconId = R.drawable.stat_sys_wifi_in;
break;
case WifiManager.DATA_ACTIVITY_OUT:
- dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_out;
+ mWifiActivityIconId = R.drawable.stat_sys_wifi_out;
break;
case WifiManager.DATA_ACTIVITY_INOUT:
- dataDirectionOverlayIconId = R.drawable.stat_sys_wifi_inout;
+ mWifiActivityIconId = R.drawable.stat_sys_wifi_inout;
break;
case WifiManager.DATA_ACTIVITY_NONE:
break;
}
- wifiActivityIconId = dataDirectionOverlayIconId;
}
- combinedSignalIconId = mWifiIconId;
+
+ combinedActivityIconId = mWifiActivityIconId;
+ combinedSignalIconId = mWifiIconId; // set by updateWifiIcons()
mContentDescriptionCombinedSignal = mContentDescriptionWifi;
- dataTypeIconId = 0;
- } else if (mDataConnected) {
- label = mNetworkName;
- combinedSignalIconId = mDataSignalIconId;
- switch (mDataActivity) {
- case TelephonyManager.DATA_ACTIVITY_IN:
- dataDirectionOverlayIconId = R.drawable.stat_sys_signal_in;
- break;
- case TelephonyManager.DATA_ACTIVITY_OUT:
- dataDirectionOverlayIconId = R.drawable.stat_sys_signal_out;
- break;
- case TelephonyManager.DATA_ACTIVITY_INOUT:
- dataDirectionOverlayIconId = R.drawable.stat_sys_signal_inout;
- break;
- default:
- dataDirectionOverlayIconId = 0;
- break;
- }
- mobileActivityIconId = dataDirectionOverlayIconId;
- combinedSignalIconId = mDataSignalIconId;
- mContentDescriptionCombinedSignal = mContentDescriptionDataType;
- dataTypeIconId = mDataTypeIconId;
- } else if (mBluetoothTethered) {
+ }
+
+ if (mBluetoothTethered) {
label = mContext.getString(R.string.bluetooth_tethered);
combinedSignalIconId = mBluetoothTetherIconId;
mContentDescriptionCombinedSignal = mContext.getString(
R.string.accessibility_bluetooth_tether);
- dataTypeIconId = 0;
- } else if (mAirplaneMode &&
+ }
+
+ if (mAirplaneMode &&
(mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly()))) {
// Only display the flight-mode icon if not in "emergency calls only" mode.
label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
- combinedSignalIconId = R.drawable.stat_sys_signal_flightmode;
mContentDescriptionCombinedSignal = mContext.getString(
R.string.accessibility_airplane_mode);
- dataTypeIconId = R.drawable.stat_sys_signal_flightmode; // was 0;
- } else {
+
+ // look again; your radios are now airplanes
+ mPhoneSignalIconId = mDataSignalIconId = R.drawable.stat_sys_signal_flightmode;
+ mDataTypeIconId = 0;
+
+ combinedSignalIconId = mDataSignalIconId;
+ }
+ else if (!mDataConnected && !mWifiConnected && !mBluetoothTethered) {
+ // pretty much totally disconnected
+
label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
// On devices without mobile radios, we want to show the wifi icon
combinedSignalIconId =
hasMobileDataFeature() ? mDataSignalIconId : mWifiIconId;
mContentDescriptionCombinedSignal = hasMobileDataFeature()
? mContentDescriptionDataType : mContentDescriptionWifi;
- dataTypeIconId = 0;
+ mDataTypeIconId = 0;
}
if (DEBUG) {
@@ -825,7 +843,7 @@ public class NetworkController extends BroadcastReceiver {
+ " combinedSignalIconId=0x"
+ Integer.toHexString(combinedSignalIconId)
+ "/" + getResourceName(combinedSignalIconId)
- + " dataDirectionOverlayIconId=0x" + Integer.toHexString(dataDirectionOverlayIconId)
+ + " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId)
+ " mAirplaneMode=" + mAirplaneMode
+ " mDataActivity=" + mDataActivity
+ " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
@@ -837,21 +855,21 @@ public class NetworkController extends BroadcastReceiver {
}
if (mLastPhoneSignalIconId != mPhoneSignalIconId
- || mLastDataDirectionOverlayIconId != dataDirectionOverlayIconId
+ || mLastDataDirectionOverlayIconId != combinedActivityIconId
|| mLastWifiIconId != mWifiIconId
- || mLastDataTypeIconId != dataTypeIconId)
+ || mLastDataTypeIconId != mDataTypeIconId)
{
// NB: the mLast*s will be updated later
for (SignalCluster cluster : mSignalClusters) {
cluster.setWifiIndicators(
mWifiEnabled,
mWifiIconId,
- wifiActivityIconId);
+ mWifiActivityIconId);
cluster.setMobileDataIndicators(
hasMobileDataFeature(),
mPhoneSignalIconId,
- mobileActivityIconId,
- dataTypeIconId);
+ mMobileActivityIconId,
+ mDataTypeIconId);
}
}
@@ -905,35 +923,35 @@ public class NetworkController extends BroadcastReceiver {
}
// the data network type overlay
- if (mLastDataTypeIconId != dataTypeIconId) {
- mLastDataTypeIconId = dataTypeIconId;
+ if (mLastDataTypeIconId != mDataTypeIconId) {
+ mLastDataTypeIconId = mDataTypeIconId;
N = mDataTypeIconViews.size();
for (int i=0; i<N; i++) {
final ImageView v = mDataTypeIconViews.get(i);
- if (dataTypeIconId == 0) {
+ if (mDataTypeIconId == 0) {
v.setVisibility(View.INVISIBLE);
} else {
v.setVisibility(View.VISIBLE);
- v.setImageResource(dataTypeIconId);
+ v.setImageResource(mDataTypeIconId);
v.setContentDescription(mContentDescriptionDataType);
}
}
}
// the data direction overlay
- if (mLastDataDirectionOverlayIconId != dataDirectionOverlayIconId) {
+ if (mLastDataDirectionOverlayIconId != combinedActivityIconId) {
if (DEBUG) {
- Slog.d(TAG, "changing data overlay icon id to " + dataDirectionOverlayIconId);
+ Slog.d(TAG, "changing data overlay icon id to " + combinedActivityIconId);
}
- mLastDataDirectionOverlayIconId = dataDirectionOverlayIconId;
+ mLastDataDirectionOverlayIconId = combinedActivityIconId;
N = mDataDirectionOverlayIconViews.size();
for (int i=0; i<N; i++) {
final ImageView v = mDataDirectionOverlayIconViews.get(i);
- if (dataDirectionOverlayIconId == 0) {
+ if (combinedActivityIconId == 0) {
v.setVisibility(View.INVISIBLE);
} else {
v.setVisibility(View.VISIBLE);
- v.setImageResource(dataDirectionOverlayIconId);
+ v.setImageResource(combinedActivityIconId);
v.setContentDescription(mContentDescriptionDataType);
}
}
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 e78711309bb3..76dec5e2716b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -497,6 +497,8 @@ public class TabletStatusBar extends StatusBar implements
mRecentButton = mNavigationArea.findViewById(R.id.recent_apps);
mRecentButton.setOnClickListener(mOnClickListener);
mNavigationArea.setLayoutTransition(mBarContentsLayoutTransition);
+ // no multi-touch on the nav buttons
+ mNavigationArea.setMotionEventSplittingEnabled(false);
// The bar contents buttons
mFeedbackIconArea = (ViewGroup)sb.findViewById(R.id.feedbackIconArea);
@@ -966,11 +968,11 @@ public class TabletStatusBar extends StatusBar implements
if ((diff & StatusBarManager.DISABLE_BACK) != 0) {
if ((state & StatusBarManager.DISABLE_BACK) != 0) {
Slog.i(TAG, "DISABLE_BACK: yes");
- mBackButton.setVisibility(View.INVISIBLE);
+ mBackButton.setEnabled(false);
mInputMethodSwitchButton.setScreenLocked(true);
} else {
Slog.i(TAG, "DISABLE_BACK: no");
- mBackButton.setVisibility(View.VISIBLE);
+ mBackButton.setEnabled(true);
mInputMethodSwitchButton.setScreenLocked(false);
}
}
@@ -1218,9 +1220,7 @@ public class TabletStatusBar extends StatusBar implements
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
public void onClick(View v) {
- if (v == mNotificationTrigger) {
- onClickNotificationTrigger();
- } else if (v == mRecentButton) {
+ if (v == mRecentButton) {
onClickRecentButton();
} else if (v == mInputMethodSwitchButton) {
onClickInputMethodSwitchButton();
@@ -1230,17 +1230,6 @@ public class TabletStatusBar extends StatusBar implements
}
};
- public void onClickNotificationTrigger() {
- if (DEBUG) Slog.d(TAG, "clicked notification icons; disabled=" + mDisabled);
- if ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0) {
- int msg = !mNotificationPanel.isShowing()
- ? MSG_OPEN_NOTIFICATION_PANEL
- : MSG_CLOSE_NOTIFICATION_PANEL;
- mHandler.removeMessages(msg);
- mHandler.sendEmptyMessage(msg);
- }
- }
-
public void onClickRecentButton() {
if (DEBUG) Slog.d(TAG, "clicked recent apps; disabled=" + mDisabled);
if ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0) {
@@ -1372,6 +1361,11 @@ public class TabletStatusBar extends StatusBar implements
// event.getY(),
// mInitialTouchX,
// mInitialTouchY));
+
+ if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) {
+ return true;
+ }
+
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
diff --git a/packages/VpnDialogs/res/values-af/strings.xml b/packages/VpnDialogs/res/values-af/strings.xml
new file mode 100644
index 000000000000..3f0a37e4a57b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-af/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> pogings om \'n VPN-verbinding te skep."</string>
+ <string name="warning" msgid="5470743576660160079">"Deur voort te gaan, gee jy die program toestemming om alle netwerkverkeer te onderskep. "<b>"Moenie aanvaar nie, tensy jy die program vertrou."</b>"Jy loop andersins die risiko dat jou gekompromitteer word deur \'n kwaadwillige sagteware."</string>
+ <string name="accept" msgid="2889226408765810173">"Ek vertrou hierdie program."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN is gekoppel"</string>
+ <string name="configure" msgid="4905518375574791375">"Stel op"</string>
+ <string name="disconnect" msgid="971412338304200056">"Ontkoppel"</string>
+ <string name="session" msgid="6470628549473641030">"Sessie:"</string>
+ <string name="duration" msgid="3584782459928719435">"Tydsduur:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data oorgedra:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data ontvang:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> grepe/<xliff:g id="NUMBER_1">%2$s</xliff:g> pakkies"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-am/strings.xml b/packages/VpnDialogs/res/values-am/strings.xml
new file mode 100644
index 000000000000..34c6db47a0ae
--- /dev/null
+++ b/packages/VpnDialogs/res/values-am/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"አዋቅር"</string>
+ <string name="disconnect" msgid="971412338304200056">"አለያይ"</string>
+ <string name="session" msgid="6470628549473641030">"ክፍለ ጊዜ፡"</string>
+ <string name="duration" msgid="3584782459928719435">"ጊዜ"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"ውሂብ ተላልፏል፡"</string>
+ <string name="data_received" msgid="7431729884377019935">"ውሂብ ተቀብሏል"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ባይትስ / <xliff:g id="NUMBER_1">%2$s</xliff:g> ፓኬቶች"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ar/strings.xml b/packages/VpnDialogs/res/values-ar/strings.xml
new file mode 100644
index 000000000000..2d54617721a9
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ar/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"تهيئة"</string>
+ <string name="disconnect" msgid="971412338304200056">"قطع الاتصال"</string>
+ <string name="session" msgid="6470628549473641030">"الجلسة"</string>
+ <string name="duration" msgid="3584782459928719435">"المدة:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"البيانات المنقولة:"</string>
+ <string name="data_received" msgid="7431729884377019935">"البيانات المستلمة:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> بايت / <xliff:g id="NUMBER_1">%2$s</xliff:g> من الحزم"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-bg/strings.xml b/packages/VpnDialogs/res/values-bg/strings.xml
new file mode 100644
index 000000000000..7220ca99c11e
--- /dev/null
+++ b/packages/VpnDialogs/res/values-bg/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"Конфигуриране"</string>
+ <string name="disconnect" msgid="971412338304200056">"Изключване"</string>
+ <string name="session" msgid="6470628549473641030">"Сесия:"</string>
+ <string name="duration" msgid="3584782459928719435">"Продължителност:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Предадени данни:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Получени данни:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> байта/ <xliff:g id="NUMBER_1">%2$s</xliff:g> пакета"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ca/strings.xml b/packages/VpnDialogs/res/values-ca/strings.xml
new file mode 100644
index 000000000000..8c897bc24641
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ca/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> intents de crear una connexió VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Si continues, dónes permís a l\'aplicació per interceptar tot el trànsit de la xarxa. "<b>"NO ho acceptis si no confies en l\'aplicació."</b>"Si no és així, corres el risc que les teves dades estiguin en perill davant d\'un programari maliciós."</string>
+ <string name="accept" msgid="2889226408765810173">"Confio en aquesta aplicació."</string>
+ <string name="legacy_title" msgid="192936250066580964">"La VPN està connectada"</string>
+ <string name="configure" msgid="4905518375574791375">"Configura"</string>
+ <string name="disconnect" msgid="971412338304200056">"Desconnecta"</string>
+ <string name="session" msgid="6470628549473641030">"Sessió:"</string>
+ <string name="duration" msgid="3584782459928719435">"Durada:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Dades transmeses:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Dades rebudes:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes/<xliff:g id="NUMBER_1">%2$s</xliff:g> paquets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-cs/strings.xml b/packages/VpnDialogs/res/values-cs/strings.xml
new file mode 100644
index 000000000000..984a9829b23b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-cs/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"Aplikace <xliff:g id="APP">%s</xliff:g> se pokouší připojit k síti VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Pokračováním souhlasíte s tím, aby aplikace sledovala veškerou vaši síťovou aktivitu. "<b>" Pokud aplikaci nevěříte, nepokračujte."</b>" V opačném případě riskujete vystavení svých dat škodlivému softwaru."</string>
+ <string name="accept" msgid="2889226408765810173">"Této aplikaci věřím."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Síť VPN je připojena"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurovat"</string>
+ <string name="disconnect" msgid="971412338304200056">"Odpojit"</string>
+ <string name="session" msgid="6470628549473641030">"Relace:"</string>
+ <string name="duration" msgid="3584782459928719435">"Doba trvání:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Odeslaná data:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Přijatá data:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bajtů / <xliff:g id="NUMBER_1">%2$s</xliff:g> paketů"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-da/strings.xml b/packages/VpnDialogs/res/values-da/strings.xml
new file mode 100644
index 000000000000..5ca00bfdc26b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-da/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> forsøger at oprette en VPN-forbindelse."</string>
+ <string name="warning" msgid="5470743576660160079">"Hvis du fortsætter, giver du applikationen tilladelse til at opfange al netværkstrafik. "<b>"Du skal ikke acceptere, medmindre du har tillid til applikationen."</b>" Ellers risikerer du at få dine data kompromitteret af ondsindet software."</string>
+ <string name="accept" msgid="2889226408765810173">"Jeg har tillid til denne applikation."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN er tilsluttet"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurer"</string>
+ <string name="disconnect" msgid="971412338304200056">"Fjern tilknytning"</string>
+ <string name="session" msgid="6470628549473641030">"Session:"</string>
+ <string name="duration" msgid="3584782459928719435">"Varighed:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data sendt:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data modtaget:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakker"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml
new file mode 100644
index 000000000000..e9b3e2726824
--- /dev/null
+++ b/packages/VpnDialogs/res/values-de/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> versucht, eine VPN-Verbindung zu erstellen."</string>
+ <string name="warning" msgid="5470743576660160079">"Wenn Sie fortfahren, gestatten Sie der App, den gesamten Netzwerkverkehr abzufangen. "<b>"Akzeptieren Sie nur, wenn Sie der App vertrauen."</b>" Anderenfalls riskieren Sie, dass Ihre Daten von schädlicher Software manipuliert werden."</string>
+ <string name="accept" msgid="2889226408765810173">"Ich vertraue dieser App."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN ist verbunden"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurieren"</string>
+ <string name="disconnect" msgid="971412338304200056">"Verbindung trennen"</string>
+ <string name="session" msgid="6470628549473641030">"Sitzung:"</string>
+ <string name="duration" msgid="3584782459928719435">"Dauer:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Übertragene Daten:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Empfangene Daten:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> Byte/<xliff:g id="NUMBER_1">%2$s</xliff:g> Pakete"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-el/strings.xml b/packages/VpnDialogs/res/values-el/strings.xml
new file mode 100644
index 000000000000..89d19ae3bfa8
--- /dev/null
+++ b/packages/VpnDialogs/res/values-el/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"Διαμόρφωση"</string>
+ <string name="disconnect" msgid="971412338304200056">"Αποσύνδεση"</string>
+ <string name="session" msgid="6470628549473641030">"Περίοδος σύνδεσης"</string>
+ <string name="duration" msgid="3584782459928719435">"Διάρκεια:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Στοιχεία που μεταδόθηκαν:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Δεδομένα που λήφθηκαν:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> πακέτα"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-en-rGB/strings.xml b/packages/VpnDialogs/res/values-en-rGB/strings.xml
new file mode 100644
index 000000000000..99c795429046
--- /dev/null
+++ b/packages/VpnDialogs/res/values-en-rGB/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> attempts to create a VPN connection."</string>
+ <string name="warning" msgid="5470743576660160079">"By proceeding, you are giving the application permission to intercept all network traffic. "<b>"Do NOT accept unless you trust the application."</b>" Otherwise, you run the risk of having your data compromised by malicious software."</string>
+ <string name="accept" msgid="2889226408765810173">"I trust this application."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN is connected"</string>
+ <string name="configure" msgid="4905518375574791375">"Configure"</string>
+ <string name="disconnect" msgid="971412338304200056">"Disconnect"</string>
+ <string name="session" msgid="6470628549473641030">"Session:"</string>
+ <string name="duration" msgid="3584782459928719435">"Duration:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data Transmitted:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data Received:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> packets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-es-rUS/strings.xml b/packages/VpnDialogs/res/values-es-rUS/strings.xml
new file mode 100644
index 000000000000..ea58e536304b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-es-rUS/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> intenta crear una conexión VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Al proceder, le estás dando permiso a la aplicación para interceptar todo el tráfico de red. "<b>"NO aceptes a menos que confíes en la aplicación."</b>" De lo contrario, corres el riesgo de que tus datos se vean comprometidos debido a un software malicioso."</string>
+ <string name="accept" msgid="2889226408765810173">"Confío en esta aplicación."</string>
+ <string name="legacy_title" msgid="192936250066580964">"La VPN está conectada."</string>
+ <string name="configure" msgid="4905518375574791375">"Configurar"</string>
+ <string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
+ <string name="session" msgid="6470628549473641030">"Sesión:"</string>
+ <string name="duration" msgid="3584782459928719435">"Duración:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Datos transmitidos:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Datos recibidos:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquetes"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-es/strings.xml b/packages/VpnDialogs/res/values-es/strings.xml
new file mode 100644
index 000000000000..993d8b3bca3c
--- /dev/null
+++ b/packages/VpnDialogs/res/values-es/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"La aplicación <xliff:g id="APP">%s</xliff:g> intenta crear una conexión VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Si continúas, la aplicación podrá interceptar todo el tráfico de red. "<b>"Si no confías en la aplicación, NO debes instalarla."</b>" En caso contrario, te arriesgas a que el software malintencionado intercepte tus datos."</string>
+ <string name="accept" msgid="2889226408765810173">"Confío en esta aplicación."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN conectada"</string>
+ <string name="configure" msgid="4905518375574791375">"Configurar"</string>
+ <string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
+ <string name="session" msgid="6470628549473641030">"Sesión:"</string>
+ <string name="duration" msgid="3584782459928719435">"Duración:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Datos transmitidos:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Datos recibidos:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquetes"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-fa/strings.xml b/packages/VpnDialogs/res/values-fa/strings.xml
new file mode 100644
index 000000000000..7b015abeb3a1
--- /dev/null
+++ b/packages/VpnDialogs/res/values-fa/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"پیکربندی"</string>
+ <string name="disconnect" msgid="971412338304200056">"قطع اتصال"</string>
+ <string name="session" msgid="6470628549473641030">"جلسه:"</string>
+ <string name="duration" msgid="3584782459928719435">"مدت زمان:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"داده‌های منتقل شده:"</string>
+ <string name="data_received" msgid="7431729884377019935">"داده دریافت شده:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> بایت / <xliff:g id="NUMBER_1">%2$s</xliff:g> بسته"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-fi/strings.xml b/packages/VpnDialogs/res/values-fi/strings.xml
new file mode 100644
index 000000000000..66ebecaa8a96
--- /dev/null
+++ b/packages/VpnDialogs/res/values-fi/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> yrittää luoda VPN-yhteyden."</string>
+ <string name="warning" msgid="5470743576660160079">"Jos jatkat, annat sovellukselle luvan seurata kaikkea verkkoliikennettä. "<b>"ÄLÄ hyväksy ellet luota sovellukseen."</b>"Muuten haittaohjelmat voivat vaarantaa tietosi."</string>
+ <string name="accept" msgid="2889226408765810173">"Luotan tähän sovellukseen."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN on yhdistetty"</string>
+ <string name="configure" msgid="4905518375574791375">"Asetukset"</string>
+ <string name="disconnect" msgid="971412338304200056">"Katkaise yhteys"</string>
+ <string name="session" msgid="6470628549473641030">"Käyttökerta"</string>
+ <string name="duration" msgid="3584782459928719435">"Kesto:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Siirretyt tiedot:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Vastaanotetut tiedot:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> tavua / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakettia"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-fr/strings.xml b/packages/VpnDialogs/res/values-fr/strings.xml
new file mode 100644
index 000000000000..922a0041aad9
--- /dev/null
+++ b/packages/VpnDialogs/res/values-fr/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"L\'application <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>
+ <string name="configure" msgid="4905518375574791375">"Configurer"</string>
+ <string name="disconnect" msgid="971412338304200056">"Déconnecter"</string>
+ <string name="session" msgid="6470628549473641030">"Session :"</string>
+ <string name="duration" msgid="3584782459928719435">"Durée :"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Données transmises :"</string>
+ <string name="data_received" msgid="7431729884377019935">"Données reçues :"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octets / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-hr/strings.xml b/packages/VpnDialogs/res/values-hr/strings.xml
new file mode 100644
index 000000000000..b045819ccbd2
--- /dev/null
+++ b/packages/VpnDialogs/res/values-hr/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> pokušava stvoriti VPN vezu."</string>
+ <string name="warning" msgid="5470743576660160079">"Ako nastavite, dajete aplikaciji dopuštenje da presretne sav mrežni promet. "<b>"NEMOJTE prihvatiti osim ako nemate povjerenje u aplikaciju."</b>" Inače riskirate da vaše podatke ugrozi zlonamjerni softver."</string>
+ <string name="accept" msgid="2889226408765810173">"Vjerujem u ovu aplikaciju."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN je spojen"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfiguriraj"</string>
+ <string name="disconnect" msgid="971412338304200056">"Prekini vezu"</string>
+ <string name="session" msgid="6470628549473641030">"Sesija"</string>
+ <string name="duration" msgid="3584782459928719435">"Trajanje:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Preneseno podataka:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Primljeni podaci:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"Bajtova: <xliff:g id="NUMBER_0">%1$s</xliff:g>/paketa: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-hu/strings.xml b/packages/VpnDialogs/res/values-hu/strings.xml
new file mode 100644
index 000000000000..062f91aa3442
--- /dev/null
+++ b/packages/VpnDialogs/res/values-hu/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"A(z) <xliff:g id="APP">%s</xliff:g> megpróbál létrehozni egy VPN-kapcsolatot."</string>
+ <string name="warning" msgid="5470743576660160079">"A folytatással engedélyt ad az alkalmazásnak a hálózati adatforgalom elfogására. "<b>"Csak akkor fogadja el, ha megbízik az alkalmazásban. "</b>"Ellenkező esetben fennállhat annak a kockázata, hogy egy rosszindulatú program feltöri adatait."</string>
+ <string name="accept" msgid="2889226408765810173">"Bízom ebben az alkalmazásban."</string>
+ <string name="legacy_title" msgid="192936250066580964">"A VPN csatlakoztatva van"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurálás"</string>
+ <string name="disconnect" msgid="971412338304200056">"Kapcsolat bontása"</string>
+ <string name="session" msgid="6470628549473641030">"Munkamenet:"</string>
+ <string name="duration" msgid="3584782459928719435">"Időtartam:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Továbbított adatok:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Fogadott adatok:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bájt/<xliff:g id="NUMBER_1">%2$s</xliff:g> adatcsomag"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-in/strings.xml b/packages/VpnDialogs/res/values-in/strings.xml
new file mode 100644
index 000000000000..c332ce69e65f
--- /dev/null
+++ b/packages/VpnDialogs/res/values-in/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> mencoba membuat sambungan VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Dengan melanjutkan, Anda memberikan izin kepada aplikasi untuk mencegat semua lalu lintas jaringan. "<b>"JANGAN memberi izin kecuali Anda mempercayai aplikasi ini."</b>" Jika tidak, data Anda berisiko disusupi oleh perangkat lunak jahat."</string>
+ <string name="accept" msgid="2889226408765810173">"Saya mempercayai aplikasi ini."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN tersambung"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurasi"</string>
+ <string name="disconnect" msgid="971412338304200056">"Putuskan sambungan"</string>
+ <string name="session" msgid="6470628549473641030">"Sesi:"</string>
+ <string name="duration" msgid="3584782459928719435">"Durasi:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data yang Dikirimkan:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data Diterima:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-it/strings.xml b/packages/VpnDialogs/res/values-it/strings.xml
new file mode 100644
index 000000000000..2d44c207e790
--- /dev/null
+++ b/packages/VpnDialogs/res/values-it/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> tenta di creare una connessione VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Se procedi, concedi all\'applicazione l\'autorizzazione per intercettare tutto il traffico di rete. "<b>"NON accettare se non consideri l\'applicazione attendibile"</b>", altrimenti corri il rischio che i tuoi dati vengano compromessi da programmi software dannosi."</string>
+ <string name="accept" msgid="2889226408765810173">"Considero questa applicazione attendibile."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN connessa"</string>
+ <string name="configure" msgid="4905518375574791375">"Configura"</string>
+ <string name="disconnect" msgid="971412338304200056">"Disconnetti"</string>
+ <string name="session" msgid="6470628549473641030">"Sessione:"</string>
+ <string name="duration" msgid="3584782459928719435">"Durata:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Dati trasmessi:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Dati ricevuti:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte/<xliff:g id="NUMBER_1">%2$s</xliff:g> pacchetti"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-iw/strings.xml b/packages/VpnDialogs/res/values-iw/strings.xml
new file mode 100644
index 000000000000..b972877f79f7
--- /dev/null
+++ b/packages/VpnDialogs/res/values-iw/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"הגדר"</string>
+ <string name="disconnect" msgid="971412338304200056">"נתק"</string>
+ <string name="session" msgid="6470628549473641030">"הפעלה"</string>
+ <string name="duration" msgid="3584782459928719435">"משך:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"הנתונים המועברים:"</string>
+ <string name="data_received" msgid="7431729884377019935">"הנתונים שהתקבלו:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> בתים / <xliff:g id="NUMBER_1">%2$s</xliff:g> מנות"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ja/strings.xml b/packages/VpnDialogs/res/values-ja/strings.xml
new file mode 100644
index 000000000000..f8e9645d881a
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ja/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"設定"</string>
+ <string name="disconnect" msgid="971412338304200056">"切断"</string>
+ <string name="session" msgid="6470628549473641030">"セッション:"</string>
+ <string name="duration" msgid="3584782459928719435">"期間:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"送信されたデータ:"</string>
+ <string name="data_received" msgid="7431729884377019935">"受信したデータ:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g>バイト/<xliff:g id="NUMBER_1">%2$s</xliff:g>パケット"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ko/strings.xml b/packages/VpnDialogs/res/values-ko/strings.xml
new file mode 100644
index 000000000000..eff1ba9a5c46
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ko/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"설정"</string>
+ <string name="disconnect" msgid="971412338304200056">"연결 끊기"</string>
+ <string name="session" msgid="6470628549473641030">"세션:"</string>
+ <string name="duration" msgid="3584782459928719435">"기간:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"전송된 데이터:"</string>
+ <string name="data_received" msgid="7431729884377019935">"수신된 데이터:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g>바이트/<xliff:g id="NUMBER_1">%2$s</xliff:g>패킷"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-lt/strings.xml b/packages/VpnDialogs/res/values-lt/strings.xml
new file mode 100644
index 000000000000..68221b6ece40
--- /dev/null
+++ b/packages/VpnDialogs/res/values-lt/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> bando sukurti VPN ryšį."</string>
+ <string name="warning" msgid="5470743576660160079">"Tęsdami suteikiate programai leidimą perimti visą tinklo srautą. "<b>"SUTIKITE, TIK JEI pasitikite programa."</b>" Priešingu atveju kyla pavojus, kad jūsų duomenims pakenks kenkėjiška programinė įranga."</string>
+ <string name="accept" msgid="2889226408765810173">"Pasitikiu šia programa."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN prijungtas"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigūruoti"</string>
+ <string name="disconnect" msgid="971412338304200056">"Atsijungti"</string>
+ <string name="session" msgid="6470628549473641030">"Sesija"</string>
+ <string name="duration" msgid="3584782459928719435">"Trukmė:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Duomenys perduodami:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Gauti duomenys:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"Baitų: <xliff:g id="NUMBER_0">%1$s</xliff:g> baitų / paketų: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-lv/strings.xml b/packages/VpnDialogs/res/values-lv/strings.xml
new file mode 100644
index 000000000000..030e2d964495
--- /dev/null
+++ b/packages/VpnDialogs/res/values-lv/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> mēģina izveidot VPN savienojumu."</string>
+ <string name="warning" msgid="5470743576660160079">"Izvēloties turpināt, jūs ļaujat lietojumprogrammai pārtvert visu tīkla datplūsmu. "<b>"NEPIEKRĪTIET, ja neuzticaties šai lietojumprogrammai."</b>" Pretējā gadījumā pastāv risks, ka jūsu datus var apdraudēt ļaunprātīga programmatūra."</string>
+ <string name="accept" msgid="2889226408765810173">"Es uzticos šai lietojumprogrammai."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Ir izveidots savienojums ar VPN"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurēt"</string>
+ <string name="disconnect" msgid="971412338304200056">"Pārtraukt savienojumu"</string>
+ <string name="session" msgid="6470628549473641030">"Sesija:"</string>
+ <string name="duration" msgid="3584782459928719435">"Ilgums:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Nosūtītie dati:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Saņemtie dati:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"—"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> baiti/<xliff:g id="NUMBER_1">%2$s</xliff:g> paketes"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ms/strings.xml b/packages/VpnDialogs/res/values-ms/strings.xml
new file mode 100644
index 000000000000..c20bc0b68e52
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ms/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> percubaan untuk membuat sambungan VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Dengan meneruskan, anda memberi keizinan kepada aplikasi untuk memintas semua trafik rangkaian. "<b>"JANGAN terima melainkan anda mempercayai aplikasi itu."</b>" Jika tidak, anda akan mengalami risiko data terjejas oleh perisian berniat jahat."</string>
+ <string name="accept" msgid="2889226408765810173">"Saya percayai aplikasi ini."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN telah disambungkan"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurasikan"</string>
+ <string name="disconnect" msgid="971412338304200056">"Putuskan sambungan"</string>
+ <string name="session" msgid="6470628549473641030">"Sesi:"</string>
+ <string name="duration" msgid="3584782459928719435">"Tempoh:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data yang Dihantarkan:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data yang Diterima:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bait / <xliff:g id="NUMBER_1">%2$s</xliff:g> bingkisan"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-nb/strings.xml b/packages/VpnDialogs/res/values-nb/strings.xml
new file mode 100644
index 000000000000..90b542ee3075
--- /dev/null
+++ b/packages/VpnDialogs/res/values-nb/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> forsøker å etablere en VPN-tilkobling."</string>
+ <string name="warning" msgid="5470743576660160079">"Ved å fortsette gir du applikasjonen tillatelse til å fange opp all nettverkstrafikk. "<b>"IKKE godta med mindre du stoler på applikasjonen."</b>" Ellers risikerer du at dataene dine kompromitteres av en ondsinnet programvare."</string>
+ <string name="accept" msgid="2889226408765810173">"Jeg stoler på denne applikasjonen."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN er tilkoblet"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurer"</string>
+ <string name="disconnect" msgid="971412338304200056">"Koble fra"</string>
+ <string name="session" msgid="6470628549473641030">"Økt:"</string>
+ <string name="duration" msgid="3584782459928719435">"Varighet:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data overført:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data mottatt:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> pakker"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-nl/strings.xml b/packages/VpnDialogs/res/values-nl/strings.xml
new file mode 100644
index 000000000000..add286fd6e95
--- /dev/null
+++ b/packages/VpnDialogs/res/values-nl/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> pogingen om een VPN-verbinding te maken."</string>
+ <string name="warning" msgid="5470743576660160079">"Als u doorgaat, geeft u de app toestemming om al het netwerkverkeer te onderscheppen. "<b>"Ga NIET akkoord, tenzij u de app vertrouwt."</b>" Anders loopt u het risico dat uw gegevens worden gecomprimeerd door schadelijke software."</string>
+ <string name="accept" msgid="2889226408765810173">"Ik vertrouw deze app."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Verbinding met VPN"</string>
+ <string name="configure" msgid="4905518375574791375">"Configureren"</string>
+ <string name="disconnect" msgid="971412338304200056">"Verbinding verbreken"</string>
+ <string name="session" msgid="6470628549473641030">"Sessie:"</string>
+ <string name="duration" msgid="3584782459928719435">"Duur:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Verzonden gegevens:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Ontvangen gegevens:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes/<xliff:g id="NUMBER_1">%2$s</xliff:g> pakketten"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-pl/strings.xml b/packages/VpnDialogs/res/values-pl/strings.xml
new file mode 100644
index 000000000000..f6e048d5fbc6
--- /dev/null
+++ b/packages/VpnDialogs/res/values-pl/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"Aplikacja <xliff:g id="APP">%s</xliff:g> próbuje nawiązać połączenie VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Kontynuując, udzielasz aplikacji pozwolenia na przechwytywanie całego ruchu sieciowego. "<b>"NIE rób tego, jeśli nie ufasz tej aplikacji."</b>" W przeciwnym razie ryzykujesz, że bezpieczeństwo Twoich danych zostanie naruszone przez złośliwe oprogramowanie."</string>
+ <string name="accept" msgid="2889226408765810173">"Ufam tej aplikacji"</string>
+ <string name="legacy_title" msgid="192936250066580964">"Połączono z VPN"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfiguruj"</string>
+ <string name="disconnect" msgid="971412338304200056">"Rozłącz"</string>
+ <string name="session" msgid="6470628549473641030">"Sesja:"</string>
+ <string name="duration" msgid="3584782459928719435">"Czas trwania:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Dane przesłane:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Dane odebrane:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"Bajty: <xliff:g id="NUMBER_0">%1$s</xliff:g> / pakiety: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-pt-rPT/strings.xml b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
new file mode 100644
index 000000000000..367202c79ccf
--- /dev/null
+++ b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> tentativas para criar uma ligação VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Ao continuar estará a dar permissão à aplicação para intercetar todo o tráfego da rede. "<b>"NÃO aceite a menos que confie nesta aplicação."</b>"Caso contrário, corre o risco de ver os seus dados comprometidos por software malicioso."</string>
+ <string name="accept" msgid="2889226408765810173">"Confio nesta aplicação."</string>
+ <string name="legacy_title" msgid="192936250066580964">"A VPN está ligada"</string>
+ <string name="configure" msgid="4905518375574791375">"Configurar"</string>
+ <string name="disconnect" msgid="971412338304200056">"Desligar"</string>
+ <string name="session" msgid="6470628549473641030">"Sessão"</string>
+ <string name="duration" msgid="3584782459928719435">"Duração:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Dados Transmitidos:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Dados Recebidos:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> pacotes"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-pt/strings.xml b/packages/VpnDialogs/res/values-pt/strings.xml
new file mode 100644
index 000000000000..66636026e5a6
--- /dev/null
+++ b/packages/VpnDialogs/res/values-pt/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> tentativas para criar uma conexão VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Aceitando, você dá ao aplicativo permissão para interceptar todo o tráfego de rede."<b>"Recuse, a menos que você confie no aplicativo."</b>" Caso contrário, você corre o risco de ter seus dados comprometidos por um software malicioso."</string>
+ <string name="accept" msgid="2889226408765810173">"Confio nesse aplicativo."</string>
+ <string name="legacy_title" msgid="192936250066580964">"O VPN está conectado"</string>
+ <string name="configure" msgid="4905518375574791375">"Configurar"</string>
+ <string name="disconnect" msgid="971412338304200056">"Desconectar"</string>
+ <string name="session" msgid="6470628549473641030">"Sessão:"</string>
+ <string name="duration" msgid="3584782459928719435">"Duração:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Dados transmitidos:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Dados recebidos:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes/<xliff:g id="NUMBER_1">%2$s</xliff:g> pacotes"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml
new file mode 100644
index 000000000000..bd42a36bfaab
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ro/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> încearcă să creeze o conexiune VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Dacă veţi continua, veţi da acestei aplicaţii permisiunea de a intercepta întregul trafic de reţea. "<b>"NU acceptaţi decât dacă aveţi încredere în această aplicaţie."</b>" În caz contrar, există riscul ca datele dvs. să fie compromise de un software rău intenţionat."</string>
+ <string name="accept" msgid="2889226408765810173">"Am încredere în această aplicaţie."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN este conectat"</string>
+ <string name="configure" msgid="4905518375574791375">"Configuraţi"</string>
+ <string name="disconnect" msgid="971412338304200056">"Deconectaţi"</string>
+ <string name="session" msgid="6470628549473641030">"Sesiune:"</string>
+ <string name="duration" msgid="3584782459928719435">"Durată:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Date transmise:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Date primite:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (de) octeţi/<xliff:g id="NUMBER_1">%2$s</xliff:g> (de) pachete"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ru/strings.xml b/packages/VpnDialogs/res/values-ru/strings.xml
new file mode 100644
index 000000000000..240bca9482d1
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ru/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"Настроить"</string>
+ <string name="disconnect" msgid="971412338304200056">"Разъединить"</string>
+ <string name="session" msgid="6470628549473641030">"Сеанс:"</string>
+ <string name="duration" msgid="3584782459928719435">"Продолжительность:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Отправленные данные:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Полученные данные:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> байт; пакетов: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-sk/strings.xml b/packages/VpnDialogs/res/values-sk/strings.xml
new file mode 100644
index 000000000000..16333bfa10b5
--- /dev/null
+++ b/packages/VpnDialogs/res/values-sk/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"Aplikácia <xliff:g id="APP">%s</xliff:g> sa pokúša vytvoriť pripojenie VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Ak budete pokračovať, dávate aplikácií povolenie na zastavenie celej sieťovej aktivity. "<b>"Ak aplikácii nedôverujete, NEPOKRAČUJTE."</b>" Inak riskujete, že vaše údaje budú zneužité škodlivým softvérom."</string>
+ <string name="accept" msgid="2889226408765810173">"Dôverujem tejto aplikácii."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Sieť VPN je pripojená"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurovať"</string>
+ <string name="disconnect" msgid="971412338304200056">"Odpojiť"</string>
+ <string name="session" msgid="6470628549473641030">"Relácia"</string>
+ <string name="duration" msgid="3584782459928719435">"Trvanie:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Prenášané údaje:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Prijaté dáta:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> B/<xliff:g id="NUMBER_1">%2$s</xliff:g> paketov"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-sl/strings.xml b/packages/VpnDialogs/res/values-sl/strings.xml
new file mode 100644
index 000000000000..0336905bfcfc
--- /dev/null
+++ b/packages/VpnDialogs/res/values-sl/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"Program <xliff:g id="APP">%s</xliff:g> poskuša ustvariti povezavo VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Če boste nadaljevali, boste programu dovolili prestrezanje prometa v omrežju. "<b>"Če programu ne zaupate, NE sprejmite."</b>" V nasprotnem primeru boste tvegali, da bodo podatki ranljivi za zlonamerno programsko opremo."</string>
+ <string name="accept" msgid="2889226408765810173">"Zaupam temu programu."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Povezava z navideznim zasebnim omrežjem je vzpostavljena"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfiguriranje"</string>
+ <string name="disconnect" msgid="971412338304200056">"Prekini povezavo"</string>
+ <string name="session" msgid="6470628549473641030">"Seja:"</string>
+ <string name="duration" msgid="3584782459928719435">"Trajanje:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Preneseni podatki:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Prejeti podatki:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"-"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"Št. bajtov: <xliff:g id="NUMBER_0">%1$s</xliff:g>/št. paketov: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-sr/strings.xml b/packages/VpnDialogs/res/values-sr/strings.xml
new file mode 100644
index 000000000000..b3f266e55533
--- /dev/null
+++ b/packages/VpnDialogs/res/values-sr/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"Конфигуриши"</string>
+ <string name="disconnect" msgid="971412338304200056">"Прекини везу"</string>
+ <string name="session" msgid="6470628549473641030">"Сесија:"</string>
+ <string name="duration" msgid="3584782459928719435">"Трајање:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Пренесени подаци:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Примљени подаци:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> бајт(ов)а / <xliff:g id="NUMBER_1">%2$s</xliff:g> пакета"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-sv/strings.xml b/packages/VpnDialogs/res/values-sv/strings.xml
new file mode 100644
index 000000000000..50790dfd442b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-sv/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> försöker skapa en VPN-anslutning."</string>
+ <string name="warning" msgid="5470743576660160079">"Om du fortsätter ger du appen tillåtelse att stoppa all nätverkstrafik. "<b>"Godkänn inte såvida du inte litar på appen."</b>" Annars riskerar du att skadlig programvara kommer åt din information."</string>
+ <string name="accept" msgid="2889226408765810173">"Jag litar på den här appen."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN är anslutet"</string>
+ <string name="configure" msgid="4905518375574791375">"Konfigurera"</string>
+ <string name="disconnect" msgid="971412338304200056">"Koppla från"</string>
+ <string name="session" msgid="6470628549473641030">"Session:"</string>
+ <string name="duration" msgid="3584782459928719435">"Längd:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data som överförs:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Mottagna data:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte/<xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-sw/strings.xml b/packages/VpnDialogs/res/values-sw/strings.xml
new file mode 100644
index 000000000000..318579034bc9
--- /dev/null
+++ b/packages/VpnDialogs/res/values-sw/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> inajaribu kuunda muunganisho wa VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Kwa kuendelea, unapatia programu kibali cha kuingilia trafiki ya mitandao yote."<b>"USIKUBALI isipokuwa uwe unaamini programu."</b>" La sivyo, utakua katika hatari ya data yako kuathiriwa na programu hasidi."</string>
+ <string name="accept" msgid="2889226408765810173">"Ninaamini programu hii."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN imeunganishwa"</string>
+ <string name="configure" msgid="4905518375574791375">"Sanidi"</string>
+ <string name="disconnect" msgid="971412338304200056">"Tenganisha"</string>
+ <string name="session" msgid="6470628549473641030">"Kipindi:"</string>
+ <string name="duration" msgid="3584782459928719435">"Muda:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Data Zilizopitishwa:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Data Iliyopokewa:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"baiti <xliff:g id="NUMBER_0">%1$s</xliff:g> / pakiti <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-th/strings.xml b/packages/VpnDialogs/res/values-th/strings.xml
new file mode 100644
index 000000000000..6acdda859386
--- /dev/null
+++ b/packages/VpnDialogs/res/values-th/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"กำหนดค่า"</string>
+ <string name="disconnect" msgid="971412338304200056">"ยกเลิกการเชื่อมต่อ"</string>
+ <string name="session" msgid="6470628549473641030">"เซสชัน"</string>
+ <string name="duration" msgid="3584782459928719435">"ระยะเวลา:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"ข้อมูลที่ส่ง:"</string>
+ <string name="data_received" msgid="7431729884377019935">"ข้อมูลที่ได้รับ:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ไบต์/<xliff:g id="NUMBER_1">%2$s</xliff:g> แพ็คเก็ต"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-tl/strings.xml b/packages/VpnDialogs/res/values-tl/strings.xml
new file mode 100644
index 000000000000..3d83442f0ce9
--- /dev/null
+++ b/packages/VpnDialogs/res/values-tl/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> (na) pagtatangka upang lumikha ng koneksyon ng VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Sa pamamagitan ng pagpapatuloy, binibigyan mo ng pahintulot ang application na harangin ang lahat ng trapiko ng network. "<b>"HUWAG tanggapin maliban kung nagtitiwala ka sa application."</b>" Kung hindi naman, may peligro kang makompromiso ang iyong data ng nakakapanghamak na software."</string>
+ <string name="accept" msgid="2889226408765810173">"Nagtitiwala ako sa application na ito."</string>
+ <string name="legacy_title" msgid="192936250066580964">"Nakakonekta ang VPN"</string>
+ <string name="configure" msgid="4905518375574791375">"I-configure"</string>
+ <string name="disconnect" msgid="971412338304200056">"Idiskonekta"</string>
+ <string name="session" msgid="6470628549473641030">"Session:"</string>
+ <string name="duration" msgid="3584782459928719435">"Tagal:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Naipadalang Data:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Natanggap na Data:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (na) byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> (na) packet"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-tr/strings.xml b/packages/VpnDialogs/res/values-tr/strings.xml
new file mode 100644
index 000000000000..07355f5ba7ab
--- /dev/null
+++ b/packages/VpnDialogs/res/values-tr/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g>, VPN bağlantısı kurmaya çalışıyor."</string>
+ <string name="warning" msgid="5470743576660160079">"Devam ederek uygulamaya tüm ağ trafiğini kesme iznini veriyorsunuz. "<b>"Uygulamaya güvenmiyorsanız kabul ETMEYİN."</b>" Aksi halde kötü amaçlı yazılımlar verilerinizin güvenliğini tamamen tehlikeye atabilir."</string>
+ <string name="accept" msgid="2889226408765810173">"Bu uygulamaya güveniyorum."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN bağlı"</string>
+ <string name="configure" msgid="4905518375574791375">"Yapılandır"</string>
+ <string name="disconnect" msgid="971412338304200056">"Bağlantıyı kes"</string>
+ <string name="session" msgid="6470628549473641030">"Oturum:"</string>
+ <string name="duration" msgid="3584782459928719435">"Süre:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"İletilen Veriler:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Alınan Veriler:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bayt / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-uk/strings.xml b/packages/VpnDialogs/res/values-uk/strings.xml
new file mode 100644
index 000000000000..4dc4889b6707
--- /dev/null
+++ b/packages/VpnDialogs/res/values-uk/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"Спроб створити з’єднання з мережею VPN: <xliff:g id="APP">%s</xliff:g>."</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="configure" msgid="4905518375574791375">"Налаштувати"</string>
+ <string name="disconnect" msgid="971412338304200056">"Від’єднати"</string>
+ <string name="session" msgid="6470628549473641030">"Сеанс:"</string>
+ <string name="duration" msgid="3584782459928719435">"Тривалість:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Передані дані:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Отримані дані:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"–"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"Байтів: <xliff:g id="NUMBER_0">%1$s</xliff:g> / пакетів: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-vi/strings.xml b/packages/VpnDialogs/res/values-vi/strings.xml
new file mode 100644
index 000000000000..40f772401362
--- /dev/null
+++ b/packages/VpnDialogs/res/values-vi/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> cố gắng tạo kết nối VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Khi tiếp tục, bạn sẽ cho phép ứng dụng cấp quyền ngăn chặn tất cả lưu lượng mạng. "<b>"KHÔNG chấp nhận trừ khi bạn tin cậy ứng dụng."</b>" Nếu không, bạn có nguy cơ bị phần mềm độc hại xâm phạm dữ liệu."</string>
+ <string name="accept" msgid="2889226408765810173">"Tôi tin cậy ứng dụng này."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN được kết nối"</string>
+ <string name="configure" msgid="4905518375574791375">"Định cấu hình"</string>
+ <string name="disconnect" msgid="971412338304200056">"Ngắt kết nối"</string>
+ <string name="session" msgid="6470628549473641030">"Phiên"</string>
+ <string name="duration" msgid="3584782459928719435">"Thời lượng:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Đã truyền dữ liệu:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Đã nhận dữ liệu:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byte / <xliff:g id="NUMBER_1">%2$s</xliff:g> gói"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-zh-rCN/strings.xml b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
new file mode 100644
index 000000000000..578f2aa8af9d
--- /dev/null
+++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"配置"</string>
+ <string name="disconnect" msgid="971412338304200056">"断开连接"</string>
+ <string name="session" msgid="6470628549473641030">"会话:"</string>
+ <string name="duration" msgid="3584782459928719435">"时长:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"传输的数据:"</string>
+ <string name="data_received" msgid="7431729884377019935">"收到的数据:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 字节/<xliff:g id="NUMBER_1">%2$s</xliff:g> 个数据包"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-zh-rTW/strings.xml b/packages/VpnDialogs/res/values-zh-rTW/strings.xml
new file mode 100644
index 000000000000..9e96de58358e
--- /dev/null
+++ b/packages/VpnDialogs/res/values-zh-rTW/strings.xml
@@ -0,0 +1,31 @@
+<?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="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="configure" msgid="4905518375574791375">"設定"</string>
+ <string name="disconnect" msgid="971412338304200056">"中斷連線"</string>
+ <string name="session" msgid="6470628549473641030">"工作階段:"</string>
+ <string name="duration" msgid="3584782459928719435">"持續時間:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"已傳輸的數據:"</string>
+ <string name="data_received" msgid="7431729884377019935">"已接收的數據:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 位元組 / <xliff:g id="NUMBER_1">%2$s</xliff:g> 個封包"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-zu/strings.xml b/packages/VpnDialogs/res/values-zu/strings.xml
new file mode 100644
index 000000000000..ff75ed72665b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-zu/strings.xml
@@ -0,0 +1,31 @@
+<?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="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> izama ukwenza uxhumano lwe-VPN."</string>
+ <string name="warning" msgid="5470743576660160079">"Ngokuqhubeka, unikeza uhlelo lokusebenza imvume yokuvimbela ukuphithizela kwenethiwekhi. "<b>"UNGAVUMELI ngaphandle uma wethemba uhlelo lokusebenza."</b>" Noma, ungathatha ingozi yokuba idatha yakho ibe sengcupheni yokufinyelelwa isofthiwe e-malicious."</string>
+ <string name="accept" msgid="2889226408765810173">"Ngiyaluthemba lolu hlelo lokusebenza."</string>
+ <string name="legacy_title" msgid="192936250066580964">"I-VPN ixhunyiwe"</string>
+ <string name="configure" msgid="4905518375574791375">"Misa"</string>
+ <string name="disconnect" msgid="971412338304200056">"Ayixhumekile kwi-inthanethi"</string>
+ <string name="session" msgid="6470628549473641030">"Iseshini:"</string>
+ <string name="duration" msgid="3584782459928719435">"Ubude besikhathi:"</string>
+ <string name="data_transmitted" msgid="8239988320199846094">"Idatha Ithunyelwe:"</string>
+ <string name="data_received" msgid="7431729884377019935">"Idatha Etholiwe:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> amaphakethe/ <xliff:g id="NUMBER_1">%2$s</xliff:g> amabhayithi"</string>
+</resources>
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index 06b7fb912e97..431f8e0bf115 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -292,7 +292,8 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
mKeyguardViewProperties, mUpdateMonitor);
mUserPresentIntent = new Intent(Intent.ACTION_USER_PRESENT);
- mUserPresentIntent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ mUserPresentIntent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
+ | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
final ContentResolver cr = mContext.getContentResolver();
mShowLockIcon = (Settings.System.getInt(cr, "show_status_bar_lock", 0) == 1);
@@ -1142,6 +1143,10 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
// insecure and (is covered by another window OR this feature is enabled in general)
boolean enable = !mShowing
|| ((ENABLE_STATUS_BAR_IN_KEYGUARD || mHidden) && !isSecure());
+ if (DEBUG) {
+ Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mHidden=" + mHidden
+ + " isSecure=" + isSecure() + " --> enable=" + enable);
+ }
mStatusBarManager.disable(enable ?
StatusBarManager.DISABLE_NONE :
( StatusBarManager.DISABLE_EXPAND
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index b60bae7d49eb..adcc9c0f0e8e 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -42,6 +42,7 @@ import android.os.SystemProperties;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
+import android.util.Slog;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
@@ -294,22 +295,47 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
public void reportFailedUnlockAttempt() {
mUpdateMonitor.reportFailedAttempt();
final int failedAttempts = mUpdateMonitor.getFailedAttempts();
- if (DEBUG) Log.d(TAG,
- "reportFailedPatternAttempt: #" + failedAttempts +
+ if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts +
" (enableFallback=" + mEnableFallback + ")");
- final boolean usingLockPattern = mLockPatternUtils.getKeyguardStoredPasswordQuality()
+
+ final boolean usingPattern = mLockPatternUtils.getKeyguardStoredPasswordQuality()
== DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
- if (usingLockPattern && mEnableFallback && failedAttempts ==
- (LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
- - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
- showAlmostAtAccountLoginDialog();
- } else if (usingLockPattern && mEnableFallback
- && failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
- mLockPatternUtils.setPermanentlyLocked(true);
- updateScreen(mMode);
- } else if ((failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)
- == 0) {
- showTimeoutDialog();
+
+ final int failedAttemptsBeforeWipe = mLockPatternUtils.getDevicePolicyManager()
+ .getMaximumFailedPasswordsForWipe(null);
+
+ final int failedAttemptWarning = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
+ - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
+
+ final int remainingBeforeWipe = failedAttemptsBeforeWipe > 0 ?
+ (failedAttemptsBeforeWipe - failedAttempts)
+ : Integer.MAX_VALUE; // because DPM returns 0 if no restriction
+
+ if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) {
+ // If we reach this code, it means the user has installed a DevicePolicyManager
+ // that requests device wipe after N attempts. Once we get below the grace
+ // period, we'll post this dialog every time as a clear warning until the
+ // bombshell hits and the device is wiped.
+ if (remainingBeforeWipe > 0) {
+ showAlmostAtWipeDialog(failedAttempts, remainingBeforeWipe);
+ } else {
+ // Too many attempts. The device will be wiped shortly.
+ Slog.i(TAG, "Too many unlock attempts; device will be wiped!");
+ showWipeDialog(failedAttempts);
+ }
+ } else if (usingPattern && mEnableFallback) {
+ if (failedAttempts == failedAttemptWarning) {
+ showAlmostAtAccountLoginDialog();
+ } else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
+ mLockPatternUtils.setPermanentlyLocked(true);
+ updateScreen(mMode);
+ }
+ } else {
+ final boolean showTimeout =
+ (failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
+ if (showTimeout) {
+ showTimeoutDialog();
+ }
}
mLockPatternUtils.reportFailedPasswordAttempt();
}
@@ -727,10 +753,26 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
return currentMode;
}
+ private void showDialog(String title, String message) {
+ final AlertDialog dialog = new AlertDialog.Builder(mContext)
+ .setTitle(title)
+ .setMessage(message)
+ .setNeutralButton(R.string.ok, null)
+ .create();
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+ if (!mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_sf_slowBlur)) {
+ dialog.getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
+ WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
+ }
+ dialog.show();
+ }
+
private void showTimeoutDialog() {
int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
int messageId = R.string.lockscreen_too_many_failed_attempts_dialog_message;
- if(getUnlockMode() == UnlockMode.Password) {
+ if (getUnlockMode() == UnlockMode.Password) {
if(mLockPatternUtils.getKeyguardStoredPasswordQuality() ==
DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
messageId = R.string.lockscreen_too_many_failed_pin_attempts_dialog_message;
@@ -738,46 +780,31 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
messageId = R.string.lockscreen_too_many_failed_password_attempts_dialog_message;
}
}
- String message = mContext.getString(
- messageId,
- mUpdateMonitor.getFailedAttempts(),
+ String message = mContext.getString(messageId, mUpdateMonitor.getFailedAttempts(),
timeoutInSeconds);
- final AlertDialog dialog = new AlertDialog.Builder(mContext)
- .setTitle(null)
- .setMessage(message)
- .setNeutralButton(R.string.ok, null)
- .create();
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- if (!mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_sf_slowBlur)) {
- dialog.getWindow().setFlags(
- WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
- WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
- }
- dialog.show();
+ showDialog(null, message);
}
private void showAlmostAtAccountLoginDialog() {
+ final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
+ final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
+ - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
+ String message = mContext.getString(R.string.lockscreen_failed_attempts_almost_glogin,
+ count, LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT, timeoutInSeconds);
+ showDialog(null, message);
+ }
+
+ private void showAlmostAtWipeDialog(int attempts, int remaining) {
int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
String message = mContext.getString(
- R.string.lockscreen_failed_attempts_almost_glogin,
- LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
- - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT,
- LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT,
- timeoutInSeconds);
- final AlertDialog dialog = new AlertDialog.Builder(mContext)
- .setTitle(null)
- .setMessage(message)
- .setNeutralButton(R.string.ok, null)
- .create();
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- if (!mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_sf_slowBlur)) {
- dialog.getWindow().setFlags(
- WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
- WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
- }
- dialog.show();
+ R.string.lockscreen_failed_attempts_almost_at_wipe, attempts, remaining);
+ showDialog(null, message);
+ }
+
+ private void showWipeDialog(int attempts) {
+ String message = mContext.getString(
+ R.string.lockscreen_failed_attempts_now_wiping, attempts);
+ showDialog(null, message);
}
/**
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 9d360aca07cd..4f6df3659f67 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -23,7 +23,6 @@ import com.android.internal.widget.WaveView;
import com.android.internal.widget.multiwaveview.MultiWaveView;
import android.app.ActivityManager;
-import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
@@ -46,6 +45,7 @@ import java.io.File;
*/
class LockScreen extends LinearLayout implements KeyguardScreen {
+ private static final int ON_RESUME_PING_DELAY = 500; // delay first ping until the screen is on
private static final boolean DBG = false;
private static final String TAG = "LockScreen";
private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key";
@@ -441,10 +441,16 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
mUnlockWidgetMethods.reset(false);
}
+ private final Runnable mOnResumePing = new Runnable() {
+ public void run() {
+ mUnlockWidgetMethods.ping();
+ }
+ };
+
/** {@inheritDoc} */
public void onResume() {
mStatusViewManager.onResume();
- mUnlockWidgetMethods.ping();
+ postDelayed(mOnResumePing, ON_RESUME_PING_DELAY);
}
/** {@inheritDoc} */
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index 7c1f93a2ad14..ee0a6e9e3b20 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -16,6 +16,8 @@
package com.android.internal.policy.impl;
+import java.util.List;
+
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.res.Configuration;
@@ -27,19 +29,18 @@ import com.android.internal.widget.PasswordEntryKeyboardView;
import android.os.CountDownTimer;
import android.os.SystemClock;
import android.security.KeyStore;
-import android.telephony.TelephonyManager;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.text.method.TextKeyListener;
-import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
-import android.widget.Button;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -159,6 +160,68 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen
}
}
});
+
+ // If there's more than one IME, enable the IME switcher button
+ View switchImeButton = findViewById(R.id.switch_ime_button);
+ final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (switchImeButton != null && hasMultipleEnabledIMEsOrSubtypes(imm, false)) {
+ switchImeButton.setVisibility(View.VISIBLE);
+ switchImeButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ mCallback.pokeWakelock(); // Leave the screen on a bit longer
+ imm.showInputMethodPicker();
+ }
+ });
+ }
+ }
+
+ /**
+ * Method adapted from com.android.inputmethod.latin.Utils
+ *
+ * @param imm The input method manager
+ * @param shouldIncludeAuxiliarySubtypes
+ * @return true if we have multiple IMEs to choose from
+ */
+ private boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManager imm,
+ final boolean shouldIncludeAuxiliarySubtypes) {
+ final List<InputMethodInfo> enabledImis = imm.getEnabledInputMethodList();
+
+ // Number of the filtered IMEs
+ int filteredImisCount = 0;
+
+ for (InputMethodInfo imi : enabledImis) {
+ // We can return true immediately after we find two or more filtered IMEs.
+ if (filteredImisCount > 1) return true;
+ final List<InputMethodSubtype> subtypes =
+ imm.getEnabledInputMethodSubtypeList(imi, true);
+ // IMEs that have no subtypes should be counted.
+ if (subtypes.isEmpty()) {
+ ++filteredImisCount;
+ continue;
+ }
+
+ int auxCount = 0;
+ for (InputMethodSubtype subtype : subtypes) {
+ if (subtype.isAuxiliary()) {
+ ++auxCount;
+ }
+ }
+ final int nonAuxCount = subtypes.size() - auxCount;
+
+ // IMEs that have one or more non-auxiliary subtypes should be counted.
+ // If shouldIncludeAuxiliarySubtypes is true, IMEs that have two or more auxiliary
+ // subtypes should be counted as well.
+ if (nonAuxCount > 0 || (shouldIncludeAuxiliarySubtypes && auxCount > 1)) {
+ ++filteredImisCount;
+ continue;
+ }
+ }
+
+ return filteredImisCount > 1
+ // imm.getEnabledInputMethodSubtypeList(null, false) will return the current IME's enabled
+ // input method subtype (The current IME should be LatinIME.)
+ || imm.getEnabledInputMethodSubtypeList(null, false).size() > 1;
}
@Override
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 3dcc297dde25..431a6bb6b9e8 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -235,6 +235,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
@Override
+ public void setUiOptions(int uiOptions, int mask) {
+ mUiOptions = (mUiOptions & ~mask) | (uiOptions & mask);
+ }
+
+ @Override
public void setContentView(int layoutResID) {
if (mContentParent == null) {
installDecor();
@@ -381,6 +386,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// Ditch the menu created above
st.menu = null;
+ if (mActionBar != null) {
+ // Don't show it in the action bar either
+ mActionBar.setMenu(null, mActionMenuPresenterCallback);
+ }
+
return false;
}
@@ -401,6 +411,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
if (!cb.onPreparePanel(st.featureId, st.createdPanelView, st.menu)) {
+ if (mActionBar != null) {
+ // The app didn't want to show the menu for now but it still exists.
+ // Clear it out of the action bar.
+ mActionBar.setMenu(null, mActionMenuPresenterCallback);
+ }
st.menu.startDispatchingItemsChanged();
return false;
}
@@ -572,6 +587,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
} else if (!st.isInListMode()) {
width = MATCH_PARENT;
+ } else if (st.createdPanelView != null) {
+ // If we already had a panel view, carry width=MATCH_PARENT through
+ // as we did above when it was created.
+ ViewGroup.LayoutParams lp = st.createdPanelView.getLayoutParams();
+ if (lp != null && lp.width == ViewGroup.LayoutParams.MATCH_PARENT) {
+ width = MATCH_PARENT;
+ }
}
st.isOpen = true;
@@ -748,7 +770,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (mPanelChordingKey != 0) {
mPanelChordingKey = 0;
- if (event.isCanceled()) {
+ if (event.isCanceled() || (mDecor != null && mDecor.mActionMode != null)) {
return;
}
@@ -2518,8 +2540,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if ((getForcedWindowFlags()&WindowManager.LayoutParams.FLAG_DIM_BEHIND) == 0) {
params.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
}
- params.dimAmount = a.getFloat(
- android.R.styleable.Window_backgroundDimAmount, 0.5f);
+ if (!haveDimAmount()) {
+ params.dimAmount = a.getFloat(
+ android.R.styleable.Window_backgroundDimAmount, 0.5f);
+ }
}
if (params.windowAnimations == 0) {
@@ -3134,6 +3158,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
public boolean hasPanelItems() {
if (shownPanelView == null) return false;
+ if (createdPanelView != null) return true;
if (isCompact || isInExpandedMode) {
return listMenuPresenter.getAdapter().getCount() > 0;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index ff8dc924055c..1d5fbc0acec7 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -20,6 +20,7 @@ import android.app.Activity;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.IUiModeManager;
+import android.app.ProgressDialog;
import android.app.UiModeManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
@@ -41,6 +42,8 @@ import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.LocalPowerManager;
+import android.os.Message;
+import android.os.Messenger;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -2396,22 +2399,76 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ final Object mScreenshotLock = new Object();
+ ServiceConnection mScreenshotConnection = null;
+ Runnable mScreenshotTimeout = null;
+
+ void finishScreenshotLSS(ServiceConnection conn) {
+ if (mScreenshotConnection == conn) {
+ mContext.unbindService(conn);
+ mScreenshotConnection = null;
+ if (mScreenshotTimeout != null) {
+ mHandler.removeCallbacks(mScreenshotTimeout);
+ mScreenshotTimeout = null;
+ }
+ }
+ }
+
private void takeScreenshot() {
mHandler.post(new Runnable() {
@Override
public void run() {
- ComponentName cn = new ComponentName("com.android.systemui",
- "com.android.systemui.screenshot.TakeScreenshotService");
- Intent intent = new Intent();
- intent.setComponent(cn);
- ServiceConnection conn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {}
- @Override
- public void onServiceDisconnected(ComponentName name) {}
- };
- mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE);
- mContext.unbindService(conn);
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != null) {
+ return;
+ }
+ ComponentName cn = new ComponentName("com.android.systemui",
+ "com.android.systemui.screenshot.TakeScreenshotService");
+ Intent intent = new Intent();
+ intent.setComponent(cn);
+ ServiceConnection conn = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != this) {
+ return;
+ }
+ Messenger messenger = new Messenger(service);
+ Message msg = Message.obtain(null, 1);
+ final ServiceConnection myConn = this;
+ Handler h = new Handler(mHandler.getLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ synchronized (mScreenshotLock) {
+ finishScreenshotLSS(myConn);
+ }
+ }
+ };
+ msg.replyTo = new Messenger(h);
+ try {
+ messenger.send(msg);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+ @Override
+ public void onServiceDisconnected(ComponentName name) {}
+ };
+ if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
+ mScreenshotConnection = conn;
+ mScreenshotTimeout = new Runnable() {
+ @Override public void run() {
+ synchronized (mScreenshotLock) {
+ if (mScreenshotConnection != null) {
+ finishScreenshotLSS(mScreenshotConnection);
+ }
+ }
+ }
+
+ };
+ mHandler.postDelayed(mScreenshotTimeout, 10000);
+ }
+ }
}
});
}
@@ -2850,7 +2907,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// or orientation sensor disabled
//or case.unspecified
if (mHdmiPlugged) {
- return Surface.ROTATION_0;
+ return mLandscapeRotation;
} else if (mLidOpen == LID_OPEN) {
return mLidOpenRotation;
} else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
@@ -3022,7 +3079,44 @@ public class PhoneWindowManager implements WindowManagerPolicy {
});
}
}
-
+
+ ProgressDialog mBootMsgDialog = null;
+
+ /** {@inheritDoc} */
+ public void showBootMessage(final CharSequence msg, final boolean always) {
+ mHandler.post(new Runnable() {
+ @Override public void run() {
+ if (mBootMsgDialog == null) {
+ mBootMsgDialog = new ProgressDialog(mContext);
+ mBootMsgDialog.setTitle(R.string.android_upgrading_title);
+ mBootMsgDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ mBootMsgDialog.setIndeterminate(true);
+ mBootMsgDialog.getWindow().setType(
+ WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY);
+ mBootMsgDialog.getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_DIM_BEHIND
+ | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
+ mBootMsgDialog.getWindow().setDimAmount(1);
+ mBootMsgDialog.setCancelable(false);
+ mBootMsgDialog.show();
+ }
+ mBootMsgDialog.setMessage(msg);
+ }
+ });
+ }
+
+ /** {@inheritDoc} */
+ public void hideBootMessages() {
+ mHandler.post(new Runnable() {
+ @Override public void run() {
+ if (mBootMsgDialog != null) {
+ mBootMsgDialog.dismiss();
+ mBootMsgDialog = null;
+ }
+ }
+ });
+ }
+
/** {@inheritDoc} */
public void userActivity() {
synchronized (mScreenLockTimeout) {
@@ -3229,7 +3323,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int result = ActivityManagerNative.getDefault()
.startActivity(null, dock,
dock.resolveTypeIfNeeded(mContext.getContentResolver()),
- null, 0, null, null, 0, true /* onlyIfNeeded*/, false);
+ null, 0, null, null, 0, true /* onlyIfNeeded*/, false,
+ null, null, false);
if (result == IActivityManager.START_RETURN_INTENT_TO_CALLER) {
return false;
}
@@ -3238,7 +3333,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int result = ActivityManagerNative.getDefault()
.startActivity(null, mHomeIntent,
mHomeIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
- null, 0, null, null, 0, true /* onlyIfNeeded*/, false);
+ null, 0, null, null, 0, true /* onlyIfNeeded*/, false,
+ null, null, false);
if (result == IActivityManager.START_RETURN_INTENT_TO_CALLER) {
return false;
}
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index cbdfe8c4ac38..f6ce44c8200c 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -401,6 +401,14 @@ void InputDispatcher::dispatchOnceInnerLocked(nsecs_t* nextWakeupTime) {
break;
}
+ case EventEntry::TYPE_DEVICE_RESET: {
+ DeviceResetEntry* typedEntry =
+ static_cast<DeviceResetEntry*>(mPendingEvent);
+ done = dispatchDeviceResetLocked(currentTime, typedEntry);
+ dropReason = DROP_REASON_NOT_DROPPED; // device resets are never dropped
+ break;
+ }
+
case EventEntry::TYPE_KEY: {
KeyEntry* typedEntry = static_cast<KeyEntry*>(mPendingEvent);
if (isAppSwitchDue) {
@@ -727,6 +735,19 @@ bool InputDispatcher::dispatchConfigurationChangedLocked(
return true;
}
+bool InputDispatcher::dispatchDeviceResetLocked(
+ nsecs_t currentTime, DeviceResetEntry* entry) {
+#if DEBUG_OUTBOUND_EVENT_DETAILS
+ LOGD("dispatchDeviceReset - eventTime=%lld, deviceId=%d", entry->eventTime, entry->deviceId);
+#endif
+
+ CancelationOptions options(CancelationOptions::CANCEL_ALL_EVENTS,
+ "device was reset");
+ options.deviceId = entry->deviceId;
+ synthesizeCancelationEventsForAllConnectionsLocked(options);
+ return true;
+}
+
bool InputDispatcher::dispatchKeyLocked(nsecs_t currentTime, KeyEntry* entry,
DropReason* dropReason, nsecs_t* nextWakeupTime) {
// Preprocessing.
@@ -2921,6 +2942,25 @@ void InputDispatcher::notifySwitch(const NotifySwitchArgs* args) {
args->switchCode, args->switchValue, policyFlags);
}
+void InputDispatcher::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
+#if DEBUG_INBOUND_EVENT_DETAILS
+ LOGD("notifyDeviceReset - eventTime=%lld, deviceId=%d",
+ args->eventTime, args->deviceId);
+#endif
+
+ bool needWake;
+ { // acquire lock
+ AutoMutex _l(mLock);
+
+ DeviceResetEntry* newEntry = new DeviceResetEntry(args->eventTime, args->deviceId);
+ needWake = enqueueInboundEventLocked(newEntry);
+ } // release lock
+
+ if (needWake) {
+ mLooper->wake();
+ }
+}
+
int32_t InputDispatcher::injectInputEvent(const InputEvent* event,
int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
uint32_t policyFlags) {
@@ -3196,10 +3236,12 @@ void InputDispatcher::setInputWindows(const Vector<sp<InputWindowHandle> >& inpu
LOGD("Focus left window: %s",
mFocusedWindowHandle->name.string());
#endif
- CancelationOptions options(CancelationOptions::CANCEL_NON_POINTER_EVENTS,
- "focus left window");
- synthesizeCancelationEventsForInputChannelLocked(
- mFocusedWindowHandle->inputChannel, options);
+ if (mFocusedWindowHandle->inputChannel != NULL) {
+ CancelationOptions options(CancelationOptions::CANCEL_NON_POINTER_EVENTS,
+ "focus left window");
+ synthesizeCancelationEventsForInputChannelLocked(
+ mFocusedWindowHandle->inputChannel, options);
+ }
}
if (newFocusedWindowHandle != NULL) {
#if DEBUG_FOCUS
@@ -3216,10 +3258,12 @@ void InputDispatcher::setInputWindows(const Vector<sp<InputWindowHandle> >& inpu
#if DEBUG_FOCUS
LOGD("Touched window was removed: %s", touchedWindow.windowHandle->name.string());
#endif
- CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
- "touched window was removed");
- synthesizeCancelationEventsForInputChannelLocked(
- touchedWindow.windowHandle->inputChannel, options);
+ if (touchedWindow.windowHandle->inputChannel != NULL) {
+ CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
+ "touched window was removed");
+ synthesizeCancelationEventsForInputChannelLocked(
+ touchedWindow.windowHandle->inputChannel, options);
+ }
mTouchState.windows.removeAt(i--);
}
}
@@ -4012,6 +4056,17 @@ InputDispatcher::ConfigurationChangedEntry::~ConfigurationChangedEntry() {
}
+// --- InputDispatcher::DeviceResetEntry ---
+
+InputDispatcher::DeviceResetEntry::DeviceResetEntry(nsecs_t eventTime, int32_t deviceId) :
+ EventEntry(TYPE_DEVICE_RESET, eventTime, 0),
+ deviceId(deviceId) {
+}
+
+InputDispatcher::DeviceResetEntry::~DeviceResetEntry() {
+}
+
+
// --- InputDispatcher::KeyEntry ---
InputDispatcher::KeyEntry::KeyEntry(nsecs_t eventTime,
@@ -4403,6 +4458,10 @@ bool InputDispatcher::InputState::shouldCancelKey(const KeyMemento& memento,
return false;
}
+ if (options.deviceId != -1 && memento.deviceId != options.deviceId) {
+ return false;
+ }
+
switch (options.mode) {
case CancelationOptions::CANCEL_ALL_EVENTS:
case CancelationOptions::CANCEL_NON_POINTER_EVENTS:
@@ -4416,6 +4475,10 @@ bool InputDispatcher::InputState::shouldCancelKey(const KeyMemento& memento,
bool InputDispatcher::InputState::shouldCancelMotion(const MotionMemento& memento,
const CancelationOptions& options) {
+ if (options.deviceId != -1 && memento.deviceId != options.deviceId) {
+ return false;
+ }
+
switch (options.mode) {
case CancelationOptions::CANCEL_ALL_EVENTS:
return true;
diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h
index cae1610a8bc2..3c8369181fb9 100644
--- a/services/input/InputDispatcher.h
+++ b/services/input/InputDispatcher.h
@@ -381,6 +381,7 @@ public:
virtual void notifyKey(const NotifyKeyArgs* args);
virtual void notifyMotion(const NotifyMotionArgs* args);
virtual void notifySwitch(const NotifySwitchArgs* args);
+ virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args);
virtual int32_t injectInputEvent(const InputEvent* event,
int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
@@ -424,6 +425,7 @@ private:
struct EventEntry : Link<EventEntry> {
enum {
TYPE_CONFIGURATION_CHANGED,
+ TYPE_DEVICE_RESET,
TYPE_KEY,
TYPE_MOTION
};
@@ -453,6 +455,15 @@ private:
virtual ~ConfigurationChangedEntry();
};
+ struct DeviceResetEntry : EventEntry {
+ int32_t deviceId;
+
+ DeviceResetEntry(nsecs_t eventTime, int32_t deviceId);
+
+ protected:
+ virtual ~DeviceResetEntry();
+ };
+
struct KeyEntry : EventEntry {
int32_t deviceId;
uint32_t source;
@@ -688,8 +699,11 @@ private:
// The specific keycode of the key event to cancel, or -1 to cancel any key event.
int32_t keyCode;
+ // The specific device id of events to cancel, or -1 to cancel events from any device.
+ int32_t deviceId;
+
CancelationOptions(Mode mode, const char* reason) :
- mode(mode), reason(reason), keyCode(-1) { }
+ mode(mode), reason(reason), keyCode(-1), deviceId(-1) { }
};
/* Tracks dispatched key and motion event state so that cancelation events can be
@@ -982,6 +996,8 @@ private:
// Dispatch inbound events.
bool dispatchConfigurationChangedLocked(
nsecs_t currentTime, ConfigurationChangedEntry* entry);
+ bool dispatchDeviceResetLocked(
+ nsecs_t currentTime, DeviceResetEntry* entry);
bool dispatchKeyLocked(
nsecs_t currentTime, KeyEntry* entry,
DropReason* dropReason, nsecs_t* nextWakeupTime);
diff --git a/services/input/InputListener.cpp b/services/input/InputListener.cpp
index 4f9fe90213a0..657a6b98b23c 100644
--- a/services/input/InputListener.cpp
+++ b/services/input/InputListener.cpp
@@ -118,6 +118,21 @@ void NotifySwitchArgs::notify(const sp<InputListenerInterface>& listener) const
}
+// --- NotifyDeviceResetArgs ---
+
+NotifyDeviceResetArgs::NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId) :
+ eventTime(eventTime), deviceId(deviceId) {
+}
+
+NotifyDeviceResetArgs::NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) :
+ eventTime(other.eventTime), deviceId(other.deviceId) {
+}
+
+void NotifyDeviceResetArgs::notify(const sp<InputListenerInterface>& listener) const {
+ listener->notifyDeviceReset(this);
+}
+
+
// --- QueuedInputListener ---
QueuedInputListener::QueuedInputListener(const sp<InputListenerInterface>& innerListener) :
@@ -148,6 +163,10 @@ void QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) {
mArgsQueue.push(new NotifySwitchArgs(*args));
}
+void QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
+ mArgsQueue.push(new NotifyDeviceResetArgs(*args));
+}
+
void QueuedInputListener::flush() {
size_t count = mArgsQueue.size();
for (size_t i = 0; i < count; i++) {
diff --git a/services/input/InputListener.h b/services/input/InputListener.h
index 3fef13251b7e..f920cd1f6b78 100644
--- a/services/input/InputListener.h
+++ b/services/input/InputListener.h
@@ -131,6 +131,24 @@ struct NotifySwitchArgs : public NotifyArgs {
};
+/* Describes a device reset event, such as when a device is added,
+ * reconfigured, or removed. */
+struct NotifyDeviceResetArgs : public NotifyArgs {
+ nsecs_t eventTime;
+ int32_t deviceId;
+
+ inline NotifyDeviceResetArgs() { }
+
+ NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId);
+
+ NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other);
+
+ virtual ~NotifyDeviceResetArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const;
+};
+
+
/*
* The interface used by the InputReader to notify the InputListener about input events.
*/
@@ -144,6 +162,7 @@ public:
virtual void notifyKey(const NotifyKeyArgs* args) = 0;
virtual void notifyMotion(const NotifyMotionArgs* args) = 0;
virtual void notifySwitch(const NotifySwitchArgs* args) = 0;
+ virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0;
};
@@ -162,6 +181,7 @@ public:
virtual void notifyKey(const NotifyKeyArgs* args);
virtual void notifyMotion(const NotifyMotionArgs* args);
virtual void notifySwitch(const NotifySwitchArgs* args);
+ virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args);
void flush();
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 2035a4b56ff3..40c85fc7f053 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -198,6 +198,39 @@ static void synthesizeButtonKeys(InputReaderContext* context, int32_t action,
}
+// --- InputReaderConfiguration ---
+
+bool InputReaderConfiguration::getDisplayInfo(int32_t displayId, bool external,
+ int32_t* width, int32_t* height, int32_t* orientation) const {
+ if (displayId == 0) {
+ const DisplayInfo& info = external ? mExternalDisplay : mInternalDisplay;
+ if (info.width > 0 && info.height > 0) {
+ if (width) {
+ *width = info.width;
+ }
+ if (height) {
+ *height = info.height;
+ }
+ if (orientation) {
+ *orientation = info.orientation;
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+void InputReaderConfiguration::setDisplayInfo(int32_t displayId, bool external,
+ int32_t width, int32_t height, int32_t orientation) {
+ if (displayId == 0) {
+ DisplayInfo& info = external ? mExternalDisplay : mInternalDisplay;
+ info.width = width;
+ info.height = height;
+ info.orientation = orientation;
+ }
+}
+
+
// --- InputReader ---
InputReader::InputReader(const sp<EventHubInterface>& eventHub,
@@ -289,10 +322,10 @@ void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count) {
} else {
switch (rawEvent->type) {
case EventHubInterface::DEVICE_ADDED:
- addDeviceLocked(rawEvent->deviceId);
+ addDeviceLocked(rawEvent->when, rawEvent->deviceId);
break;
case EventHubInterface::DEVICE_REMOVED:
- removeDeviceLocked(rawEvent->deviceId);
+ removeDeviceLocked(rawEvent->when, rawEvent->deviceId);
break;
case EventHubInterface::FINISHED_DEVICE_SCAN:
handleConfigurationChangedLocked(rawEvent->when);
@@ -307,12 +340,13 @@ void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count) {
}
}
-void InputReader::addDeviceLocked(int32_t deviceId) {
+void InputReader::addDeviceLocked(nsecs_t when, int32_t deviceId) {
String8 name = mEventHub->getDeviceName(deviceId);
uint32_t classes = mEventHub->getDeviceClasses(deviceId);
InputDevice* device = createDeviceLocked(deviceId, name, classes);
- device->configure(&mConfig, 0);
+ device->configure(when, &mConfig, 0);
+ device->reset(when);
if (device->isIgnored()) {
LOGI("Device added: id=%d, name='%s' (ignored non-input device)", deviceId, name.string());
@@ -331,7 +365,7 @@ void InputReader::addDeviceLocked(int32_t deviceId) {
}
}
-void InputReader::removeDeviceLocked(int32_t deviceId) {
+void InputReader::removeDeviceLocked(nsecs_t when, int32_t deviceId) {
InputDevice* device = NULL;
ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
if (deviceIndex >= 0) {
@@ -350,8 +384,7 @@ void InputReader::removeDeviceLocked(int32_t deviceId) {
device->getId(), device->getName().string(), device->getSources());
}
- device->reset();
-
+ device->reset(when);
delete device;
}
@@ -453,13 +486,14 @@ void InputReader::refreshConfigurationLocked(uint32_t changes) {
if (changes) {
LOGI("Reconfiguring input devices. changes=0x%08x", changes);
+ nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
if (changes & InputReaderConfiguration::CHANGE_MUST_REOPEN) {
mEventHub->requestReopenDevices();
} else {
for (size_t i = 0; i < mDevices.size(); i++) {
InputDevice* device = mDevices.valueAt(i);
- device->configure(&mConfig, changes);
+ device->configure(now, &mConfig, changes);
}
}
}
@@ -861,7 +895,7 @@ void InputDevice::addMapper(InputMapper* mapper) {
mMappers.add(mapper);
}
-void InputDevice::configure(const InputReaderConfiguration* config, uint32_t changes) {
+void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes) {
mSources = 0;
if (!isIgnored()) {
@@ -872,18 +906,22 @@ void InputDevice::configure(const InputReaderConfiguration* config, uint32_t cha
size_t numMappers = mMappers.size();
for (size_t i = 0; i < numMappers; i++) {
InputMapper* mapper = mMappers[i];
- mapper->configure(config, changes);
+ mapper->configure(when, config, changes);
mSources |= mapper->getSources();
}
}
}
-void InputDevice::reset() {
+void InputDevice::reset(nsecs_t when) {
size_t numMappers = mMappers.size();
for (size_t i = 0; i < numMappers; i++) {
InputMapper* mapper = mMappers[i];
- mapper->reset();
+ mapper->reset(when);
}
+
+ mContext->updateGlobalMetaState();
+
+ notifyReset(when);
}
void InputDevice::process(const RawEvent* rawEvents, size_t count) {
@@ -915,7 +953,7 @@ void InputDevice::process(const RawEvent* rawEvents, size_t count) {
} else if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_DROPPED) {
LOGI("Detected input event buffer overrun for device %s.", mName.string());
mDropUntilNextSync = true;
- reset();
+ reset(rawEvent->when);
} else {
for (size_t i = 0; i < numMappers; i++) {
InputMapper* mapper = mMappers[i];
@@ -1001,6 +1039,11 @@ void InputDevice::fadePointer() {
}
}
+void InputDevice::notifyReset(nsecs_t when) {
+ NotifyDeviceResetArgs args(when, mId);
+ mContext->getListener()->notifyDeviceReset(&args);
+}
+
// --- CursorButtonAccumulator ---
@@ -1008,6 +1051,17 @@ CursorButtonAccumulator::CursorButtonAccumulator() {
clearButtons();
}
+void CursorButtonAccumulator::reset(InputDevice* device) {
+ mBtnLeft = device->isKeyPressed(BTN_LEFT);
+ mBtnRight = device->isKeyPressed(BTN_RIGHT);
+ mBtnMiddle = device->isKeyPressed(BTN_MIDDLE);
+ mBtnBack = device->isKeyPressed(BTN_BACK);
+ mBtnSide = device->isKeyPressed(BTN_SIDE);
+ mBtnForward = device->isKeyPressed(BTN_FORWARD);
+ mBtnExtra = device->isKeyPressed(BTN_EXTRA);
+ mBtnTask = device->isKeyPressed(BTN_TASK);
+}
+
void CursorButtonAccumulator::clearButtons() {
mBtnLeft = 0;
mBtnRight = 0;
@@ -1073,21 +1127,17 @@ uint32_t CursorButtonAccumulator::getButtonState() const {
// --- CursorMotionAccumulator ---
-CursorMotionAccumulator::CursorMotionAccumulator() :
- mHaveRelWheel(false), mHaveRelHWheel(false) {
+CursorMotionAccumulator::CursorMotionAccumulator() {
clearRelativeAxes();
}
-void CursorMotionAccumulator::configure(InputDevice* device) {
- mHaveRelWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_WHEEL);
- mHaveRelHWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_HWHEEL);
+void CursorMotionAccumulator::reset(InputDevice* device) {
+ clearRelativeAxes();
}
void CursorMotionAccumulator::clearRelativeAxes() {
mRelX = 0;
mRelY = 0;
- mRelWheel = 0;
- mRelHWheel = 0;
}
void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
@@ -1099,6 +1149,39 @@ void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
case REL_Y:
mRelY = rawEvent->value;
break;
+ }
+ }
+}
+
+void CursorMotionAccumulator::finishSync() {
+ clearRelativeAxes();
+}
+
+
+// --- CursorScrollAccumulator ---
+
+CursorScrollAccumulator::CursorScrollAccumulator() :
+ mHaveRelWheel(false), mHaveRelHWheel(false) {
+ clearRelativeAxes();
+}
+
+void CursorScrollAccumulator::configure(InputDevice* device) {
+ mHaveRelWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_WHEEL);
+ mHaveRelHWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_HWHEEL);
+}
+
+void CursorScrollAccumulator::reset(InputDevice* device) {
+ clearRelativeAxes();
+}
+
+void CursorScrollAccumulator::clearRelativeAxes() {
+ mRelWheel = 0;
+ mRelHWheel = 0;
+}
+
+void CursorScrollAccumulator::process(const RawEvent* rawEvent) {
+ if (rawEvent->type == EV_REL) {
+ switch (rawEvent->scanCode) {
case REL_WHEEL:
mRelWheel = rawEvent->value;
break;
@@ -1109,6 +1192,10 @@ void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
}
}
+void CursorScrollAccumulator::finishSync() {
+ clearRelativeAxes();
+}
+
// --- TouchButtonAccumulator ---
@@ -1118,7 +1205,21 @@ TouchButtonAccumulator::TouchButtonAccumulator() :
}
void TouchButtonAccumulator::configure(InputDevice* device) {
- mHaveBtnTouch = device->getEventHub()->hasScanCode(device->getId(), BTN_TOUCH);
+ mHaveBtnTouch = device->hasKey(BTN_TOUCH);
+}
+
+void TouchButtonAccumulator::reset(InputDevice* device) {
+ mBtnTouch = device->isKeyPressed(BTN_TOUCH);
+ mBtnStylus = device->isKeyPressed(BTN_STYLUS);
+ mBtnStylus2 = device->isKeyPressed(BTN_STYLUS);
+ mBtnToolFinger = device->isKeyPressed(BTN_TOOL_FINGER);
+ mBtnToolPen = device->isKeyPressed(BTN_TOOL_PEN);
+ mBtnToolRubber = device->isKeyPressed(BTN_TOOL_RUBBER);
+ mBtnToolBrush = device->isKeyPressed(BTN_TOOL_BRUSH);
+ mBtnToolPencil = device->isKeyPressed(BTN_TOOL_PENCIL);
+ mBtnToolAirbrush = device->isKeyPressed(BTN_TOOL_AIRBRUSH);
+ mBtnToolMouse = device->isKeyPressed(BTN_TOOL_MOUSE);
+ mBtnToolLens = device->isKeyPressed(BTN_TOOL_LENS);
}
void TouchButtonAccumulator::clearButtons() {
@@ -1128,6 +1229,11 @@ void TouchButtonAccumulator::clearButtons() {
mBtnToolFinger = 0;
mBtnToolPen = 0;
mBtnToolRubber = 0;
+ mBtnToolBrush = 0;
+ mBtnToolPencil = 0;
+ mBtnToolAirbrush = 0;
+ mBtnToolMouse = 0;
+ mBtnToolLens = 0;
}
void TouchButtonAccumulator::process(const RawEvent* rawEvent) {
@@ -1151,6 +1257,21 @@ void TouchButtonAccumulator::process(const RawEvent* rawEvent) {
case BTN_TOOL_RUBBER:
mBtnToolRubber = rawEvent->value;
break;
+ case BTN_TOOL_BRUSH:
+ mBtnToolBrush = rawEvent->value;
+ break;
+ case BTN_TOOL_PENCIL:
+ mBtnToolPencil = rawEvent->value;
+ break;
+ case BTN_TOOL_AIRBRUSH:
+ mBtnToolAirbrush = rawEvent->value;
+ break;
+ case BTN_TOOL_MOUSE:
+ mBtnToolMouse = rawEvent->value;
+ break;
+ case BTN_TOOL_LENS:
+ mBtnToolLens = rawEvent->value;
+ break;
}
}
}
@@ -1167,10 +1288,13 @@ uint32_t TouchButtonAccumulator::getButtonState() const {
}
int32_t TouchButtonAccumulator::getToolType() const {
+ if (mBtnToolMouse || mBtnToolLens) {
+ return AMOTION_EVENT_TOOL_TYPE_MOUSE;
+ }
if (mBtnToolRubber) {
return AMOTION_EVENT_TOOL_TYPE_ERASER;
}
- if (mBtnToolPen) {
+ if (mBtnToolPen || mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush) {
return AMOTION_EVENT_TOOL_TYPE_STYLUS;
}
if (mBtnToolFinger) {
@@ -1180,7 +1304,9 @@ int32_t TouchButtonAccumulator::getToolType() const {
}
bool TouchButtonAccumulator::isToolActive() const {
- return mBtnTouch || mBtnToolFinger || mBtnToolPen || mBtnToolRubber;
+ return mBtnTouch || mBtnToolFinger || mBtnToolPen || mBtnToolRubber
+ || mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush
+ || mBtnToolMouse || mBtnToolLens;
}
bool TouchButtonAccumulator::isHovering() const {
@@ -1204,6 +1330,8 @@ void RawPointerAxes::clear() {
toolMinor.clear();
orientation.clear();
distance.clear();
+ tiltX.clear();
+ tiltY.clear();
trackingId.clear();
slot.clear();
}
@@ -1284,12 +1412,24 @@ SingleTouchMotionAccumulator::SingleTouchMotionAccumulator() {
clearAbsoluteAxes();
}
+void SingleTouchMotionAccumulator::reset(InputDevice* device) {
+ mAbsX = device->getAbsoluteAxisValue(ABS_X);
+ mAbsY = device->getAbsoluteAxisValue(ABS_Y);
+ mAbsPressure = device->getAbsoluteAxisValue(ABS_PRESSURE);
+ mAbsToolWidth = device->getAbsoluteAxisValue(ABS_TOOL_WIDTH);
+ mAbsDistance = device->getAbsoluteAxisValue(ABS_DISTANCE);
+ mAbsTiltX = device->getAbsoluteAxisValue(ABS_TILT_X);
+ mAbsTiltY = device->getAbsoluteAxisValue(ABS_TILT_Y);
+}
+
void SingleTouchMotionAccumulator::clearAbsoluteAxes() {
mAbsX = 0;
mAbsY = 0;
mAbsPressure = 0;
mAbsToolWidth = 0;
mAbsDistance = 0;
+ mAbsTiltX = 0;
+ mAbsTiltY = 0;
}
void SingleTouchMotionAccumulator::process(const RawEvent* rawEvent) {
@@ -1310,6 +1450,12 @@ void SingleTouchMotionAccumulator::process(const RawEvent* rawEvent) {
case ABS_DISTANCE:
mAbsDistance = rawEvent->value;
break;
+ case ABS_TILT_X:
+ mAbsTiltX = rawEvent->value;
+ break;
+ case ABS_TILT_Y:
+ mAbsTiltY = rawEvent->value;
+ break;
}
}
}
@@ -1333,9 +1479,37 @@ void MultiTouchMotionAccumulator::configure(size_t slotCount, bool usingSlotsPro
mSlots = new Slot[slotCount];
}
+void MultiTouchMotionAccumulator::reset(InputDevice* device) {
+ // Unfortunately there is no way to read the initial contents of the slots.
+ // So when we reset the accumulator, we must assume they are all zeroes.
+ if (mUsingSlotsProtocol) {
+ // Query the driver for the current slot index and use it as the initial slot
+ // before we start reading events from the device. It is possible that the
+ // current slot index will not be the same as it was when the first event was
+ // written into the evdev buffer, which means the input mapper could start
+ // out of sync with the initial state of the events in the evdev buffer.
+ // In the extremely unlikely case that this happens, the data from
+ // two slots will be confused until the next ABS_MT_SLOT event is received.
+ // This can cause the touch point to "jump", but at least there will be
+ // no stuck touches.
+ int32_t initialSlot;
+ status_t status = device->getEventHub()->getAbsoluteAxisValue(device->getId(),
+ ABS_MT_SLOT, &initialSlot);
+ if (status) {
+ LOGD("Could not retrieve current multitouch slot index. status=%d", status);
+ initialSlot = -1;
+ }
+ clearSlots(initialSlot);
+ } else {
+ clearSlots(-1);
+ }
+}
+
void MultiTouchMotionAccumulator::clearSlots(int32_t initialSlot) {
- for (size_t i = 0; i < mSlotCount; i++) {
- mSlots[i].clear();
+ if (mSlots) {
+ for (size_t i = 0; i < mSlotCount; i++) {
+ mSlots[i].clear();
+ }
}
mCurrentSlot = initialSlot;
}
@@ -1425,6 +1599,12 @@ void MultiTouchMotionAccumulator::process(const RawEvent* rawEvent) {
}
}
+void MultiTouchMotionAccumulator::finishSync() {
+ if (!mUsingSlotsProtocol) {
+ clearSlots(-1);
+ }
+}
+
// --- MultiTouchMotionAccumulator::Slot ---
@@ -1479,10 +1659,11 @@ void InputMapper::populateDeviceInfo(InputDeviceInfo* info) {
void InputMapper::dump(String8& dump) {
}
-void InputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
+void InputMapper::configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
}
-void InputMapper::reset() {
+void InputMapper::reset(nsecs_t when) {
}
void InputMapper::timeoutExpired(nsecs_t when) {
@@ -1564,17 +1745,11 @@ KeyboardInputMapper::KeyboardInputMapper(InputDevice* device,
uint32_t source, int32_t keyboardType) :
InputMapper(device), mSource(source),
mKeyboardType(keyboardType) {
- initialize();
}
KeyboardInputMapper::~KeyboardInputMapper() {
}
-void KeyboardInputMapper::initialize() {
- mMetaState = AMETA_NONE;
- mDownTime = 0;
-}
-
uint32_t KeyboardInputMapper::getSources() {
return mSource;
}
@@ -1589,21 +1764,31 @@ void KeyboardInputMapper::dump(String8& dump) {
dump.append(INDENT2 "Keyboard Input Mapper:\n");
dumpParameters(dump);
dump.appendFormat(INDENT3 "KeyboardType: %d\n", mKeyboardType);
+ dump.appendFormat(INDENT3 "Orientation: %d\n", mOrientation);
dump.appendFormat(INDENT3 "KeyDowns: %d keys currently down\n", mKeyDowns.size());
dump.appendFormat(INDENT3 "MetaState: 0x%0x\n", mMetaState);
dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
}
-void KeyboardInputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
- InputMapper::configure(config, changes);
+void KeyboardInputMapper::configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
+ InputMapper::configure(when, config, changes);
if (!changes) { // first time only
// Configure basic parameters.
configureParameters();
+ }
- // Reset LEDs.
- resetLedState();
+ if (!changes || (changes & InputReaderConfiguration::CHANGE_DISPLAY_INFO)) {
+ if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0) {
+ if (!config->getDisplayInfo(mParameters.associatedDisplayId,
+ false /*external*/, NULL, NULL, &mOrientation)) {
+ mOrientation = DISPLAY_ORIENTATION_0;
+ }
+ } else {
+ mOrientation = DISPLAY_ORIENTATION_0;
+ }
}
}
@@ -1626,19 +1811,14 @@ void KeyboardInputMapper::dumpParameters(String8& dump) {
toString(mParameters.orientationAware));
}
-void KeyboardInputMapper::reset() {
- // Synthesize key up event on reset if keys are currently down.
- while (!mKeyDowns.isEmpty()) {
- const KeyDown& keyDown = mKeyDowns.top();
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
- processKey(when, false, keyDown.keyCode, keyDown.scanCode, 0);
- }
+void KeyboardInputMapper::reset(nsecs_t when) {
+ mMetaState = AMETA_NONE;
+ mDownTime = 0;
+ mKeyDowns.clear();
- initialize();
resetLedState();
- InputMapper::reset();
- getContext()->updateGlobalMetaState();
+ InputMapper::reset(when);
}
void KeyboardInputMapper::process(const RawEvent* rawEvent) {
@@ -1666,15 +1846,8 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
if (down) {
// Rotate key codes according to orientation if needed.
- // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0) {
- int32_t orientation;
- if (!getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
- false /*external*/, NULL, NULL, & orientation)) {
- orientation = DISPLAY_ORIENTATION_0;
- }
-
- keyCode = rotateKeyCode(keyCode, orientation);
+ keyCode = rotateKeyCode(keyCode, mOrientation);
}
// Add key down.
@@ -1813,7 +1986,6 @@ void KeyboardInputMapper::updateLedStateForModifier(LedState& ledState,
CursorInputMapper::CursorInputMapper(InputDevice* device) :
InputMapper(device) {
- initialize();
}
CursorInputMapper::~CursorInputMapper() {
@@ -1838,10 +2010,10 @@ void CursorInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
}
info->addMotionRange(AMOTION_EVENT_AXIS_PRESSURE, mSource, 0.0f, 1.0f, 0.0f, 0.0f);
- if (mCursorMotionAccumulator.haveRelativeVWheel()) {
+ if (mCursorScrollAccumulator.haveRelativeVWheel()) {
info->addMotionRange(AMOTION_EVENT_AXIS_VSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f);
}
- if (mCursorMotionAccumulator.haveRelativeHWheel()) {
+ if (mCursorScrollAccumulator.haveRelativeHWheel()) {
info->addMotionRange(AMOTION_EVENT_AXIS_HSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f);
}
}
@@ -1854,21 +2026,23 @@ void CursorInputMapper::dump(String8& dump) {
dump.appendFormat(INDENT3 "XPrecision: %0.3f\n", mXPrecision);
dump.appendFormat(INDENT3 "YPrecision: %0.3f\n", mYPrecision);
dump.appendFormat(INDENT3 "HaveVWheel: %s\n",
- toString(mCursorMotionAccumulator.haveRelativeVWheel()));
+ toString(mCursorScrollAccumulator.haveRelativeVWheel()));
dump.appendFormat(INDENT3 "HaveHWheel: %s\n",
- toString(mCursorMotionAccumulator.haveRelativeHWheel()));
+ toString(mCursorScrollAccumulator.haveRelativeHWheel()));
dump.appendFormat(INDENT3 "VWheelScale: %0.3f\n", mVWheelScale);
dump.appendFormat(INDENT3 "HWheelScale: %0.3f\n", mHWheelScale);
+ dump.appendFormat(INDENT3 "Orientation: %d\n", mOrientation);
dump.appendFormat(INDENT3 "ButtonState: 0x%08x\n", mButtonState);
dump.appendFormat(INDENT3 "Down: %s\n", toString(isPointerDown(mButtonState)));
dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
}
-void CursorInputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
- InputMapper::configure(config, changes);
+void CursorInputMapper::configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
+ InputMapper::configure(when, config, changes);
if (!changes) { // first time only
- mCursorMotionAccumulator.configure(getDevice());
+ mCursorScrollAccumulator.configure(getDevice());
// Configure basic parameters.
configureParameters();
@@ -1901,6 +2075,17 @@ void CursorInputMapper::configure(const InputReaderConfiguration* config, uint32
mWheelXVelocityControl.setParameters(config->wheelVelocityControlParameters);
mWheelYVelocityControl.setParameters(config->wheelVelocityControlParameters);
}
+
+ if (!changes || (changes & InputReaderConfiguration::CHANGE_DISPLAY_INFO)) {
+ if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0) {
+ if (!config->getDisplayInfo(mParameters.associatedDisplayId,
+ false /*external*/, NULL, NULL, &mOrientation)) {
+ mOrientation = DISPLAY_ORIENTATION_0;
+ }
+ } else {
+ mOrientation = DISPLAY_ORIENTATION_0;
+ }
+ }
}
void CursorInputMapper::configureParameters() {
@@ -1944,34 +2129,25 @@ void CursorInputMapper::dumpParameters(String8& dump) {
toString(mParameters.orientationAware));
}
-void CursorInputMapper::initialize() {
- mCursorButtonAccumulator.clearButtons();
- mCursorMotionAccumulator.clearRelativeAxes();
-
+void CursorInputMapper::reset(nsecs_t when) {
mButtonState = 0;
mDownTime = 0;
-}
-void CursorInputMapper::reset() {
- // Reset velocity.
mPointerVelocityControl.reset();
mWheelXVelocityControl.reset();
mWheelYVelocityControl.reset();
- // Synthesize button up event on reset.
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
- mCursorButtonAccumulator.clearButtons();
- mCursorMotionAccumulator.clearRelativeAxes();
- sync(when);
-
- initialize();
+ mCursorButtonAccumulator.reset(getDevice());
+ mCursorMotionAccumulator.reset(getDevice());
+ mCursorScrollAccumulator.reset(getDevice());
- InputMapper::reset();
+ InputMapper::reset(when);
}
void CursorInputMapper::process(const RawEvent* rawEvent) {
mCursorButtonAccumulator.process(rawEvent);
mCursorMotionAccumulator.process(rawEvent);
+ mCursorScrollAccumulator.process(rawEvent);
if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_REPORT) {
sync(rawEvent->when);
@@ -2001,19 +2177,13 @@ void CursorInputMapper::sync(nsecs_t when) {
float deltaY = mCursorMotionAccumulator.getRelativeY() * mYScale;
bool moved = deltaX != 0 || deltaY != 0;
+ // Rotate delta according to orientation if needed.
if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0
&& (deltaX != 0.0f || deltaY != 0.0f)) {
- // Rotate motion based on display orientation if needed.
- // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
- int32_t orientation;
- if (! getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
- false /*external*/, NULL, NULL, & orientation)) {
- orientation = DISPLAY_ORIENTATION_0;
- }
-
- rotateDelta(orientation, &deltaX, &deltaY);
+ rotateDelta(mOrientation, &deltaX, &deltaY);
}
+ // Move the pointer.
PointerProperties pointerProperties;
pointerProperties.clear();
pointerProperties.id = 0;
@@ -2022,8 +2192,8 @@ void CursorInputMapper::sync(nsecs_t when) {
PointerCoords pointerCoords;
pointerCoords.clear();
- float vscroll = mCursorMotionAccumulator.getRelativeVWheel();
- float hscroll = mCursorMotionAccumulator.getRelativeHWheel();
+ float vscroll = mCursorScrollAccumulator.getRelativeVWheel();
+ float hscroll = mCursorScrollAccumulator.getRelativeHWheel();
bool scrolled = vscroll != 0 || hscroll != 0;
mWheelYVelocityControl.move(when, NULL, &vscroll);
@@ -2115,7 +2285,8 @@ void CursorInputMapper::sync(nsecs_t when) {
synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mSource,
policyFlags, lastButtonState, currentButtonState);
- mCursorMotionAccumulator.clearRelativeAxes();
+ mCursorMotionAccumulator.finishSync();
+ mCursorScrollAccumulator.finishSync();
}
int32_t CursorInputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
@@ -2137,65 +2308,57 @@ void CursorInputMapper::fadePointer() {
TouchInputMapper::TouchInputMapper(InputDevice* device) :
InputMapper(device),
+ mSource(0), mDeviceMode(DEVICE_MODE_DISABLED),
mSurfaceOrientation(-1), mSurfaceWidth(-1), mSurfaceHeight(-1) {
- initialize();
}
TouchInputMapper::~TouchInputMapper() {
}
uint32_t TouchInputMapper::getSources() {
- return mTouchSource | mPointerSource;
+ return mSource;
}
void TouchInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
InputMapper::populateDeviceInfo(info);
- // Ensure surface information is up to date so that orientation changes are
- // noticed immediately.
- if (!configureSurface()) {
- return;
- }
-
- info->addMotionRange(mOrientedRanges.x);
- info->addMotionRange(mOrientedRanges.y);
-
- if (mOrientedRanges.havePressure) {
+ if (mDeviceMode != DEVICE_MODE_DISABLED) {
+ info->addMotionRange(mOrientedRanges.x);
+ info->addMotionRange(mOrientedRanges.y);
info->addMotionRange(mOrientedRanges.pressure);
- }
- if (mOrientedRanges.haveSize) {
- info->addMotionRange(mOrientedRanges.size);
- }
+ if (mOrientedRanges.haveSize) {
+ info->addMotionRange(mOrientedRanges.size);
+ }
- if (mOrientedRanges.haveTouchSize) {
- info->addMotionRange(mOrientedRanges.touchMajor);
- info->addMotionRange(mOrientedRanges.touchMinor);
- }
+ if (mOrientedRanges.haveTouchSize) {
+ info->addMotionRange(mOrientedRanges.touchMajor);
+ info->addMotionRange(mOrientedRanges.touchMinor);
+ }
- if (mOrientedRanges.haveToolSize) {
- info->addMotionRange(mOrientedRanges.toolMajor);
- info->addMotionRange(mOrientedRanges.toolMinor);
- }
+ if (mOrientedRanges.haveToolSize) {
+ info->addMotionRange(mOrientedRanges.toolMajor);
+ info->addMotionRange(mOrientedRanges.toolMinor);
+ }
- if (mOrientedRanges.haveOrientation) {
- info->addMotionRange(mOrientedRanges.orientation);
- }
+ if (mOrientedRanges.haveOrientation) {
+ info->addMotionRange(mOrientedRanges.orientation);
+ }
- if (mOrientedRanges.haveDistance) {
- info->addMotionRange(mOrientedRanges.distance);
- }
+ if (mOrientedRanges.haveDistance) {
+ info->addMotionRange(mOrientedRanges.distance);
+ }
- if (mPointerController != NULL) {
- float minX, minY, maxX, maxY;
- if (mPointerController->getBounds(&minX, &minY, &maxX, &maxY)) {
- info->addMotionRange(AMOTION_EVENT_AXIS_X, mPointerSource,
- minX, maxX, 0.0f, 0.0f);
- info->addMotionRange(AMOTION_EVENT_AXIS_Y, mPointerSource,
- minY, maxY, 0.0f, 0.0f);
+ if (mOrientedRanges.haveTilt) {
+ info->addMotionRange(mOrientedRanges.tilt);
+ }
+
+ if (mCursorScrollAccumulator.haveRelativeVWheel()) {
+ info->addMotionRange(AMOTION_EVENT_AXIS_VSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f);
+ }
+ if (mCursorScrollAccumulator.haveRelativeHWheel()) {
+ info->addMotionRange(AMOTION_EVENT_AXIS_HSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f);
}
- info->addMotionRange(AMOTION_EVENT_AXIS_PRESSURE, mPointerSource,
- 0.0f, 1.0f, 0.0f, 0.0f);
}
}
@@ -2215,8 +2378,14 @@ void TouchInputMapper::dump(String8& dump) {
dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mGeometricScale);
dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mPressureScale);
dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mSizeScale);
+ dump.appendFormat(INDENT4 "OrientationCenter: %0.3f\n", mOrientationCenter);
dump.appendFormat(INDENT4 "OrientationScale: %0.3f\n", mOrientationScale);
dump.appendFormat(INDENT4 "DistanceScale: %0.3f\n", mDistanceScale);
+ dump.appendFormat(INDENT4 "HaveTilt: %s\n", toString(mHaveTilt));
+ dump.appendFormat(INDENT4 "TiltXCenter: %0.3f\n", mTiltXCenter);
+ dump.appendFormat(INDENT4 "TiltXScale: %0.3f\n", mTiltXScale);
+ dump.appendFormat(INDENT4 "TiltYCenter: %0.3f\n", mTiltYCenter);
+ dump.appendFormat(INDENT4 "TiltYScale: %0.3f\n", mTiltYScale);
dump.appendFormat(INDENT3 "Last Button State: 0x%08x\n", mLastButtonState);
@@ -2226,11 +2395,12 @@ void TouchInputMapper::dump(String8& dump) {
const RawPointerData::Pointer& pointer = mLastRawPointerData.pointers[i];
dump.appendFormat(INDENT4 "[%d]: id=%d, x=%d, y=%d, pressure=%d, "
"touchMajor=%d, touchMinor=%d, toolMajor=%d, toolMinor=%d, "
- "orientation=%d, distance=%d, toolType=%d, isHovering=%s\n", i,
+ "orientation=%d, tiltX=%d, tiltY=%d, distance=%d, "
+ "toolType=%d, isHovering=%s\n", i,
pointer.id, pointer.x, pointer.y, pointer.pressure,
pointer.touchMajor, pointer.touchMinor,
pointer.toolMajor, pointer.toolMinor,
- pointer.orientation, pointer.distance,
+ pointer.orientation, pointer.tiltX, pointer.tiltY, pointer.distance,
pointer.toolType, toString(pointer.isHovering));
}
@@ -2241,7 +2411,8 @@ void TouchInputMapper::dump(String8& dump) {
const PointerCoords& pointerCoords = mLastCookedPointerData.pointerCoords[i];
dump.appendFormat(INDENT4 "[%d]: id=%d, x=%0.3f, y=%0.3f, pressure=%0.3f, "
"touchMajor=%0.3f, touchMinor=%0.3f, toolMajor=%0.3f, toolMinor=%0.3f, "
- "orientation=%0.3f, distance=%0.3f, toolType=%d, isHovering=%s\n", i,
+ "orientation=%0.3f, tilt=%0.3f, distance=%0.3f, "
+ "toolType=%d, isHovering=%s\n", i,
pointerProperties.id,
pointerCoords.getX(),
pointerCoords.getY(),
@@ -2251,50 +2422,30 @@ void TouchInputMapper::dump(String8& dump) {
pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TILT),
pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_DISTANCE),
pointerProperties.toolType,
toString(mLastCookedPointerData.isHovering(i)));
}
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
+ if (mDeviceMode == DEVICE_MODE_POINTER) {
dump.appendFormat(INDENT3 "Pointer Gesture Detector:\n");
dump.appendFormat(INDENT4 "XMovementScale: %0.3f\n",
- mPointerGestureXMovementScale);
+ mPointerXMovementScale);
dump.appendFormat(INDENT4 "YMovementScale: %0.3f\n",
- mPointerGestureYMovementScale);
+ mPointerYMovementScale);
dump.appendFormat(INDENT4 "XZoomScale: %0.3f\n",
- mPointerGestureXZoomScale);
+ mPointerXZoomScale);
dump.appendFormat(INDENT4 "YZoomScale: %0.3f\n",
- mPointerGestureYZoomScale);
+ mPointerYZoomScale);
dump.appendFormat(INDENT4 "MaxSwipeWidth: %f\n",
mPointerGestureMaxSwipeWidth);
}
}
-void TouchInputMapper::initialize() {
- mCurrentRawPointerData.clear();
- mLastRawPointerData.clear();
- mCurrentCookedPointerData.clear();
- mLastCookedPointerData.clear();
- mCurrentButtonState = 0;
- mLastButtonState = 0;
- mSentHoverEnter = false;
- mDownTime = 0;
-
- mCurrentVirtualKey.down = false;
-
- mOrientedRanges.havePressure = false;
- mOrientedRanges.haveSize = false;
- mOrientedRanges.haveTouchSize = false;
- mOrientedRanges.haveToolSize = false;
- mOrientedRanges.haveOrientation = false;
- mOrientedRanges.haveDistance = false;
-
- mPointerGesture.reset();
-}
-
-void TouchInputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
- InputMapper::configure(config, changes);
+void TouchInputMapper::configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
+ InputMapper::configure(when, config, changes);
mConfig = *config;
@@ -2302,23 +2453,9 @@ void TouchInputMapper::configure(const InputReaderConfiguration* config, uint32_
// Configure basic parameters.
configureParameters();
- // Configure sources.
- switch (mParameters.deviceType) {
- case Parameters::DEVICE_TYPE_TOUCH_SCREEN:
- mTouchSource = AINPUT_SOURCE_TOUCHSCREEN;
- mPointerSource = 0;
- break;
- case Parameters::DEVICE_TYPE_TOUCH_PAD:
- mTouchSource = AINPUT_SOURCE_TOUCHPAD;
- mPointerSource = 0;
- break;
- case Parameters::DEVICE_TYPE_POINTER:
- mTouchSource = AINPUT_SOURCE_TOUCHPAD;
- mPointerSource = AINPUT_SOURCE_MOUSE;
- break;
- default:
- LOG_ASSERT(false);
- }
+ // Configure common accumulators.
+ mCursorScrollAccumulator.configure(getDevice());
+ mTouchButtonAccumulator.configure(getDevice());
// Configure absolute axis information.
configureRawPointerAxes();
@@ -2326,19 +2463,27 @@ void TouchInputMapper::configure(const InputReaderConfiguration* config, uint32_
// Prepare input device calibration.
parseCalibration();
resolveCalibration();
-
- // Configure surface dimensions and orientation.
- configureSurface();
}
if (!changes || (changes & InputReaderConfiguration::CHANGE_POINTER_SPEED)) {
- mPointerGesture.pointerVelocityControl.setParameters(
- mConfig.pointerVelocityControlParameters);
+ // Update pointer speed.
+ mPointerVelocityControl.setParameters(mConfig.pointerVelocityControlParameters);
+ mWheelXVelocityControl.setParameters(mConfig.wheelVelocityControlParameters);
+ mWheelYVelocityControl.setParameters(mConfig.wheelVelocityControlParameters);
}
- if (!changes || (changes & InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT)) {
- // Reset the touch screen when pointer gesture enablement changes.
- reset();
+ bool resetNeeded = false;
+ if (!changes || (changes & (InputReaderConfiguration::CHANGE_DISPLAY_INFO
+ | InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT))) {
+ // Configure device sources, surface dimensions, orientation and
+ // scaling factors.
+ configureSurface(when, &resetNeeded);
+ }
+
+ if (changes && resetNeeded) {
+ // Send reset, unless this is the first time the device has been configured,
+ // in which case the reader will call reset itself after all mappers are ready.
+ getDevice()->notifyReset(when);
}
}
@@ -2435,8 +2580,8 @@ void TouchInputMapper::dumpParameters(String8& dump) {
LOG_ASSERT(false);
}
- dump.appendFormat(INDENT4 "AssociatedDisplayId: %d\n",
- mParameters.associatedDisplayId);
+ dump.appendFormat(INDENT4 "AssociatedDisplay: id=%d, isExternal=%s\n",
+ mParameters.associatedDisplayId, toString(mParameters.associatedDisplayIsExternal));
dump.appendFormat(INDENT4 "OrientationAware: %s\n",
toString(mParameters.orientationAware));
}
@@ -2456,47 +2601,79 @@ void TouchInputMapper::dumpRawPointerAxes(String8& dump) {
dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.toolMinor, "ToolMinor");
dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.orientation, "Orientation");
dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.distance, "Distance");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.tiltX, "TiltX");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.tiltY, "TiltY");
dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.trackingId, "TrackingId");
dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.slot, "Slot");
}
-bool TouchInputMapper::configureSurface() {
+void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
+ int32_t oldDeviceMode = mDeviceMode;
+
+ // Determine device mode.
+ if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER
+ && mConfig.pointerGesturesEnabled) {
+ mSource = AINPUT_SOURCE_MOUSE;
+ mDeviceMode = DEVICE_MODE_POINTER;
+ } else if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN
+ && mParameters.associatedDisplayId >= 0) {
+ mSource = AINPUT_SOURCE_TOUCHSCREEN;
+ mDeviceMode = DEVICE_MODE_DIRECT;
+ } else {
+ mSource = AINPUT_SOURCE_TOUCHPAD;
+ mDeviceMode = DEVICE_MODE_UNSCALED;
+ }
+
// Ensure we have valid X and Y axes.
if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) {
LOGW(INDENT "Touch device '%s' did not report support for X or Y axis! "
"The device will be inoperable.", getDeviceName().string());
- return false;
+ mDeviceMode = DEVICE_MODE_DISABLED;
+ return;
}
- // Update orientation and dimensions if needed.
- int32_t orientation = DISPLAY_ORIENTATION_0;
- int32_t width = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
- int32_t height = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
-
+ // Get associated display dimensions.
if (mParameters.associatedDisplayId >= 0) {
- // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
- if (! getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
+ if (!mConfig.getDisplayInfo(mParameters.associatedDisplayId,
mParameters.associatedDisplayIsExternal,
&mAssociatedDisplayWidth, &mAssociatedDisplayHeight,
&mAssociatedDisplayOrientation)) {
- return false;
+ LOGI(INDENT "Touch device '%s' could not query the properties of its associated "
+ "display %d. The device will be inoperable until the display size "
+ "becomes available.",
+ getDeviceName().string(), mParameters.associatedDisplayId);
+ mDeviceMode = DEVICE_MODE_DISABLED;
+ return;
}
+ }
- // A touch screen inherits the dimensions of the display.
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN) {
- width = mAssociatedDisplayWidth;
- height = mAssociatedDisplayHeight;
- }
+ // Configure dimensions.
+ int32_t width, height, orientation;
+ if (mDeviceMode == DEVICE_MODE_DIRECT || mDeviceMode == DEVICE_MODE_POINTER) {
+ width = mAssociatedDisplayWidth;
+ height = mAssociatedDisplayHeight;
+ orientation = mParameters.orientationAware ?
+ mAssociatedDisplayOrientation : DISPLAY_ORIENTATION_0;
+ } else {
+ width = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
+ height = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
+ orientation = DISPLAY_ORIENTATION_0;
+ }
+
+ // If moving between pointer modes, need to reset some state.
+ bool deviceModeChanged;
+ if (mDeviceMode != oldDeviceMode) {
+ deviceModeChanged = true;
- // The device inherits the orientation of the display if it is orientation aware.
- if (mParameters.orientationAware) {
- orientation = mAssociatedDisplayOrientation;
+ if (mDeviceMode == DEVICE_MODE_POINTER) {
+ if (mPointerController == NULL) {
+ mPointerController = getPolicy()->obtainPointerController(getDeviceId());
+ }
+ } else {
+ mPointerController.clear();
}
- }
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER
- && mPointerController == NULL) {
- mPointerController = getPolicy()->obtainPointerController(getDeviceId());
+ mOrientedRanges.clear();
}
bool orientationChanged = mSurfaceOrientation != orientation;
@@ -2505,9 +2682,9 @@ bool TouchInputMapper::configureSurface() {
}
bool sizeChanged = mSurfaceWidth != width || mSurfaceHeight != height;
- if (sizeChanged) {
- LOGI("Device reconfigured: id=%d, name='%s', surface size is now %dx%d",
- getDeviceId(), getDeviceName().string(), width, height);
+ if (sizeChanged || deviceModeChanged) {
+ LOGI("Device reconfigured: id=%d, name='%s', surface size is now %dx%d, mode is %d",
+ getDeviceId(), getDeviceName().string(), width, height, mDeviceMode);
mSurfaceWidth = width;
mSurfaceHeight = height;
@@ -2519,9 +2696,9 @@ bool TouchInputMapper::configureSurface() {
mYPrecision = 1.0f / mYScale;
mOrientedRanges.x.axis = AMOTION_EVENT_AXIS_X;
- mOrientedRanges.x.source = mTouchSource;
+ mOrientedRanges.x.source = mSource;
mOrientedRanges.y.axis = AMOTION_EVENT_AXIS_Y;
- mOrientedRanges.y.source = mTouchSource;
+ mOrientedRanges.y.source = mSource;
configureVirtualKeys();
@@ -2550,7 +2727,7 @@ bool TouchInputMapper::configureSurface() {
mOrientedRanges.haveSize = true;
mOrientedRanges.touchMajor.axis = AMOTION_EVENT_AXIS_TOUCH_MAJOR;
- mOrientedRanges.touchMajor.source = mTouchSource;
+ mOrientedRanges.touchMajor.source = mSource;
mOrientedRanges.touchMajor.min = 0;
mOrientedRanges.touchMajor.max = diagonalSize;
mOrientedRanges.touchMajor.flat = 0;
@@ -2560,7 +2737,7 @@ bool TouchInputMapper::configureSurface() {
mOrientedRanges.touchMinor.axis = AMOTION_EVENT_AXIS_TOUCH_MINOR;
mOrientedRanges.toolMajor.axis = AMOTION_EVENT_AXIS_TOOL_MAJOR;
- mOrientedRanges.toolMajor.source = mTouchSource;
+ mOrientedRanges.toolMajor.source = mSource;
mOrientedRanges.toolMajor.min = 0;
mOrientedRanges.toolMajor.max = diagonalSize;
mOrientedRanges.toolMajor.flat = 0;
@@ -2570,7 +2747,7 @@ bool TouchInputMapper::configureSurface() {
mOrientedRanges.toolMinor.axis = AMOTION_EVENT_AXIS_TOOL_MINOR;
mOrientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE;
- mOrientedRanges.size.source = mTouchSource;
+ mOrientedRanges.size.source = mSource;
mOrientedRanges.size.min = 0;
mOrientedRanges.size.max = 1.0;
mOrientedRanges.size.flat = 0;
@@ -2581,44 +2758,77 @@ bool TouchInputMapper::configureSurface() {
// Pressure factors.
mPressureScale = 0;
- if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE) {
- if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_PHYSICAL
- || mCalibration.pressureCalibration
- == Calibration::PRESSURE_CALIBRATION_AMPLITUDE) {
- if (mCalibration.havePressureScale) {
- mPressureScale = mCalibration.pressureScale;
- } else if (mRawPointerAxes.pressure.valid
- && mRawPointerAxes.pressure.maxValue != 0) {
- mPressureScale = 1.0f / mRawPointerAxes.pressure.maxValue;
- }
+ if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_PHYSICAL
+ || mCalibration.pressureCalibration
+ == Calibration::PRESSURE_CALIBRATION_AMPLITUDE) {
+ if (mCalibration.havePressureScale) {
+ mPressureScale = mCalibration.pressureScale;
+ } else if (mRawPointerAxes.pressure.valid
+ && mRawPointerAxes.pressure.maxValue != 0) {
+ mPressureScale = 1.0f / mRawPointerAxes.pressure.maxValue;
}
+ }
- mOrientedRanges.havePressure = true;
-
- mOrientedRanges.pressure.axis = AMOTION_EVENT_AXIS_PRESSURE;
- mOrientedRanges.pressure.source = mTouchSource;
- mOrientedRanges.pressure.min = 0;
- mOrientedRanges.pressure.max = 1.0;
- mOrientedRanges.pressure.flat = 0;
- mOrientedRanges.pressure.fuzz = 0;
+ mOrientedRanges.pressure.axis = AMOTION_EVENT_AXIS_PRESSURE;
+ mOrientedRanges.pressure.source = mSource;
+ mOrientedRanges.pressure.min = 0;
+ mOrientedRanges.pressure.max = 1.0;
+ mOrientedRanges.pressure.flat = 0;
+ mOrientedRanges.pressure.fuzz = 0;
+
+ // Tilt
+ mTiltXCenter = 0;
+ mTiltXScale = 0;
+ mTiltYCenter = 0;
+ mTiltYScale = 0;
+ mHaveTilt = mRawPointerAxes.tiltX.valid && mRawPointerAxes.tiltY.valid;
+ if (mHaveTilt) {
+ mTiltXCenter = avg(mRawPointerAxes.tiltX.minValue,
+ mRawPointerAxes.tiltX.maxValue);
+ mTiltYCenter = avg(mRawPointerAxes.tiltY.minValue,
+ mRawPointerAxes.tiltY.maxValue);
+ mTiltXScale = M_PI / 180;
+ mTiltYScale = M_PI / 180;
+
+ mOrientedRanges.haveTilt = true;
+
+ mOrientedRanges.tilt.axis = AMOTION_EVENT_AXIS_TILT;
+ mOrientedRanges.tilt.source = mSource;
+ mOrientedRanges.tilt.min = 0;
+ mOrientedRanges.tilt.max = M_PI_2;
+ mOrientedRanges.tilt.flat = 0;
+ mOrientedRanges.tilt.fuzz = 0;
}
// Orientation
+ mOrientationCenter = 0;
mOrientationScale = 0;
- if (mCalibration.orientationCalibration != Calibration::ORIENTATION_CALIBRATION_NONE) {
+ if (mHaveTilt) {
+ mOrientedRanges.haveOrientation = true;
+
+ mOrientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
+ mOrientedRanges.orientation.source = mSource;
+ mOrientedRanges.orientation.min = -M_PI;
+ mOrientedRanges.orientation.max = M_PI;
+ mOrientedRanges.orientation.flat = 0;
+ mOrientedRanges.orientation.fuzz = 0;
+ } else if (mCalibration.orientationCalibration !=
+ Calibration::ORIENTATION_CALIBRATION_NONE) {
if (mCalibration.orientationCalibration
== Calibration::ORIENTATION_CALIBRATION_INTERPOLATED) {
- if (mRawPointerAxes.orientation.valid
- && mRawPointerAxes.orientation.maxValue != 0) {
- mOrientationScale = float(M_PI_2) / mRawPointerAxes.orientation.maxValue;
+ if (mRawPointerAxes.orientation.valid) {
+ mOrientationCenter = avg(mRawPointerAxes.orientation.minValue,
+ mRawPointerAxes.orientation.maxValue);
+ mOrientationScale = M_PI / (mRawPointerAxes.orientation.maxValue -
+ mRawPointerAxes.orientation.minValue);
}
}
mOrientedRanges.haveOrientation = true;
mOrientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
- mOrientedRanges.orientation.source = mTouchSource;
- mOrientedRanges.orientation.min = - M_PI_2;
+ mOrientedRanges.orientation.source = mSource;
+ mOrientedRanges.orientation.min = -M_PI_2;
mOrientedRanges.orientation.max = M_PI_2;
mOrientedRanges.orientation.flat = 0;
mOrientedRanges.orientation.fuzz = 0;
@@ -2639,7 +2849,7 @@ bool TouchInputMapper::configureSurface() {
mOrientedRanges.haveDistance = true;
mOrientedRanges.distance.axis = AMOTION_EVENT_AXIS_DISTANCE;
- mOrientedRanges.distance.source = mTouchSource;
+ mOrientedRanges.distance.source = mSource;
mOrientedRanges.distance.min =
mRawPointerAxes.distance.minValue * mDistanceScale;
mOrientedRanges.distance.max =
@@ -2650,7 +2860,7 @@ bool TouchInputMapper::configureSurface() {
}
}
- if (orientationChanged || sizeChanged) {
+ if (orientationChanged || sizeChanged || deviceModeChanged) {
// Compute oriented surface dimensions, precision, scales and ranges.
// Note that the maximum value reported is an inclusive maximum value so it is one
// unit less than the total width or height of surface.
@@ -2698,7 +2908,7 @@ bool TouchInputMapper::configureSurface() {
}
// Compute pointer gesture detection parameters.
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
+ if (mDeviceMode == DEVICE_MODE_POINTER) {
int32_t rawWidth = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
int32_t rawHeight = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
float rawDiagonal = hypotf(rawWidth, rawHeight);
@@ -2710,34 +2920,30 @@ bool TouchInputMapper::configureSurface() {
// is applied.
// Assume that the touch pad has a square aspect ratio such that movements in
// X and Y of the same number of raw units cover the same physical distance.
- mPointerGestureXMovementScale = mConfig.pointerGestureMovementSpeedRatio
+ mPointerXMovementScale = mConfig.pointerGestureMovementSpeedRatio
* displayDiagonal / rawDiagonal;
- mPointerGestureYMovementScale = mPointerGestureXMovementScale;
+ mPointerYMovementScale = mPointerXMovementScale;
// Scale zooms to cover a smaller range of the display than movements do.
// This value determines the area around the pointer that is affected by freeform
// pointer gestures.
- mPointerGestureXZoomScale = mConfig.pointerGestureZoomSpeedRatio
+ mPointerXZoomScale = mConfig.pointerGestureZoomSpeedRatio
* displayDiagonal / rawDiagonal;
- mPointerGestureYZoomScale = mPointerGestureXZoomScale;
+ mPointerYZoomScale = mPointerXZoomScale;
// Max width between pointers to detect a swipe gesture is more than some fraction
// of the diagonal axis of the touch pad. Touches that are wider than this are
// translated into freeform gestures.
mPointerGestureMaxSwipeWidth =
mConfig.pointerGestureSwipeMaxWidthRatio * rawDiagonal;
+ }
- // Reset the current pointer gesture.
- mPointerGesture.reset();
+ // Abort current pointer usages because the state has changed.
+ abortPointerUsage(when, 0 /*policyFlags*/);
- // Remove any current spots.
- if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
- mPointerController->clearSpots();
- }
- }
+ // Inform the dispatcher about the changes.
+ *outResetNeeded = true;
}
-
- return true;
}
void TouchInputMapper::dumpSurface(String8& dump) {
@@ -3023,26 +3229,71 @@ void TouchInputMapper::dumpCalibration(String8& dump) {
}
}
-void TouchInputMapper::reset() {
- // Synthesize touch up event.
- // This will also take care of finishing virtual key processing if needed.
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
+void TouchInputMapper::reset(nsecs_t when) {
+ mCursorButtonAccumulator.reset(getDevice());
+ mCursorScrollAccumulator.reset(getDevice());
+ mTouchButtonAccumulator.reset(getDevice());
+
+ mPointerVelocityControl.reset();
+ mWheelXVelocityControl.reset();
+ mWheelYVelocityControl.reset();
+
mCurrentRawPointerData.clear();
+ mLastRawPointerData.clear();
+ mCurrentCookedPointerData.clear();
+ mLastCookedPointerData.clear();
mCurrentButtonState = 0;
- syncTouch(when, true);
+ mLastButtonState = 0;
+ mCurrentRawVScroll = 0;
+ mCurrentRawHScroll = 0;
+ mCurrentFingerIdBits.clear();
+ mLastFingerIdBits.clear();
+ mCurrentStylusIdBits.clear();
+ mLastStylusIdBits.clear();
+ mCurrentMouseIdBits.clear();
+ mLastMouseIdBits.clear();
+ mPointerUsage = POINTER_USAGE_NONE;
+ mSentHoverEnter = false;
+ mDownTime = 0;
- initialize();
+ mCurrentVirtualKey.down = false;
+
+ mPointerGesture.reset();
+ mPointerSimple.reset();
- if (mPointerController != NULL
- && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
+ if (mPointerController != NULL) {
mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
mPointerController->clearSpots();
}
- InputMapper::reset();
+ InputMapper::reset(when);
}
-void TouchInputMapper::syncTouch(nsecs_t when, bool havePointerIds) {
+void TouchInputMapper::process(const RawEvent* rawEvent) {
+ mCursorButtonAccumulator.process(rawEvent);
+ mCursorScrollAccumulator.process(rawEvent);
+ mTouchButtonAccumulator.process(rawEvent);
+
+ if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_REPORT) {
+ sync(rawEvent->when);
+ }
+}
+
+void TouchInputMapper::sync(nsecs_t when) {
+ // Sync button state.
+ mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
+ | mCursorButtonAccumulator.getButtonState();
+
+ // Sync scroll state.
+ mCurrentRawVScroll = mCursorScrollAccumulator.getRelativeVWheel();
+ mCurrentRawHScroll = mCursorScrollAccumulator.getRelativeHWheel();
+ mCursorScrollAccumulator.finishSync();
+
+ // Sync touch state.
+ bool havePointerIds = true;
+ mCurrentRawPointerData.clear();
+ syncTouch(when, &havePointerIds);
+
#if DEBUG_RAW_EVENTS
if (!havePointerIds) {
LOGD("syncTouch: pointerCount %d -> %d, no pointer ids",
@@ -3060,66 +3311,121 @@ void TouchInputMapper::syncTouch(nsecs_t when, bool havePointerIds) {
}
#endif
- // Configure the surface now, if possible.
- if (!configureSurface()) {
- mLastRawPointerData.clear();
- mLastCookedPointerData.clear();
- mLastButtonState = 0;
- return;
- }
+ // Reset state that we will compute below.
+ mCurrentFingerIdBits.clear();
+ mCurrentStylusIdBits.clear();
+ mCurrentMouseIdBits.clear();
+ mCurrentCookedPointerData.clear();
- // Preprocess pointer data.
- if (!havePointerIds) {
- assignPointerIds();
- }
+ if (mDeviceMode == DEVICE_MODE_DISABLED) {
+ // Drop all input if the device is disabled.
+ mCurrentRawPointerData.clear();
+ mCurrentButtonState = 0;
+ } else {
+ // Preprocess pointer data.
+ if (!havePointerIds) {
+ assignPointerIds();
+ }
- // Handle policy on initial down or hover events.
- uint32_t policyFlags = 0;
- if (mLastRawPointerData.pointerCount == 0 && mCurrentRawPointerData.pointerCount != 0) {
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN) {
- // If this is a touch screen, hide the pointer on an initial down.
- getContext()->fadePointer();
+ // Handle policy on initial down or hover events.
+ uint32_t policyFlags = 0;
+ if (mLastRawPointerData.pointerCount == 0 && mCurrentRawPointerData.pointerCount != 0) {
+ if (mDeviceMode == DEVICE_MODE_DIRECT) {
+ // If this is a touch screen, hide the pointer on an initial down.
+ getContext()->fadePointer();
+ }
+
+ // Initial downs on external touch devices should wake the device.
+ // We don't do this for internal touch screens to prevent them from waking
+ // up in your pocket.
+ // TODO: Use the input device configuration to control this behavior more finely.
+ if (getDevice()->isExternal()) {
+ policyFlags |= POLICY_FLAG_WAKE_DROPPED;
+ }
}
- // Initial downs on external touch devices should wake the device.
- // We don't do this for internal touch screens to prevent them from waking
- // up in your pocket.
- // TODO: Use the input device configuration to control this behavior more finely.
- if (getDevice()->isExternal()) {
- policyFlags |= POLICY_FLAG_WAKE_DROPPED;
+ // Synthesize key down from raw buttons if needed.
+ synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mSource,
+ policyFlags, mLastButtonState, mCurrentButtonState);
+
+ // Consume raw off-screen touches before cooking pointer data.
+ // If touches are consumed, subsequent code will not receive any pointer data.
+ if (consumeRawTouches(when, policyFlags)) {
+ mCurrentRawPointerData.clear();
}
- }
- // Synthesize key down from raw buttons if needed.
- synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mTouchSource,
- policyFlags, mLastButtonState, mCurrentButtonState);
+ // Cook pointer data. This call populates the mCurrentCookedPointerData structure
+ // with cooked pointer data that has the same ids and indices as the raw data.
+ // The following code can use either the raw or cooked data, as needed.
+ cookPointerData();
- if (consumeRawTouches(when, policyFlags)) {
- mCurrentRawPointerData.clear();
- }
+ // Dispatch the touches either directly or by translation through a pointer on screen.
+ if (mPointerController != NULL) {
+ for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.clearFirstMarkedBit();
+ const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
+ if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_STYLUS
+ || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_ERASER) {
+ mCurrentStylusIdBits.markBit(id);
+ } else if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_FINGER
+ || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
+ mCurrentFingerIdBits.markBit(id);
+ } else if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_MOUSE) {
+ mCurrentMouseIdBits.markBit(id);
+ }
+ }
+ for (BitSet32 idBits(mCurrentRawPointerData.hoveringIdBits); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.clearFirstMarkedBit();
+ const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
+ if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_STYLUS
+ || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_ERASER) {
+ mCurrentStylusIdBits.markBit(id);
+ }
+ }
- if (mPointerController != NULL && mConfig.pointerGesturesEnabled) {
- dispatchPointerGestures(when, policyFlags, false /*isTimeout*/);
- }
+ // Stylus takes precedence over all tools, then mouse, then finger.
+ PointerUsage pointerUsage = mPointerUsage;
+ if (!mCurrentStylusIdBits.isEmpty()) {
+ mCurrentMouseIdBits.clear();
+ mCurrentFingerIdBits.clear();
+ pointerUsage = POINTER_USAGE_STYLUS;
+ } else if (!mCurrentMouseIdBits.isEmpty()) {
+ mCurrentFingerIdBits.clear();
+ pointerUsage = POINTER_USAGE_MOUSE;
+ } else if (!mCurrentFingerIdBits.isEmpty() || isPointerDown(mCurrentButtonState)) {
+ pointerUsage = POINTER_USAGE_GESTURES;
+ }
- cookPointerData();
- dispatchHoverExit(when, policyFlags);
- dispatchTouches(when, policyFlags);
- dispatchHoverEnterAndMove(when, policyFlags);
+ dispatchPointerUsage(when, policyFlags, pointerUsage);
+ } else {
+ dispatchHoverExit(when, policyFlags);
+ dispatchTouches(when, policyFlags);
+ dispatchHoverEnterAndMove(when, policyFlags);
+ }
- // Synthesize key up from raw buttons if needed.
- synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mTouchSource,
- policyFlags, mLastButtonState, mCurrentButtonState);
+ // Synthesize key up from raw buttons if needed.
+ synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mSource,
+ policyFlags, mLastButtonState, mCurrentButtonState);
+ }
// Copy current touch to last touch in preparation for the next cycle.
mLastRawPointerData.copyFrom(mCurrentRawPointerData);
mLastCookedPointerData.copyFrom(mCurrentCookedPointerData);
mLastButtonState = mCurrentButtonState;
+ mLastFingerIdBits = mCurrentFingerIdBits;
+ mLastStylusIdBits = mCurrentStylusIdBits;
+ mLastMouseIdBits = mCurrentMouseIdBits;
+
+ // Clear some transient state.
+ mCurrentRawVScroll = 0;
+ mCurrentRawHScroll = 0;
}
void TouchInputMapper::timeoutExpired(nsecs_t when) {
if (mPointerController != NULL) {
- dispatchPointerGestures(when, 0 /*policyFlags*/, true /*isTimeout*/);
+ if (mPointerUsage == POINTER_USAGE_GESTURES) {
+ dispatchPointerGestures(when, 0 /*policyFlags*/, true /*isTimeout*/);
+ }
}
}
@@ -3245,7 +3551,7 @@ void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
if (!currentIdBits.isEmpty()) {
// No pointer id changes so this is a move event.
// The listener takes care of batching moves so we don't have to deal with that here.
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState,
AMOTION_EVENT_EDGE_FLAG_NONE,
mCurrentCookedPointerData.pointerProperties,
@@ -3280,7 +3586,7 @@ void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
while (!upIdBits.isEmpty()) {
uint32_t upId = upIdBits.clearFirstMarkedBit();
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_POINTER_UP, 0, metaState, buttonState, 0,
mLastCookedPointerData.pointerProperties,
mLastCookedPointerData.pointerCoords,
@@ -3295,7 +3601,7 @@ void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
// events, they do not generally handle them except when presented in a move event.
if (moveNeeded) {
LOG_ASSERT(moveIdBits.value == dispatchedIdBits.value);
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, 0,
mCurrentCookedPointerData.pointerProperties,
mCurrentCookedPointerData.pointerCoords,
@@ -3314,7 +3620,7 @@ void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
mDownTime = when;
}
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_POINTER_DOWN, 0, metaState, buttonState, 0,
mCurrentCookedPointerData.pointerProperties,
mCurrentCookedPointerData.pointerCoords,
@@ -3330,7 +3636,7 @@ void TouchInputMapper::dispatchHoverExit(nsecs_t when, uint32_t policyFlags) {
(mCurrentCookedPointerData.hoveringIdBits.isEmpty()
|| !mCurrentCookedPointerData.touchingIdBits.isEmpty())) {
int32_t metaState = getContext()->getGlobalMetaState();
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_HOVER_EXIT, 0, metaState, mLastButtonState, 0,
mLastCookedPointerData.pointerProperties,
mLastCookedPointerData.pointerCoords,
@@ -3346,7 +3652,7 @@ void TouchInputMapper::dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFl
&& !mCurrentCookedPointerData.hoveringIdBits.isEmpty()) {
int32_t metaState = getContext()->getGlobalMetaState();
if (!mSentHoverEnter) {
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_HOVER_ENTER, 0, metaState, mCurrentButtonState, 0,
mCurrentCookedPointerData.pointerProperties,
mCurrentCookedPointerData.pointerCoords,
@@ -3356,7 +3662,7 @@ void TouchInputMapper::dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFl
mSentHoverEnter = true;
}
- dispatchMotion(when, policyFlags, mTouchSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_HOVER_MOVE, 0, metaState, mCurrentButtonState, 0,
mCurrentCookedPointerData.pointerProperties,
mCurrentCookedPointerData.pointerCoords,
@@ -3467,30 +3773,40 @@ void TouchInputMapper::cookPointerData() {
break;
}
- // Orientation
+ // Tilt and Orientation
+ float tilt;
float orientation;
- switch (mCalibration.orientationCalibration) {
- case Calibration::ORIENTATION_CALIBRATION_INTERPOLATED:
- orientation = in.orientation * mOrientationScale;
- break;
- case Calibration::ORIENTATION_CALIBRATION_VECTOR: {
- int32_t c1 = signExtendNybble((in.orientation & 0xf0) >> 4);
- int32_t c2 = signExtendNybble(in.orientation & 0x0f);
- if (c1 != 0 || c2 != 0) {
- orientation = atan2f(c1, c2) * 0.5f;
- float confidence = hypotf(c1, c2);
- float scale = 1.0f + confidence / 16.0f;
- touchMajor *= scale;
- touchMinor /= scale;
- toolMajor *= scale;
- toolMinor /= scale;
- } else {
+ if (mHaveTilt) {
+ float tiltXAngle = (in.tiltX - mTiltXCenter) * mTiltXScale;
+ float tiltYAngle = (in.tiltY - mTiltYCenter) * mTiltYScale;
+ orientation = atan2f(-sinf(tiltXAngle), sinf(tiltYAngle));
+ tilt = acosf(cosf(tiltXAngle) * cosf(tiltYAngle));
+ } else {
+ tilt = 0;
+
+ switch (mCalibration.orientationCalibration) {
+ case Calibration::ORIENTATION_CALIBRATION_INTERPOLATED:
+ orientation = (in.orientation - mOrientationCenter) * mOrientationScale;
+ break;
+ case Calibration::ORIENTATION_CALIBRATION_VECTOR: {
+ int32_t c1 = signExtendNybble((in.orientation & 0xf0) >> 4);
+ int32_t c2 = signExtendNybble(in.orientation & 0x0f);
+ if (c1 != 0 || c2 != 0) {
+ orientation = atan2f(c1, c2) * 0.5f;
+ float confidence = hypotf(c1, c2);
+ float scale = 1.0f + confidence / 16.0f;
+ touchMajor *= scale;
+ touchMinor /= scale;
+ toolMajor *= scale;
+ toolMinor /= scale;
+ } else {
+ orientation = 0;
+ }
+ break;
+ }
+ default:
orientation = 0;
}
- break;
- }
- default:
- orientation = 0;
}
// Distance
@@ -3545,6 +3861,7 @@ void TouchInputMapper::cookPointerData() {
out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, toolMajor);
out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
out.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, orientation);
+ out.setAxisValue(AMOTION_EVENT_AXIS_TILT, tilt);
out.setAxisValue(AMOTION_EVENT_AXIS_DISTANCE, distance);
// Write output properties.
@@ -3559,6 +3876,46 @@ void TouchInputMapper::cookPointerData() {
}
}
+void TouchInputMapper::dispatchPointerUsage(nsecs_t when, uint32_t policyFlags,
+ PointerUsage pointerUsage) {
+ if (pointerUsage != mPointerUsage) {
+ abortPointerUsage(when, policyFlags);
+ mPointerUsage = pointerUsage;
+ }
+
+ switch (mPointerUsage) {
+ case POINTER_USAGE_GESTURES:
+ dispatchPointerGestures(when, policyFlags, false /*isTimeout*/);
+ break;
+ case POINTER_USAGE_STYLUS:
+ dispatchPointerStylus(when, policyFlags);
+ break;
+ case POINTER_USAGE_MOUSE:
+ dispatchPointerMouse(when, policyFlags);
+ break;
+ default:
+ break;
+ }
+}
+
+void TouchInputMapper::abortPointerUsage(nsecs_t when, uint32_t policyFlags) {
+ switch (mPointerUsage) {
+ case POINTER_USAGE_GESTURES:
+ abortPointerGestures(when, policyFlags);
+ break;
+ case POINTER_USAGE_STYLUS:
+ abortPointerStylus(when, policyFlags);
+ break;
+ case POINTER_USAGE_MOUSE:
+ abortPointerMouse(when, policyFlags);
+ break;
+ default:
+ break;
+ }
+
+ mPointerUsage = POINTER_USAGE_NONE;
+}
+
void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlags,
bool isTimeout) {
// Update current gesture coordinates.
@@ -3649,7 +4006,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
BitSet32 dispatchedGestureIdBits(mPointerGesture.lastGestureIdBits);
if (!dispatchedGestureIdBits.isEmpty()) {
if (cancelPreviousGesture) {
- dispatchMotion(when, policyFlags, mPointerSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_CANCEL, 0, metaState, buttonState,
AMOTION_EVENT_EDGE_FLAG_NONE,
mPointerGesture.lastGestureProperties,
@@ -3669,7 +4026,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
while (!upGestureIdBits.isEmpty()) {
uint32_t id = upGestureIdBits.clearFirstMarkedBit();
- dispatchMotion(when, policyFlags, mPointerSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_POINTER_UP, 0,
metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
mPointerGesture.lastGestureProperties,
@@ -3684,7 +4041,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
// Send motion events for all pointers that moved.
if (moveNeeded) {
- dispatchMotion(when, policyFlags, mPointerSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
mPointerGesture.currentGestureProperties,
mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
@@ -3704,7 +4061,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
mPointerGesture.downTime = when;
}
- dispatchMotion(when, policyFlags, mPointerSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_POINTER_DOWN, 0, metaState, buttonState, 0,
mPointerGesture.currentGestureProperties,
mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
@@ -3715,7 +4072,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
// Send motion events for hover.
if (mPointerGesture.currentGestureMode == PointerGesture::HOVER) {
- dispatchMotion(when, policyFlags, mPointerSource,
+ dispatchMotion(when, policyFlags, mSource,
AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
mPointerGesture.currentGestureProperties,
@@ -3741,7 +4098,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
- NotifyMotionArgs args(when, getDeviceId(), mPointerSource, policyFlags,
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
1, &pointerProperties, &pointerCoords, 0, 0, mPointerGesture.downTime);
@@ -3766,6 +4123,31 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
}
}
+void TouchInputMapper::abortPointerGestures(nsecs_t when, uint32_t policyFlags) {
+ // Cancel previously dispatches pointers.
+ if (!mPointerGesture.lastGestureIdBits.isEmpty()) {
+ int32_t metaState = getContext()->getGlobalMetaState();
+ int32_t buttonState = mCurrentButtonState;
+ dispatchMotion(when, policyFlags, mSource,
+ AMOTION_EVENT_ACTION_CANCEL, 0, metaState, buttonState,
+ AMOTION_EVENT_EDGE_FLAG_NONE,
+ mPointerGesture.lastGestureProperties,
+ mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
+ mPointerGesture.lastGestureIdBits, -1,
+ 0, 0, mPointerGesture.downTime);
+ }
+
+ // Reset the current pointer gesture.
+ mPointerGesture.reset();
+ mPointerVelocityControl.reset();
+
+ // Remove any current spots.
+ if (mPointerController != NULL) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ mPointerController->clearSpots();
+ }
+}
+
bool TouchInputMapper::preparePointerGestures(nsecs_t when,
bool* outCancelPreviousGesture, bool* outFinishPreviousGesture, bool isTimeout) {
*outCancelPreviousGesture = false;
@@ -3793,7 +4175,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
mPointerGesture.currentGestureIdBits.clear();
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
return true;
}
}
@@ -3802,18 +4184,21 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
return false;
}
+ const uint32_t currentFingerCount = mCurrentFingerIdBits.count();
+ const uint32_t lastFingerCount = mLastFingerIdBits.count();
+
// Update the velocity tracker.
{
VelocityTracker::Position positions[MAX_POINTERS];
uint32_t count = 0;
- for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); count++) {
+ for (BitSet32 idBits(mCurrentFingerIdBits); !idBits.isEmpty(); count++) {
uint32_t id = idBits.clearFirstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
- positions[count].x = pointer.x * mPointerGestureXMovementScale;
- positions[count].y = pointer.y * mPointerGestureYMovementScale;
+ positions[count].x = pointer.x * mPointerXMovementScale;
+ positions[count].y = pointer.y * mPointerYMovementScale;
}
mPointerGesture.velocityTracker.addMovement(when,
- mCurrentRawPointerData.touchingIdBits, positions);
+ mCurrentFingerIdBits, positions);
}
// Pick a new active touch id if needed.
@@ -3825,25 +4210,22 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
int32_t lastActiveTouchId = mPointerGesture.activeTouchId;
int32_t activeTouchId = lastActiveTouchId;
if (activeTouchId < 0) {
- if (!mCurrentRawPointerData.touchingIdBits.isEmpty()) {
+ if (!mCurrentFingerIdBits.isEmpty()) {
activeTouchChanged = true;
activeTouchId = mPointerGesture.activeTouchId =
- mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
+ mCurrentFingerIdBits.firstMarkedBit();
mPointerGesture.firstTouchTime = when;
}
- } else if (!mCurrentRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
+ } else if (!mCurrentFingerIdBits.hasBit(activeTouchId)) {
activeTouchChanged = true;
- if (!mCurrentRawPointerData.touchingIdBits.isEmpty()) {
+ if (!mCurrentFingerIdBits.isEmpty()) {
activeTouchId = mPointerGesture.activeTouchId =
- mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
+ mCurrentFingerIdBits.firstMarkedBit();
} else {
activeTouchId = mPointerGesture.activeTouchId = -1;
}
}
- uint32_t currentTouchingPointerCount = mCurrentRawPointerData.touchingIdBits.count();
- uint32_t lastTouchingPointerCount = mLastRawPointerData.touchingIdBits.count();
-
// Determine whether we are in quiet time.
bool isQuietTime = false;
if (activeTouchId < 0) {
@@ -3854,13 +4236,13 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
if ((mPointerGesture.lastGestureMode == PointerGesture::PRESS
|| mPointerGesture.lastGestureMode == PointerGesture::SWIPE
|| mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)
- && currentTouchingPointerCount < 2) {
+ && currentFingerCount < 2) {
// Enter quiet time when exiting swipe or freeform state.
// This is to prevent accidentally entering the hover state and flinging the
// pointer when finishing a swipe and there is still one pointer left onscreen.
isQuietTime = true;
} else if (mPointerGesture.lastGestureMode == PointerGesture::BUTTON_CLICK_OR_DRAG
- && currentTouchingPointerCount >= 2
+ && currentFingerCount >= 2
&& !isPointerDown(mCurrentButtonState)) {
// Enter quiet time when releasing the button and there are still two or more
// fingers down. This may indicate that one finger was used to press the button
@@ -3888,7 +4270,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureMode = PointerGesture::QUIET;
mPointerGesture.currentGestureIdBits.clear();
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
} else if (isPointerDown(mCurrentButtonState)) {
// Case 2: Button is pressed. (BUTTON_CLICK_OR_DRAG)
// The pointer follows the active touch point.
@@ -3905,7 +4287,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
// being dragged.
#if DEBUG_GESTURES
LOGD("Gestures: BUTTON_CLICK_OR_DRAG activeTouchId=%d, "
- "currentTouchingPointerCount=%d", activeTouchId, currentTouchingPointerCount);
+ "currentFingerCount=%d", activeTouchId, currentFingerCount);
#endif
// Reset state when just starting.
if (mPointerGesture.lastGestureMode != PointerGesture::BUTTON_CLICK_OR_DRAG) {
@@ -3915,10 +4297,10 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
// Switch pointers if needed.
// Find the fastest pointer and follow it.
- if (activeTouchId >= 0 && currentTouchingPointerCount > 1) {
+ if (activeTouchId >= 0 && currentFingerCount > 1) {
int32_t bestId = -1;
float bestSpeed = mConfig.pointerGestureDragMinSwitchSpeed;
- for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); ) {
+ for (BitSet32 idBits(mCurrentFingerIdBits); !idBits.isEmpty(); ) {
uint32_t id = idBits.clearFirstMarkedBit();
float vx, vy;
if (mPointerGesture.velocityTracker.getVelocity(id, &vx, &vy)) {
@@ -3939,23 +4321,23 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
}
}
- if (activeTouchId >= 0 && mLastRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
+ if (activeTouchId >= 0 && mLastFingerIdBits.hasBit(activeTouchId)) {
const RawPointerData::Pointer& currentPointer =
mCurrentRawPointerData.pointerForId(activeTouchId);
const RawPointerData::Pointer& lastPointer =
mLastRawPointerData.pointerForId(activeTouchId);
- float deltaX = (currentPointer.x - lastPointer.x) * mPointerGestureXMovementScale;
- float deltaY = (currentPointer.y - lastPointer.y) * mPointerGestureYMovementScale;
+ float deltaX = (currentPointer.x - lastPointer.x) * mPointerXMovementScale;
+ float deltaY = (currentPointer.y - lastPointer.y) * mPointerYMovementScale;
rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
- mPointerGesture.pointerVelocityControl.move(when, &deltaX, &deltaY);
+ mPointerVelocityControl.move(when, &deltaX, &deltaY);
// Move the pointer using a relative motion.
// When using spots, the click will occur at the position of the anchor
// spot and all other spots will move there.
mPointerController->move(deltaX, deltaY);
} else {
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
}
float x, y;
@@ -3972,7 +4354,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
- } else if (currentTouchingPointerCount == 0) {
+ } else if (currentFingerCount == 0) {
// Case 3. No fingers down and button is not pressed. (NEUTRAL)
if (mPointerGesture.lastGestureMode != PointerGesture::NEUTRAL) {
*outFinishPreviousGesture = true;
@@ -3983,7 +4365,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
bool tapped = false;
if ((mPointerGesture.lastGestureMode == PointerGesture::HOVER
|| mPointerGesture.lastGestureMode == PointerGesture::TAP_DRAG)
- && lastTouchingPointerCount == 1) {
+ && lastFingerCount == 1) {
if (when <= mPointerGesture.tapDownTime + mConfig.pointerGestureTapInterval) {
float x, y;
mPointerController->getPosition(&x, &y);
@@ -4033,7 +4415,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
}
}
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
if (!tapped) {
#if DEBUG_GESTURES
@@ -4043,7 +4425,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
mPointerGesture.currentGestureIdBits.clear();
}
- } else if (currentTouchingPointerCount == 1) {
+ } else if (currentFingerCount == 1) {
// Case 4. Exactly one finger down, button is not pressed. (HOVER or TAP_DRAG)
// The pointer follows the active touch point.
// When in HOVER, emit HOVER_MOVE events at the pointer location.
@@ -4075,24 +4457,24 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureMode = PointerGesture::TAP_DRAG;
}
- if (mLastRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
+ if (mLastFingerIdBits.hasBit(activeTouchId)) {
const RawPointerData::Pointer& currentPointer =
mCurrentRawPointerData.pointerForId(activeTouchId);
const RawPointerData::Pointer& lastPointer =
mLastRawPointerData.pointerForId(activeTouchId);
float deltaX = (currentPointer.x - lastPointer.x)
- * mPointerGestureXMovementScale;
+ * mPointerXMovementScale;
float deltaY = (currentPointer.y - lastPointer.y)
- * mPointerGestureYMovementScale;
+ * mPointerYMovementScale;
rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
- mPointerGesture.pointerVelocityControl.move(when, &deltaX, &deltaY);
+ mPointerVelocityControl.move(when, &deltaX, &deltaY);
// Move the pointer using a relative motion.
// When using spots, the hover or drag will occur at the position of the anchor spot.
mPointerController->move(deltaX, deltaY);
} else {
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
}
bool down;
@@ -4128,7 +4510,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE,
down ? 1.0f : 0.0f);
- if (lastTouchingPointerCount == 0 && currentTouchingPointerCount != 0) {
+ if (lastFingerCount == 0 && currentFingerCount != 0) {
mPointerGesture.resetTap();
mPointerGesture.tapDownTime = when;
mPointerGesture.tapX = x;
@@ -4156,7 +4538,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
&& mPointerGesture.lastGestureMode != PointerGesture::SWIPE
&& mPointerGesture.lastGestureMode != PointerGesture::FREEFORM) {
*outFinishPreviousGesture = true;
- } else if (!settled && currentTouchingPointerCount > lastTouchingPointerCount) {
+ } else if (!settled && currentFingerCount > lastFingerCount) {
// Additional pointers have gone down but not yet settled.
// Reset the gesture.
#if DEBUG_GESTURES
@@ -4175,7 +4557,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.currentGestureMode = PointerGesture::PRESS;
mPointerGesture.activeGestureId = 0;
mPointerGesture.referenceIdBits.clear();
- mPointerGesture.pointerVelocityControl.reset();
+ mPointerVelocityControl.reset();
// Use the centroid and pointer location as the reference points for the gesture.
#if DEBUG_GESTURES
@@ -4192,18 +4574,18 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
}
// Clear the reference deltas for fingers not yet included in the reference calculation.
- for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits.value
+ for (BitSet32 idBits(mCurrentFingerIdBits.value
& ~mPointerGesture.referenceIdBits.value); !idBits.isEmpty(); ) {
uint32_t id = idBits.clearFirstMarkedBit();
mPointerGesture.referenceDeltas[id].dx = 0;
mPointerGesture.referenceDeltas[id].dy = 0;
}
- mPointerGesture.referenceIdBits = mCurrentRawPointerData.touchingIdBits;
+ mPointerGesture.referenceIdBits = mCurrentFingerIdBits;
// Add delta for all fingers and calculate a common movement delta.
float commonDeltaX = 0, commonDeltaY = 0;
- BitSet32 commonIdBits(mLastRawPointerData.touchingIdBits.value
- & mCurrentRawPointerData.touchingIdBits.value);
+ BitSet32 commonIdBits(mLastFingerIdBits.value
+ & mCurrentFingerIdBits.value);
for (BitSet32 idBits(commonIdBits); !idBits.isEmpty(); ) {
bool first = (idBits == commonIdBits);
uint32_t id = idBits.clearFirstMarkedBit();
@@ -4229,8 +4611,8 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
for (BitSet32 idBits(mPointerGesture.referenceIdBits); !idBits.isEmpty(); ) {
uint32_t id = idBits.clearFirstMarkedBit();
PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
- dist[id] = hypotf(delta.dx * mPointerGestureXZoomScale,
- delta.dy * mPointerGestureYZoomScale);
+ dist[id] = hypotf(delta.dx * mPointerXZoomScale,
+ delta.dy * mPointerYZoomScale);
if (dist[id] > mConfig.pointerGestureMultitouchMinDistance) {
distOverThreshold += 1;
}
@@ -4239,17 +4621,17 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
// Only transition when at least two pointers have moved further than
// the minimum distance threshold.
if (distOverThreshold >= 2) {
- if (currentTouchingPointerCount > 2) {
+ if (currentFingerCount > 2) {
// There are more than two pointers, switch to FREEFORM.
#if DEBUG_GESTURES
LOGD("Gestures: PRESS transitioned to FREEFORM, number of pointers %d > 2",
- currentTouchingPointerCount);
+ currentFingerCount);
#endif
*outCancelPreviousGesture = true;
mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
} else {
// There are exactly two pointers.
- BitSet32 idBits(mCurrentRawPointerData.touchingIdBits);
+ BitSet32 idBits(mCurrentFingerIdBits);
uint32_t id1 = idBits.clearFirstMarkedBit();
uint32_t id2 = idBits.firstMarkedBit();
const RawPointerData::Pointer& p1 = mCurrentRawPointerData.pointerForId(id1);
@@ -4277,10 +4659,10 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
// approches 1.0. Recall that dot(v1, v2) = cos(angle) * mag(v1) * mag(v2).
PointerGesture::Delta& delta1 = mPointerGesture.referenceDeltas[id1];
PointerGesture::Delta& delta2 = mPointerGesture.referenceDeltas[id2];
- float dx1 = delta1.dx * mPointerGestureXZoomScale;
- float dy1 = delta1.dy * mPointerGestureYZoomScale;
- float dx2 = delta2.dx * mPointerGestureXZoomScale;
- float dy2 = delta2.dy * mPointerGestureYZoomScale;
+ float dx1 = delta1.dx * mPointerXZoomScale;
+ float dy1 = delta1.dy * mPointerYZoomScale;
+ float dx2 = delta2.dx * mPointerXZoomScale;
+ float dy2 = delta2.dy * mPointerYZoomScale;
float dot = dx1 * dx2 + dy1 * dy2;
float cosine = dot / (dist1 * dist2); // denominator always > 0
if (cosine >= mConfig.pointerGestureSwipeTransitionAngleCosine) {
@@ -4314,10 +4696,10 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
} else if (mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
// Switch from SWIPE to FREEFORM if additional pointers go down.
// Cancel previous gesture.
- if (currentTouchingPointerCount > 2) {
+ if (currentFingerCount > 2) {
#if DEBUG_GESTURES
LOGD("Gestures: SWIPE transitioned to FREEFORM, number of pointers %d > 2",
- currentTouchingPointerCount);
+ currentFingerCount);
#endif
*outCancelPreviousGesture = true;
mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
@@ -4338,11 +4720,11 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.referenceTouchX += commonDeltaX;
mPointerGesture.referenceTouchY += commonDeltaY;
- commonDeltaX *= mPointerGestureXMovementScale;
- commonDeltaY *= mPointerGestureYMovementScale;
+ commonDeltaX *= mPointerXMovementScale;
+ commonDeltaY *= mPointerYMovementScale;
rotateDelta(mSurfaceOrientation, &commonDeltaX, &commonDeltaY);
- mPointerGesture.pointerVelocityControl.move(when, &commonDeltaX, &commonDeltaY);
+ mPointerVelocityControl.move(when, &commonDeltaX, &commonDeltaY);
mPointerGesture.referenceGestureX += commonDeltaX;
mPointerGesture.referenceGestureY += commonDeltaY;
@@ -4355,7 +4737,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
#if DEBUG_GESTURES
LOGD("Gestures: PRESS or SWIPE activeTouchId=%d,"
"activeGestureId=%d, currentTouchPointerCount=%d",
- activeTouchId, mPointerGesture.activeGestureId, currentTouchingPointerCount);
+ activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
#endif
LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
@@ -4377,7 +4759,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
#if DEBUG_GESTURES
LOGD("Gestures: FREEFORM activeTouchId=%d,"
"activeGestureId=%d, currentTouchPointerCount=%d",
- activeTouchId, mPointerGesture.activeGestureId, currentTouchingPointerCount);
+ activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
#endif
LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
@@ -4399,14 +4781,14 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
} else {
// Otherwise, assume we mapped all touches from the previous frame.
// Reuse all mappings that are still applicable.
- mappedTouchIdBits.value = mLastRawPointerData.touchingIdBits.value
- & mCurrentRawPointerData.touchingIdBits.value;
+ mappedTouchIdBits.value = mLastFingerIdBits.value
+ & mCurrentFingerIdBits.value;
usedGestureIdBits = mPointerGesture.lastGestureIdBits;
// Check whether we need to choose a new active gesture id because the
// current went went up.
- for (BitSet32 upTouchIdBits(mLastRawPointerData.touchingIdBits.value
- & ~mCurrentRawPointerData.touchingIdBits.value);
+ for (BitSet32 upTouchIdBits(mLastFingerIdBits.value
+ & ~mCurrentFingerIdBits.value);
!upTouchIdBits.isEmpty(); ) {
uint32_t upTouchId = upTouchIdBits.clearFirstMarkedBit();
uint32_t upGestureId = mPointerGesture.freeformTouchToGestureIdMap[upTouchId];
@@ -4425,8 +4807,8 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
mPointerGesture.activeGestureId);
#endif
- BitSet32 idBits(mCurrentRawPointerData.touchingIdBits);
- for (uint32_t i = 0; i < currentTouchingPointerCount; i++) {
+ BitSet32 idBits(mCurrentFingerIdBits);
+ for (uint32_t i = 0; i < currentFingerCount; i++) {
uint32_t touchId = idBits.clearFirstMarkedBit();
uint32_t gestureId;
if (!mappedTouchIdBits.hasBit(touchId)) {
@@ -4451,9 +4833,9 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
const RawPointerData::Pointer& pointer =
mCurrentRawPointerData.pointerForId(touchId);
float deltaX = (pointer.x - mPointerGesture.referenceTouchX)
- * mPointerGestureXZoomScale;
+ * mPointerXZoomScale;
float deltaY = (pointer.y - mPointerGesture.referenceTouchY)
- * mPointerGestureYZoomScale;
+ * mPointerYZoomScale;
rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
mPointerGesture.currentGestureProperties[i].clear();
@@ -4517,6 +4899,215 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when,
return true;
}
+void TouchInputMapper::dispatchPointerStylus(nsecs_t when, uint32_t policyFlags) {
+ mPointerSimple.currentCoords.clear();
+ mPointerSimple.currentProperties.clear();
+
+ bool down, hovering;
+ if (!mCurrentStylusIdBits.isEmpty()) {
+ uint32_t id = mCurrentStylusIdBits.firstMarkedBit();
+ uint32_t index = mCurrentCookedPointerData.idToIndex[id];
+ float x = mCurrentCookedPointerData.pointerCoords[index].getX();
+ float y = mCurrentCookedPointerData.pointerCoords[index].getY();
+ mPointerController->setPosition(x, y);
+
+ hovering = mCurrentCookedPointerData.hoveringIdBits.hasBit(id);
+ down = !hovering;
+
+ mPointerController->getPosition(&x, &y);
+ mPointerSimple.currentCoords.copyFrom(mCurrentCookedPointerData.pointerCoords[index]);
+ mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
+ mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
+ mPointerSimple.currentProperties.id = 0;
+ mPointerSimple.currentProperties.toolType =
+ mCurrentCookedPointerData.pointerProperties[index].toolType;
+ } else {
+ down = false;
+ hovering = false;
+ }
+
+ dispatchPointerSimple(when, policyFlags, down, hovering);
+}
+
+void TouchInputMapper::abortPointerStylus(nsecs_t when, uint32_t policyFlags) {
+ abortPointerSimple(when, policyFlags);
+}
+
+void TouchInputMapper::dispatchPointerMouse(nsecs_t when, uint32_t policyFlags) {
+ mPointerSimple.currentCoords.clear();
+ mPointerSimple.currentProperties.clear();
+
+ bool down, hovering;
+ if (!mCurrentMouseIdBits.isEmpty()) {
+ uint32_t id = mCurrentMouseIdBits.firstMarkedBit();
+ uint32_t currentIndex = mCurrentRawPointerData.idToIndex[id];
+ if (mLastMouseIdBits.hasBit(id)) {
+ uint32_t lastIndex = mCurrentRawPointerData.idToIndex[id];
+ float deltaX = (mCurrentRawPointerData.pointers[currentIndex].x
+ - mLastRawPointerData.pointers[lastIndex].x)
+ * mPointerXMovementScale;
+ float deltaY = (mCurrentRawPointerData.pointers[currentIndex].y
+ - mLastRawPointerData.pointers[lastIndex].y)
+ * mPointerYMovementScale;
+
+ rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
+ mPointerVelocityControl.move(when, &deltaX, &deltaY);
+
+ mPointerController->move(deltaX, deltaY);
+ } else {
+ mPointerVelocityControl.reset();
+ }
+
+ down = isPointerDown(mCurrentButtonState);
+ hovering = !down;
+
+ float x, y;
+ mPointerController->getPosition(&x, &y);
+ mPointerSimple.currentCoords.copyFrom(
+ mCurrentCookedPointerData.pointerCoords[currentIndex]);
+ mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
+ mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
+ mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE,
+ hovering ? 0.0f : 1.0f);
+ mPointerSimple.currentProperties.id = 0;
+ mPointerSimple.currentProperties.toolType =
+ mCurrentCookedPointerData.pointerProperties[currentIndex].toolType;
+ } else {
+ mPointerVelocityControl.reset();
+
+ down = false;
+ hovering = false;
+ }
+
+ dispatchPointerSimple(when, policyFlags, down, hovering);
+}
+
+void TouchInputMapper::abortPointerMouse(nsecs_t when, uint32_t policyFlags) {
+ abortPointerSimple(when, policyFlags);
+
+ mPointerVelocityControl.reset();
+}
+
+void TouchInputMapper::dispatchPointerSimple(nsecs_t when, uint32_t policyFlags,
+ bool down, bool hovering) {
+ int32_t metaState = getContext()->getGlobalMetaState();
+
+ if (mPointerController != NULL) {
+ if (down || hovering) {
+ mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
+ mPointerController->clearSpots();
+ mPointerController->setButtonState(mCurrentButtonState);
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ } else if (!down && !hovering && (mPointerSimple.down || mPointerSimple.hovering)) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ }
+ }
+
+ if (mPointerSimple.down && !down) {
+ mPointerSimple.down = false;
+
+ // Send up.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_UP, 0, metaState, mLastButtonState, 0,
+ 1, &mPointerSimple.lastProperties, &mPointerSimple.lastCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ if (mPointerSimple.hovering && !hovering) {
+ mPointerSimple.hovering = false;
+
+ // Send hover exit.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_HOVER_EXIT, 0, metaState, mLastButtonState, 0,
+ 1, &mPointerSimple.lastProperties, &mPointerSimple.lastCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ if (down) {
+ if (!mPointerSimple.down) {
+ mPointerSimple.down = true;
+ mPointerSimple.downTime = when;
+
+ // Send down.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_DOWN, 0, metaState, mCurrentButtonState, 0,
+ 1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ // Send move.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_MOVE, 0, metaState, mCurrentButtonState, 0,
+ 1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ if (hovering) {
+ if (!mPointerSimple.hovering) {
+ mPointerSimple.hovering = true;
+
+ // Send hover enter.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_HOVER_ENTER, 0, metaState, mCurrentButtonState, 0,
+ 1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ // Send hover move.
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_HOVER_MOVE, 0, metaState, mCurrentButtonState, 0,
+ 1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ if (mCurrentRawVScroll || mCurrentRawHScroll) {
+ float vscroll = mCurrentRawVScroll;
+ float hscroll = mCurrentRawHScroll;
+ mWheelYVelocityControl.move(when, NULL, &vscroll);
+ mWheelXVelocityControl.move(when, &hscroll, NULL);
+
+ // Send scroll.
+ PointerCoords pointerCoords;
+ pointerCoords.copyFrom(mPointerSimple.currentCoords);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_VSCROLL, vscroll);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_HSCROLL, hscroll);
+
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_SCROLL, 0, metaState, mCurrentButtonState, 0,
+ 1, &mPointerSimple.currentProperties, &pointerCoords,
+ mOrientedXPrecision, mOrientedYPrecision,
+ mPointerSimple.downTime);
+ getListener()->notifyMotion(&args);
+ }
+
+ // Save state.
+ if (down || hovering) {
+ mPointerSimple.lastCoords.copyFrom(mPointerSimple.currentCoords);
+ mPointerSimple.lastProperties.copyFrom(mPointerSimple.currentProperties);
+ } else {
+ mPointerSimple.reset();
+ }
+}
+
+void TouchInputMapper::abortPointerSimple(nsecs_t when, uint32_t policyFlags) {
+ mPointerSimple.currentCoords.clear();
+ mPointerSimple.currentProperties.clear();
+
+ dispatchPointerSimple(when, policyFlags, false, false);
+}
+
void TouchInputMapper::dispatchMotion(nsecs_t when, uint32_t policyFlags, uint32_t source,
int32_t action, int32_t flags, int32_t metaState, int32_t buttonState, int32_t edgeFlags,
const PointerProperties* properties, const PointerCoords* coords,
@@ -4862,44 +5453,32 @@ bool TouchInputMapper::markSupportedKeyCodes(uint32_t sourceMask, size_t numCode
SingleTouchInputMapper::SingleTouchInputMapper(InputDevice* device) :
TouchInputMapper(device) {
- clearState();
}
SingleTouchInputMapper::~SingleTouchInputMapper() {
}
-void SingleTouchInputMapper::clearState() {
- mCursorButtonAccumulator.clearButtons();
- mTouchButtonAccumulator.clearButtons();
- mSingleTouchMotionAccumulator.clearAbsoluteAxes();
-}
+void SingleTouchInputMapper::reset(nsecs_t when) {
+ mSingleTouchMotionAccumulator.reset(getDevice());
-void SingleTouchInputMapper::reset() {
- TouchInputMapper::reset();
-
- clearState();
- }
+ TouchInputMapper::reset(when);
+}
void SingleTouchInputMapper::process(const RawEvent* rawEvent) {
- mCursorButtonAccumulator.process(rawEvent);
- mTouchButtonAccumulator.process(rawEvent);
- mSingleTouchMotionAccumulator.process(rawEvent);
+ TouchInputMapper::process(rawEvent);
- if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_REPORT) {
- sync(rawEvent->when);
- }
+ mSingleTouchMotionAccumulator.process(rawEvent);
}
-void SingleTouchInputMapper::sync(nsecs_t when) {
- mCurrentRawPointerData.clear();
- mCurrentButtonState = 0;
-
+void SingleTouchInputMapper::syncTouch(nsecs_t when, bool* outHavePointerIds) {
if (mTouchButtonAccumulator.isToolActive()) {
mCurrentRawPointerData.pointerCount = 1;
mCurrentRawPointerData.idToIndex[0] = 0;
- bool isHovering = mTouchButtonAccumulator.isHovering()
- || mSingleTouchMotionAccumulator.getAbsoluteDistance() > 0;
+ bool isHovering = mTouchButtonAccumulator.getToolType() != AMOTION_EVENT_TOOL_TYPE_MOUSE
+ && (mTouchButtonAccumulator.isHovering()
+ || (mRawPointerAxes.pressure.valid
+ && mSingleTouchMotionAccumulator.getAbsolutePressure() <= 0));
mCurrentRawPointerData.markIdBit(0, isHovering);
RawPointerData::Pointer& outPointer = mCurrentRawPointerData.pointers[0];
@@ -4913,29 +5492,26 @@ void SingleTouchInputMapper::sync(nsecs_t when) {
outPointer.toolMinor = mSingleTouchMotionAccumulator.getAbsoluteToolWidth();
outPointer.orientation = 0;
outPointer.distance = mSingleTouchMotionAccumulator.getAbsoluteDistance();
+ outPointer.tiltX = mSingleTouchMotionAccumulator.getAbsoluteTiltX();
+ outPointer.tiltY = mSingleTouchMotionAccumulator.getAbsoluteTiltY();
outPointer.toolType = mTouchButtonAccumulator.getToolType();
if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
outPointer.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
}
outPointer.isHovering = isHovering;
}
-
- mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
- | mCursorButtonAccumulator.getButtonState();
-
- syncTouch(when, true);
}
void SingleTouchInputMapper::configureRawPointerAxes() {
TouchInputMapper::configureRawPointerAxes();
- mTouchButtonAccumulator.configure(getDevice());
-
getAbsoluteAxisInfo(ABS_X, &mRawPointerAxes.x);
getAbsoluteAxisInfo(ABS_Y, &mRawPointerAxes.y);
getAbsoluteAxisInfo(ABS_PRESSURE, &mRawPointerAxes.pressure);
getAbsoluteAxisInfo(ABS_TOOL_WIDTH, &mRawPointerAxes.toolMajor);
getAbsoluteAxisInfo(ABS_DISTANCE, &mRawPointerAxes.distance);
+ getAbsoluteAxisInfo(ABS_TILT_X, &mRawPointerAxes.tiltX);
+ getAbsoluteAxisInfo(ABS_TILT_Y, &mRawPointerAxes.tiltY);
}
@@ -4948,58 +5524,25 @@ MultiTouchInputMapper::MultiTouchInputMapper(InputDevice* device) :
MultiTouchInputMapper::~MultiTouchInputMapper() {
}
-void MultiTouchInputMapper::clearState() {
- mCursorButtonAccumulator.clearButtons();
- mTouchButtonAccumulator.clearButtons();
- mPointerIdBits.clear();
+void MultiTouchInputMapper::reset(nsecs_t when) {
+ mMultiTouchMotionAccumulator.reset(getDevice());
- if (mMultiTouchMotionAccumulator.isUsingSlotsProtocol()) {
- // Query the driver for the current slot index and use it as the initial slot
- // before we start reading events from the device. It is possible that the
- // current slot index will not be the same as it was when the first event was
- // written into the evdev buffer, which means the input mapper could start
- // out of sync with the initial state of the events in the evdev buffer.
- // In the extremely unlikely case that this happens, the data from
- // two slots will be confused until the next ABS_MT_SLOT event is received.
- // This can cause the touch point to "jump", but at least there will be
- // no stuck touches.
- int32_t initialSlot;
- status_t status = getEventHub()->getAbsoluteAxisValue(getDeviceId(), ABS_MT_SLOT,
- &initialSlot);
- if (status) {
- LOGW("Could not retrieve current multitouch slot index. status=%d", status);
- initialSlot = -1;
- }
- mMultiTouchMotionAccumulator.clearSlots(initialSlot);
- } else {
- mMultiTouchMotionAccumulator.clearSlots(-1);
- }
-}
-
-void MultiTouchInputMapper::reset() {
- TouchInputMapper::reset();
+ mPointerIdBits.clear();
- clearState();
+ TouchInputMapper::reset(when);
}
void MultiTouchInputMapper::process(const RawEvent* rawEvent) {
- mCursorButtonAccumulator.process(rawEvent);
- mTouchButtonAccumulator.process(rawEvent);
- mMultiTouchMotionAccumulator.process(rawEvent);
+ TouchInputMapper::process(rawEvent);
- if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_REPORT) {
- sync(rawEvent->when);
- }
+ mMultiTouchMotionAccumulator.process(rawEvent);
}
-void MultiTouchInputMapper::sync(nsecs_t when) {
+void MultiTouchInputMapper::syncTouch(nsecs_t when, bool* outHavePointerIds) {
size_t inCount = mMultiTouchMotionAccumulator.getSlotCount();
size_t outCount = 0;
- bool havePointerIds = true;
BitSet32 newPointerIdBits;
- mCurrentRawPointerData.clear();
-
for (size_t inIndex = 0; inIndex < inCount; inIndex++) {
const MultiTouchMotionAccumulator::Slot* inSlot =
mMultiTouchMotionAccumulator.getSlot(inIndex);
@@ -5026,6 +5569,8 @@ void MultiTouchInputMapper::sync(nsecs_t when) {
outPointer.toolMinor = inSlot->getToolMinor();
outPointer.orientation = inSlot->getOrientation();
outPointer.distance = inSlot->getDistance();
+ outPointer.tiltX = 0;
+ outPointer.tiltY = 0;
outPointer.toolType = inSlot->getToolType();
if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
@@ -5035,12 +5580,13 @@ void MultiTouchInputMapper::sync(nsecs_t when) {
}
}
- bool isHovering = mTouchButtonAccumulator.isHovering()
- || inSlot->getDistance() > 0;
+ bool isHovering = mTouchButtonAccumulator.getToolType() != AMOTION_EVENT_TOOL_TYPE_MOUSE
+ && (mTouchButtonAccumulator.isHovering()
+ || (mRawPointerAxes.pressure.valid && inSlot->getPressure() <= 0));
outPointer.isHovering = isHovering;
// Assign pointer id using tracking id if available.
- if (havePointerIds) {
+ if (*outHavePointerIds) {
int32_t trackingId = inSlot->getTrackingId();
int32_t id = -1;
if (trackingId >= 0) {
@@ -5057,7 +5603,7 @@ void MultiTouchInputMapper::sync(nsecs_t when) {
}
}
if (id < 0) {
- havePointerIds = false;
+ *outHavePointerIds = false;
mCurrentRawPointerData.clearIdBits();
newPointerIdBits.clear();
} else {
@@ -5072,23 +5618,14 @@ void MultiTouchInputMapper::sync(nsecs_t when) {
}
mCurrentRawPointerData.pointerCount = outCount;
- mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
- | mCursorButtonAccumulator.getButtonState();
-
mPointerIdBits = newPointerIdBits;
- syncTouch(when, havePointerIds);
-
- if (!mMultiTouchMotionAccumulator.isUsingSlotsProtocol()) {
- mMultiTouchMotionAccumulator.clearSlots(-1);
- }
+ mMultiTouchMotionAccumulator.finishSync();
}
void MultiTouchInputMapper::configureRawPointerAxes() {
TouchInputMapper::configureRawPointerAxes();
- mTouchButtonAccumulator.configure(getDevice());
-
getAbsoluteAxisInfo(ABS_MT_POSITION_X, &mRawPointerAxes.x);
getAbsoluteAxisInfo(ABS_MT_POSITION_Y, &mRawPointerAxes.y);
getAbsoluteAxisInfo(ABS_MT_TOUCH_MAJOR, &mRawPointerAxes.touchMajor);
@@ -5115,8 +5652,6 @@ void MultiTouchInputMapper::configureRawPointerAxes() {
} else {
mMultiTouchMotionAccumulator.configure(MAX_POINTERS, false /*usingSlotsProtocol*/);
}
-
- clearState();
}
@@ -5184,8 +5719,9 @@ void JoystickInputMapper::dump(String8& dump) {
}
}
-void JoystickInputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
- InputMapper::configure(config, changes);
+void JoystickInputMapper::configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
+ InputMapper::configure(when, config, changes);
if (!changes) { // first time only
// Collect all axes.
@@ -5314,19 +5850,15 @@ bool JoystickInputMapper::isCenteredAxis(int32_t axis) {
}
}
-void JoystickInputMapper::reset() {
+void JoystickInputMapper::reset(nsecs_t when) {
// Recenter all axes.
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
-
size_t numAxes = mAxes.size();
for (size_t i = 0; i < numAxes; i++) {
Axis& axis = mAxes.editValueAt(i);
axis.resetValue();
}
- sync(when, true /*force*/);
-
- InputMapper::reset();
+ InputMapper::reset(when);
}
void JoystickInputMapper::process(const RawEvent* rawEvent) {
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 72802fc7fab7..76d77f1c1c2a 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -53,6 +53,9 @@ struct InputReaderConfiguration {
// The pointer gesture control changed.
CHANGE_POINTER_GESTURE_ENABLEMENT = 1 << 1,
+ // The display size or orientation changed.
+ CHANGE_DISPLAY_INFO = 1 << 2,
+
// All devices must be reopened.
CHANGE_MUST_REOPEN = 1 << 31,
};
@@ -153,6 +156,26 @@ struct InputReaderConfiguration {
pointerGestureSwipeMaxWidthRatio(0.25f),
pointerGestureMovementSpeedRatio(0.8f),
pointerGestureZoomSpeedRatio(0.3f) { }
+
+ bool getDisplayInfo(int32_t displayId, bool external,
+ int32_t* width, int32_t* height, int32_t* orientation) const;
+
+ void setDisplayInfo(int32_t displayId, bool external,
+ int32_t width, int32_t height, int32_t orientation);
+
+private:
+ struct DisplayInfo {
+ int32_t width;
+ int32_t height;
+ int32_t orientation;
+
+ DisplayInfo() :
+ width(-1), height(-1), orientation(DISPLAY_ORIENTATION_0) {
+ }
+ };
+
+ DisplayInfo mInternalDisplay;
+ DisplayInfo mExternalDisplay;
};
@@ -174,22 +197,6 @@ protected:
virtual ~InputReaderPolicyInterface() { }
public:
- /* Display orientations. */
- enum {
- ROTATION_0 = 0,
- ROTATION_90 = 1,
- ROTATION_180 = 2,
- ROTATION_270 = 3
- };
-
- /* Gets information about the display with the specified id.
- * If external is true, returns the size of the external mirrored
- * counterpart of the specified display.
- * Returns true if the display info is available, false otherwise.
- */
- virtual bool getDisplayInfo(int32_t displayId, bool external,
- int32_t* width, int32_t* height, int32_t* orientation) = 0;
-
/* Gets the input reader configuration. */
virtual void getReaderConfiguration(InputReaderConfiguration* outConfig) = 0;
@@ -364,8 +371,8 @@ private:
// low-level input event decoding and device management
void processEventsLocked(const RawEvent* rawEvents, size_t count);
- void addDeviceLocked(int32_t deviceId);
- void removeDeviceLocked(int32_t deviceId);
+ void addDeviceLocked(nsecs_t when, int32_t deviceId);
+ void removeDeviceLocked(nsecs_t when, int32_t deviceId);
void processEventsForDeviceLocked(int32_t deviceId, const RawEvent* rawEvents, size_t count);
void timeoutExpiredLocked(nsecs_t when);
@@ -431,8 +438,8 @@ public:
void dump(String8& dump);
void addMapper(InputMapper* mapper);
- void configure(const InputReaderConfiguration* config, uint32_t changes);
- void reset();
+ void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ void reset(nsecs_t when);
void process(const RawEvent* rawEvents, size_t count);
void timeoutExpired(nsecs_t when);
@@ -447,9 +454,25 @@ public:
void fadePointer();
+ void notifyReset(nsecs_t when);
+
inline const PropertyMap& getConfiguration() { return mConfiguration; }
inline EventHubInterface* getEventHub() { return mContext->getEventHub(); }
+ bool hasKey(int32_t code) {
+ return getEventHub()->hasScanCode(mId, code);
+ }
+
+ bool isKeyPressed(int32_t code) {
+ return getEventHub()->getScanCodeState(mId, code) == AKEY_STATE_DOWN;
+ }
+
+ int32_t getAbsoluteAxisValue(int32_t code) {
+ int32_t value;
+ getEventHub()->getAbsoluteAxisValue(mId, code, &value);
+ return value;
+ }
+
private:
InputReaderContext* mContext;
int32_t mId;
@@ -472,8 +495,8 @@ private:
class CursorButtonAccumulator {
public:
CursorButtonAccumulator();
+ void reset(InputDevice* device);
- void clearButtons();
void process(const RawEvent* rawEvent);
uint32_t getButtonState() const;
@@ -487,6 +510,8 @@ private:
bool mBtnForward;
bool mBtnExtra;
bool mBtnTask;
+
+ void clearButtons();
};
@@ -495,10 +520,32 @@ private:
class CursorMotionAccumulator {
public:
CursorMotionAccumulator();
- void configure(InputDevice* device);
+ void reset(InputDevice* device);
+
+ void process(const RawEvent* rawEvent);
+ void finishSync();
+
+ inline int32_t getRelativeX() const { return mRelX; }
+ inline int32_t getRelativeY() const { return mRelY; }
+
+private:
+ int32_t mRelX;
+ int32_t mRelY;
void clearRelativeAxes();
+};
+
+
+/* Keeps track of cursor scrolling motions. */
+
+class CursorScrollAccumulator {
+public:
+ CursorScrollAccumulator();
+ void configure(InputDevice* device);
+ void reset(InputDevice* device);
+
void process(const RawEvent* rawEvent);
+ void finishSync();
inline bool haveRelativeVWheel() const { return mHaveRelWheel; }
inline bool haveRelativeHWheel() const { return mHaveRelHWheel; }
@@ -516,6 +563,8 @@ private:
int32_t mRelY;
int32_t mRelWheel;
int32_t mRelHWheel;
+
+ void clearRelativeAxes();
};
@@ -524,8 +573,8 @@ class TouchButtonAccumulator {
public:
TouchButtonAccumulator();
void configure(InputDevice* device);
+ void reset(InputDevice* device);
- void clearButtons();
void process(const RawEvent* rawEvent);
uint32_t getButtonState() const;
@@ -542,6 +591,13 @@ private:
bool mBtnToolFinger;
bool mBtnToolPen;
bool mBtnToolRubber;
+ bool mBtnToolBrush;
+ bool mBtnToolPencil;
+ bool mBtnToolAirbrush;
+ bool mBtnToolMouse;
+ bool mBtnToolLens;
+
+ void clearButtons();
};
@@ -556,6 +612,8 @@ struct RawPointerAxes {
RawAbsoluteAxisInfo toolMinor;
RawAbsoluteAxisInfo orientation;
RawAbsoluteAxisInfo distance;
+ RawAbsoluteAxisInfo tiltX;
+ RawAbsoluteAxisInfo tiltY;
RawAbsoluteAxisInfo trackingId;
RawAbsoluteAxisInfo slot;
@@ -577,6 +635,8 @@ struct RawPointerData {
int32_t toolMinor;
int32_t orientation;
int32_t distance;
+ int32_t tiltX;
+ int32_t tiltY;
int32_t toolType; // a fully decoded AMOTION_EVENT_TOOL_TYPE constant
bool isHovering;
};
@@ -637,14 +697,16 @@ class SingleTouchMotionAccumulator {
public:
SingleTouchMotionAccumulator();
- void clearAbsoluteAxes();
void process(const RawEvent* rawEvent);
+ void reset(InputDevice* device);
inline int32_t getAbsoluteX() const { return mAbsX; }
inline int32_t getAbsoluteY() const { return mAbsY; }
inline int32_t getAbsolutePressure() const { return mAbsPressure; }
inline int32_t getAbsoluteToolWidth() const { return mAbsToolWidth; }
inline int32_t getAbsoluteDistance() const { return mAbsDistance; }
+ inline int32_t getAbsoluteTiltX() const { return mAbsTiltX; }
+ inline int32_t getAbsoluteTiltY() const { return mAbsTiltY; }
private:
int32_t mAbsX;
@@ -652,6 +714,10 @@ private:
int32_t mAbsPressure;
int32_t mAbsToolWidth;
int32_t mAbsDistance;
+ int32_t mAbsTiltX;
+ int32_t mAbsTiltY;
+
+ void clearAbsoluteAxes();
};
@@ -703,11 +769,10 @@ public:
~MultiTouchMotionAccumulator();
void configure(size_t slotCount, bool usingSlotsProtocol);
+ void reset(InputDevice* device);
void process(const RawEvent* rawEvent);
+ void finishSync();
- void clearSlots(int32_t initialSlot);
-
- inline bool isUsingSlotsProtocol() const { return mUsingSlotsProtocol; }
inline size_t getSlotCount() const { return mSlotCount; }
inline const Slot* getSlot(size_t index) const { return &mSlots[index]; }
@@ -716,12 +781,22 @@ private:
Slot* mSlots;
size_t mSlotCount;
bool mUsingSlotsProtocol;
+
+ void clearSlots(int32_t initialSlot);
};
/* An input mapper transforms raw input events into cooked event data.
* A single input device can have multiple associated input mappers in order to interpret
* different classes of events.
+ *
+ * InputMapper lifecycle:
+ * - create
+ * - configure with 0 changes
+ * - reset
+ * - process, process, process (may occasionally reconfigure with non-zero changes or reset)
+ * - reset
+ * - destroy
*/
class InputMapper {
public:
@@ -739,8 +814,8 @@ public:
virtual uint32_t getSources() = 0;
virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
virtual void dump(String8& dump);
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes);
- virtual void reset();
+ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent) = 0;
virtual void timeoutExpired(nsecs_t when);
@@ -788,8 +863,8 @@ public:
virtual uint32_t getSources();
virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
virtual void dump(String8& dump);
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes);
- virtual void reset();
+ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent);
virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
@@ -800,8 +875,6 @@ public:
virtual int32_t getMetaState();
private:
- Mutex mLock;
-
struct KeyDown {
int32_t keyCode;
int32_t scanCode;
@@ -810,6 +883,8 @@ private:
uint32_t mSource;
int32_t mKeyboardType;
+ int32_t mOrientation; // orientation for dpad keys
+
Vector<KeyDown> mKeyDowns; // keys that are down
int32_t mMetaState;
nsecs_t mDownTime; // time of most recent key down
@@ -828,8 +903,6 @@ private:
bool orientationAware;
} mParameters;
- void initialize();
-
void configureParameters();
void dumpParameters(String8& dump);
@@ -856,8 +929,8 @@ public:
virtual uint32_t getSources();
virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
virtual void dump(String8& dump);
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes);
- virtual void reset();
+ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent);
virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
@@ -882,6 +955,7 @@ private:
CursorButtonAccumulator mCursorButtonAccumulator;
CursorMotionAccumulator mCursorMotionAccumulator;
+ CursorScrollAccumulator mCursorScrollAccumulator;
int32_t mSource;
float mXScale;
@@ -898,13 +972,13 @@ private:
VelocityControl mWheelXVelocityControl;
VelocityControl mWheelYVelocityControl;
+ int32_t mOrientation;
+
sp<PointerControllerInterface> mPointerController;
int32_t mButtonState;
nsecs_t mDownTime;
- void initialize();
-
void configureParameters();
void dumpParameters(String8& dump);
@@ -920,8 +994,9 @@ public:
virtual uint32_t getSources();
virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
virtual void dump(String8& dump);
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes);
- virtual void reset();
+ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ virtual void reset(nsecs_t when);
+ virtual void process(const RawEvent* rawEvent);
virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
@@ -932,6 +1007,10 @@ public:
virtual void timeoutExpired(nsecs_t when);
protected:
+ CursorButtonAccumulator mCursorButtonAccumulator;
+ CursorScrollAccumulator mCursorScrollAccumulator;
+ TouchButtonAccumulator mTouchButtonAccumulator;
+
struct VirtualKey {
int32_t keyCode;
int32_t scanCode;
@@ -948,9 +1027,16 @@ protected:
}
};
- // Input sources supported by the device.
- uint32_t mTouchSource; // sources when reporting touch data
- uint32_t mPointerSource; // sources when reporting pointer gestures
+ // Input sources and device mode.
+ uint32_t mSource;
+
+ enum DeviceMode {
+ DEVICE_MODE_DISABLED, // input is disabled
+ DEVICE_MODE_DIRECT, // direct mapping (touchscreen)
+ DEVICE_MODE_UNSCALED, // unscaled mapping (touchpad)
+ DEVICE_MODE_POINTER, // pointer mapping (pointer)
+ };
+ DeviceMode mDeviceMode;
// The reader's configuration.
InputReaderConfiguration mConfig;
@@ -1053,6 +1139,18 @@ protected:
int32_t mCurrentButtonState;
int32_t mLastButtonState;
+ // Scroll state.
+ int32_t mCurrentRawVScroll;
+ int32_t mCurrentRawHScroll;
+
+ // Id bits used to differentiate fingers, stylus and mouse tools.
+ BitSet32 mCurrentFingerIdBits; // finger or unknown
+ BitSet32 mLastFingerIdBits;
+ BitSet32 mCurrentStylusIdBits; // stylus or eraser
+ BitSet32 mLastStylusIdBits;
+ BitSet32 mCurrentMouseIdBits; // mouse or lens
+ BitSet32 mLastMouseIdBits;
+
// True if we sent a HOVER_ENTER event.
bool mSentHoverEnter;
@@ -1068,7 +1166,7 @@ protected:
virtual void dumpParameters(String8& dump);
virtual void configureRawPointerAxes();
virtual void dumpRawPointerAxes(String8& dump);
- virtual bool configureSurface();
+ virtual void configureSurface(nsecs_t when, bool* outResetNeeded);
virtual void dumpSurface(String8& dump);
virtual void configureVirtualKeys();
virtual void dumpVirtualKeys(String8& dump);
@@ -1076,7 +1174,7 @@ protected:
virtual void resolveCalibration();
virtual void dumpCalibration(String8& dump);
- void syncTouch(nsecs_t when, bool havePointerIds);
+ virtual void syncTouch(nsecs_t when, bool* outHavePointerIds) = 0;
private:
// The surface orientation and width and height set by configureSurface().
@@ -1102,16 +1200,21 @@ private:
float mSizeScale;
+ float mOrientationCenter;
float mOrientationScale;
float mDistanceScale;
+ bool mHaveTilt;
+ float mTiltXCenter;
+ float mTiltXScale;
+ float mTiltYCenter;
+ float mTiltYScale;
+
// Oriented motion ranges for input device info.
struct OrientedRanges {
InputDeviceInfo::MotionRange x;
InputDeviceInfo::MotionRange y;
-
- bool havePressure;
InputDeviceInfo::MotionRange pressure;
bool haveSize;
@@ -1130,6 +1233,22 @@ private:
bool haveDistance;
InputDeviceInfo::MotionRange distance;
+
+ bool haveTilt;
+ InputDeviceInfo::MotionRange tilt;
+
+ OrientedRanges() {
+ clear();
+ }
+
+ void clear() {
+ haveSize = false;
+ haveTouchSize = false;
+ haveToolSize = false;
+ haveOrientation = false;
+ haveDistance = false;
+ haveTilt = false;
+ }
} mOrientedRanges;
// Oriented dimensions and precision.
@@ -1146,13 +1265,13 @@ private:
int32_t scanCode;
} mCurrentVirtualKey;
- // Scale factor for gesture based pointer movements.
- float mPointerGestureXMovementScale;
- float mPointerGestureYMovementScale;
+ // Scale factor for gesture or mouse based pointer movements.
+ float mPointerXMovementScale;
+ float mPointerYMovementScale;
// Scale factor for gesture based zooming and other freeform motions.
- float mPointerGestureXZoomScale;
- float mPointerGestureYZoomScale;
+ float mPointerXZoomScale;
+ float mPointerYZoomScale;
// The maximum swipe width.
float mPointerGestureMaxSwipeWidth;
@@ -1163,6 +1282,14 @@ private:
uint64_t distance : 48; // squared distance
};
+ enum PointerUsage {
+ POINTER_USAGE_NONE,
+ POINTER_USAGE_GESTURES,
+ POINTER_USAGE_STYLUS,
+ POINTER_USAGE_MOUSE,
+ };
+ PointerUsage mPointerUsage;
+
struct PointerGesture {
enum Mode {
// No fingers, button is not pressed.
@@ -1273,9 +1400,6 @@ private:
// A velocity tracker for determining whether to switch active pointers during drags.
VelocityTracker velocityTracker;
- // Velocity control for pointer movements.
- VelocityControl pointerVelocityControl;
-
void reset() {
firstTouchTime = LLONG_MIN;
activeTouchId = -1;
@@ -1288,7 +1412,6 @@ private:
velocityTracker.clear();
resetTap();
resetQuietTime();
- pointerVelocityControl.reset();
}
void resetTap() {
@@ -1301,7 +1424,38 @@ private:
}
} mPointerGesture;
- void initialize();
+ struct PointerSimple {
+ PointerCoords currentCoords;
+ PointerProperties currentProperties;
+ PointerCoords lastCoords;
+ PointerProperties lastProperties;
+
+ // True if the pointer is down.
+ bool down;
+
+ // True if the pointer is hovering.
+ bool hovering;
+
+ // Time the pointer last went down.
+ nsecs_t downTime;
+
+ void reset() {
+ currentCoords.clear();
+ currentProperties.clear();
+ lastCoords.clear();
+ lastProperties.clear();
+ down = false;
+ hovering = false;
+ downTime = 0;
+ }
+ } mPointerSimple;
+
+ // The pointer and scroll velocity controls.
+ VelocityControl mPointerVelocityControl;
+ VelocityControl mWheelXVelocityControl;
+ VelocityControl mWheelYVelocityControl;
+
+ void sync(nsecs_t when);
bool consumeRawTouches(nsecs_t when, uint32_t policyFlags);
void dispatchVirtualKey(nsecs_t when, uint32_t policyFlags,
@@ -1312,9 +1466,24 @@ private:
void dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFlags);
void cookPointerData();
+ void dispatchPointerUsage(nsecs_t when, uint32_t policyFlags, PointerUsage pointerUsage);
+ void abortPointerUsage(nsecs_t when, uint32_t policyFlags);
+
void dispatchPointerGestures(nsecs_t when, uint32_t policyFlags, bool isTimeout);
+ void abortPointerGestures(nsecs_t when, uint32_t policyFlags);
bool preparePointerGestures(nsecs_t when,
- bool* outCancelPreviousGesture, bool* outFinishPreviousGesture, bool isTimeout);
+ bool* outCancelPreviousGesture, bool* outFinishPreviousGesture,
+ bool isTimeout);
+
+ void dispatchPointerStylus(nsecs_t when, uint32_t policyFlags);
+ void abortPointerStylus(nsecs_t when, uint32_t policyFlags);
+
+ void dispatchPointerMouse(nsecs_t when, uint32_t policyFlags);
+ void abortPointerMouse(nsecs_t when, uint32_t policyFlags);
+
+ void dispatchPointerSimple(nsecs_t when, uint32_t policyFlags,
+ bool down, bool hovering);
+ void abortPointerSimple(nsecs_t when, uint32_t policyFlags);
// Dispatches a motion event.
// If the changedId is >= 0 and the action is POINTER_DOWN or POINTER_UP, the
@@ -1346,20 +1515,15 @@ public:
SingleTouchInputMapper(InputDevice* device);
virtual ~SingleTouchInputMapper();
- virtual void reset();
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent);
protected:
+ virtual void syncTouch(nsecs_t when, bool* outHavePointerIds);
virtual void configureRawPointerAxes();
private:
- CursorButtonAccumulator mCursorButtonAccumulator;
- TouchButtonAccumulator mTouchButtonAccumulator;
SingleTouchMotionAccumulator mSingleTouchMotionAccumulator;
-
- void clearState();
-
- void sync(nsecs_t when);
};
@@ -1368,24 +1532,19 @@ public:
MultiTouchInputMapper(InputDevice* device);
virtual ~MultiTouchInputMapper();
- virtual void reset();
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent);
protected:
+ virtual void syncTouch(nsecs_t when, bool* outHavePointerIds);
virtual void configureRawPointerAxes();
private:
- CursorButtonAccumulator mCursorButtonAccumulator;
- TouchButtonAccumulator mTouchButtonAccumulator;
MultiTouchMotionAccumulator mMultiTouchMotionAccumulator;
// Specifies the pointer id bits that are in use, and their associated tracking id.
BitSet32 mPointerIdBits;
int32_t mPointerTrackingIdMap[MAX_POINTER_ID + 1];
-
- void clearState();
-
- void sync(nsecs_t when);
};
@@ -1397,8 +1556,8 @@ public:
virtual uint32_t getSources();
virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
virtual void dump(String8& dump);
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes);
- virtual void reset();
+ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
+ virtual void reset(nsecs_t when);
virtual void process(const RawEvent* rawEvent);
private:
diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp
index ebf66aa2c21e..47969583c009 100644
--- a/services/input/tests/InputReader_test.cpp
+++ b/services/input/tests/InputReader_test.cpp
@@ -125,13 +125,6 @@ private:
// --- FakeInputReaderPolicy ---
class FakeInputReaderPolicy : public InputReaderPolicyInterface {
- struct DisplayInfo {
- int32_t width;
- int32_t height;
- int32_t orientation;
- };
-
- KeyedVector<int32_t, DisplayInfo> mDisplayInfos;
InputReaderConfiguration mConfig;
KeyedVector<int32_t, sp<FakePointerController> > mPointerControllers;
@@ -142,18 +135,10 @@ public:
FakeInputReaderPolicy() {
}
- void removeDisplayInfo(int32_t displayId) {
- mDisplayInfos.removeItem(displayId);
- }
-
void setDisplayInfo(int32_t displayId, int32_t width, int32_t height, int32_t orientation) {
- removeDisplayInfo(displayId);
-
- DisplayInfo info;
- info.width = width;
- info.height = height;
- info.orientation = orientation;
- mDisplayInfos.add(displayId, info);
+ // Set the size of both the internal and external display at the same time.
+ mConfig.setDisplayInfo(displayId, false /*external*/, width, height, orientation);
+ mConfig.setDisplayInfo(displayId, true /*external*/, width, height, orientation);
}
virtual nsecs_t getVirtualKeyQuietTime() {
@@ -168,26 +153,11 @@ public:
mPointerControllers.add(deviceId, controller);
}
-private:
- virtual bool getDisplayInfo(int32_t displayId, bool external /*currently ignored*/,
- int32_t* width, int32_t* height, int32_t* orientation) {
- ssize_t index = mDisplayInfos.indexOfKey(displayId);
- if (index >= 0) {
- const DisplayInfo& info = mDisplayInfos.valueAt(index);
- if (width) {
- *width = info.width;
- }
- if (height) {
- *height = info.height;
- }
- if (orientation) {
- *orientation = info.orientation;
- }
- return true;
- }
- return false;
+ const InputReaderConfiguration* getReaderConfiguration() const {
+ return &mConfig;
}
+private:
virtual void getReaderConfiguration(InputReaderConfiguration* outConfig) {
*outConfig = mConfig;
}
@@ -203,6 +173,7 @@ private:
class FakeInputListener : public InputListenerInterface {
private:
List<NotifyConfigurationChangedArgs> mNotifyConfigurationChangedArgsQueue;
+ List<NotifyDeviceResetArgs> mNotifyDeviceResetArgsQueue;
List<NotifyKeyArgs> mNotifyKeyArgsQueue;
List<NotifyMotionArgs> mNotifyMotionArgsQueue;
List<NotifySwitchArgs> mNotifySwitchArgsQueue;
@@ -224,6 +195,16 @@ public:
mNotifyConfigurationChangedArgsQueue.erase(mNotifyConfigurationChangedArgsQueue.begin());
}
+ void assertNotifyDeviceResetWasCalled(
+ NotifyDeviceResetArgs* outEventArgs = NULL) {
+ ASSERT_FALSE(mNotifyDeviceResetArgsQueue.empty())
+ << "Expected notifyDeviceReset() to have been called.";
+ if (outEventArgs) {
+ *outEventArgs = *mNotifyDeviceResetArgsQueue.begin();
+ }
+ mNotifyDeviceResetArgsQueue.erase(mNotifyDeviceResetArgsQueue.begin());
+ }
+
void assertNotifyKeyWasCalled(NotifyKeyArgs* outEventArgs = NULL) {
ASSERT_FALSE(mNotifyKeyArgsQueue.empty())
<< "Expected notifyKey() to have been called.";
@@ -266,6 +247,10 @@ private:
mNotifyConfigurationChangedArgsQueue.push_back(*args);
}
+ virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) {
+ mNotifyDeviceResetArgsQueue.push_back(*args);
+ }
+
virtual void notifyKey(const NotifyKeyArgs* args) {
mNotifyKeyArgsQueue.push_back(*args);
}
@@ -792,11 +777,12 @@ private:
}
}
- virtual void configure(const InputReaderConfiguration* config, uint32_t changes) {
+ virtual void configure(nsecs_t when,
+ const InputReaderConfiguration* config, uint32_t changes) {
mConfigureWasCalled = true;
}
- virtual void reset() {
+ virtual void reset(nsecs_t when) {
mResetWasCalled = true;
}
@@ -913,6 +899,7 @@ protected:
void addDevice(int32_t deviceId, const String8& name, uint32_t classes,
const PropertyMap* configuration) {
mFakeEventHub->addDevice(deviceId, name, classes);
+
if (configuration) {
mFakeEventHub->addConfigurationMap(deviceId, configuration);
}
@@ -1263,7 +1250,15 @@ TEST_F(InputDeviceTest, ImmutableProperties) {
TEST_F(InputDeviceTest, WhenNoMappersAreRegistered_DeviceIsIgnored) {
// Configuration.
InputReaderConfiguration config;
- mDevice->configure(&config, 0);
+ mDevice->configure(ARBITRARY_TIME, &config, 0);
+
+ // Reset.
+ mDevice->reset(ARBITRARY_TIME);
+
+ NotifyDeviceResetArgs resetArgs;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
+ ASSERT_EQ(ARBITRARY_TIME, resetArgs.eventTime);
+ ASSERT_EQ(DEVICE_ID, resetArgs.deviceId);
// Metadata.
ASSERT_TRUE(mDevice->isIgnored());
@@ -1292,9 +1287,6 @@ TEST_F(InputDeviceTest, WhenNoMappersAreRegistered_DeviceIsIgnored) {
<< "Ignored device should never mark any key codes.";
ASSERT_EQ(0, flags[0]) << "Flag for unsupported key should be unchanged.";
ASSERT_EQ(1, flags[1]) << "Flag for unsupported key should be unchanged.";
-
- // Reset.
- mDevice->reset();
}
TEST_F(InputDeviceTest, WhenMappersAreRegistered_DeviceIsNotIgnoredAndForwardsRequestsToMappers) {
@@ -1318,7 +1310,7 @@ TEST_F(InputDeviceTest, WhenMappersAreRegistered_DeviceIsNotIgnoredAndForwardsRe
mDevice->addMapper(mapper2);
InputReaderConfiguration config;
- mDevice->configure(&config, 0);
+ mDevice->configure(ARBITRARY_TIME, &config, 0);
String8 propertyValue;
ASSERT_TRUE(mDevice->getConfiguration().tryGetProperty(String8("key"), propertyValue))
@@ -1328,6 +1320,16 @@ TEST_F(InputDeviceTest, WhenMappersAreRegistered_DeviceIsNotIgnoredAndForwardsRe
ASSERT_NO_FATAL_FAILURE(mapper1->assertConfigureWasCalled());
ASSERT_NO_FATAL_FAILURE(mapper2->assertConfigureWasCalled());
+ // Reset
+ mDevice->reset(ARBITRARY_TIME);
+ ASSERT_NO_FATAL_FAILURE(mapper1->assertResetWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mapper2->assertResetWasCalled());
+
+ NotifyDeviceResetArgs resetArgs;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
+ ASSERT_EQ(ARBITRARY_TIME, resetArgs.eventTime);
+ ASSERT_EQ(DEVICE_ID, resetArgs.deviceId);
+
// Metadata.
ASSERT_FALSE(mDevice->isIgnored());
ASSERT_EQ(uint32_t(AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TOUCHSCREEN), mDevice->getSources());
@@ -1379,12 +1381,6 @@ TEST_F(InputDeviceTest, WhenMappersAreRegistered_DeviceIsNotIgnoredAndForwardsRe
ASSERT_NO_FATAL_FAILURE(mapper1->assertProcessWasCalled());
ASSERT_NO_FATAL_FAILURE(mapper2->assertProcessWasCalled());
-
- // Reset.
- mDevice->reset();
-
- ASSERT_NO_FATAL_FAILURE(mapper1->assertResetWasCalled());
- ASSERT_NO_FATAL_FAILURE(mapper2->assertResetWasCalled());
}
@@ -1424,10 +1420,16 @@ protected:
}
void addMapperAndConfigure(InputMapper* mapper) {
- InputReaderConfiguration config;
-
mDevice->addMapper(mapper);
- mDevice->configure(&config, 0);
+ mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), 0);
+ mDevice->reset(ARBITRARY_TIME);
+ }
+
+ void setDisplayInfoAndReconfigure(int32_t displayId, int32_t width, int32_t height,
+ int32_t orientation) {
+ mFakePolicy->setDisplayInfo(displayId, width, height, orientation);
+ mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(),
+ InputReaderConfiguration::CHANGE_DISPLAY_INFO);
}
static void process(InputMapper* mapper, nsecs_t when, int32_t deviceId, int32_t type,
@@ -1593,71 +1595,6 @@ TEST_F(KeyboardInputMapperTest, Process_SimpleKeyPress) {
ASSERT_EQ(ARBITRARY_TIME, args.downTime);
}
-TEST_F(KeyboardInputMapperTest, Reset_WhenKeysAreNotDown_DoesNotSynthesizeKeyUp) {
- KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
- AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
- addMapperAndConfigure(mapper);
-
- // Key down.
- process(mapper, ARBITRARY_TIME, DEVICE_ID,
- EV_KEY, KEY_HOME, AKEYCODE_HOME, 1, POLICY_FLAG_WAKE);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Key up.
- process(mapper, ARBITRARY_TIME, DEVICE_ID,
- EV_KEY, KEY_HOME, AKEYCODE_HOME, 0, POLICY_FLAG_WAKE);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Reset. Since no keys still down, should not synthesize any key ups.
- mapper->reset();
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-}
-
-TEST_F(KeyboardInputMapperTest, Reset_WhenKeysAreDown_SynthesizesKeyUps) {
- KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
- AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
- addMapperAndConfigure(mapper);
-
- // Metakey down.
- process(mapper, ARBITRARY_TIME, DEVICE_ID,
- EV_KEY, KEY_LEFTSHIFT, AKEYCODE_SHIFT_LEFT, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Key down.
- process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
- EV_KEY, KEY_A, AKEYCODE_A, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Reset. Since two keys are still down, should synthesize two key ups in reverse order.
- mapper->reset();
-
- NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
- ASSERT_EQ(DEVICE_ID, args.deviceId);
- ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
- ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
- ASSERT_EQ(AKEYCODE_A, args.keyCode);
- ASSERT_EQ(KEY_A, args.scanCode);
- ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
- ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
- ASSERT_EQ(uint32_t(0), args.policyFlags);
- ASSERT_EQ(ARBITRARY_TIME + 1, args.downTime);
-
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
- ASSERT_EQ(DEVICE_ID, args.deviceId);
- ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
- ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
- ASSERT_EQ(AKEYCODE_SHIFT_LEFT, args.keyCode);
- ASSERT_EQ(KEY_LEFTSHIFT, args.scanCode);
- ASSERT_EQ(AMETA_NONE, args.metaState);
- ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
- ASSERT_EQ(uint32_t(0), args.policyFlags);
- ASSERT_EQ(ARBITRARY_TIME + 1, args.downTime);
-
- // And that's it.
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-}
-
TEST_F(KeyboardInputMapperTest, Process_ShouldUpdateMetaState) {
KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
@@ -1703,7 +1640,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenNotOrientationAware_ShouldNotRotateD
AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
addMapperAndConfigure(mapper);
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_90);
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
@@ -1722,7 +1659,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
addConfigurationProperty("keyboard.orientationAware", "1");
addMapperAndConfigure(mapper);
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_0);
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
@@ -1734,7 +1671,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_LEFT));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_90);
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
@@ -1746,7 +1683,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_180);
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
@@ -1758,7 +1695,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_RIGHT));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_270);
ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
@@ -1774,7 +1711,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
// in the key up as we did in the key down.
NotifyKeyArgs args;
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_270);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, AKEYCODE_DPAD_UP, 1, 0);
@@ -1783,7 +1720,7 @@ TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
ASSERT_EQ(KEY_UP, args.scanCode);
ASSERT_EQ(AKEYCODE_DPAD_RIGHT, args.keyCode);
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_180);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, AKEYCODE_DPAD_UP, 0, 0);
@@ -2149,58 +2086,12 @@ TEST_F(CursorInputMapperTest, Process_ShouldHandleCombinedXYAndButtonUpdates) {
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
-TEST_F(CursorInputMapperTest, Reset_WhenButtonIsNotDown_ShouldNotSynthesizeButtonUp) {
- CursorInputMapper* mapper = new CursorInputMapper(mDevice);
- addConfigurationProperty("cursor.mode", "navigation");
- addMapperAndConfigure(mapper);
-
- NotifyMotionArgs args;
-
- // Button press.
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
- ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
-
- // Button release.
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 0, 0);
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
- ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
-
- // Reset. Should not synthesize button up since button is not pressed.
- mapper->reset();
-
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(CursorInputMapperTest, Reset_WhenButtonIsDown_ShouldSynthesizeButtonUp) {
- CursorInputMapper* mapper = new CursorInputMapper(mDevice);
- addConfigurationProperty("cursor.mode", "navigation");
- addMapperAndConfigure(mapper);
-
- NotifyMotionArgs args;
-
- // Button press.
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
- process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-
- // Reset. Should synthesize button up.
- mapper->reset();
-
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
- ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
- ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-}
-
TEST_F(CursorInputMapperTest, Process_WhenNotOrientationAware_ShouldNotRotateMotions) {
CursorInputMapper* mapper = new CursorInputMapper(mDevice);
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_90);
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 0, 1, 0, 1));
@@ -2219,7 +2110,7 @@ TEST_F(CursorInputMapperTest, Process_WhenOrientationAware_ShouldRotateMotions)
addConfigurationProperty("cursor.orientationAware", "1");
addMapperAndConfigure(mapper);
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_0);
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 0, 1, 0, 1));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 1, 1, 1, 1));
@@ -2230,7 +2121,7 @@ TEST_F(CursorInputMapperTest, Process_WhenOrientationAware_ShouldRotateMotions)
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 0, -1, 0));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 1, -1, 1));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_90);
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 0, 1, 1, 0));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 1, 1, 1, -1));
@@ -2241,7 +2132,7 @@ TEST_F(CursorInputMapperTest, Process_WhenOrientationAware_ShouldRotateMotions)
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 0, 0, 1));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 1, 1, 1));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_180);
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 0, 1, 0, -1));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 1, 1, -1, -1));
@@ -2252,7 +2143,7 @@ TEST_F(CursorInputMapperTest, Process_WhenOrientationAware_ShouldRotateMotions)
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 0, 1, 0));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 1, 1, -1));
- mFakePolicy->setDisplayInfo(DISPLAY_ID,
+ setDisplayInfoAndReconfigure(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_270);
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 0, 1, -1, 0));
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, 1, 1, -1, 1));
@@ -2480,6 +2371,8 @@ protected:
static const int32_t RAW_ORIENTATION_MAX;
static const int32_t RAW_DISTANCE_MIN;
static const int32_t RAW_DISTANCE_MAX;
+ static const int32_t RAW_TILT_MIN;
+ static const int32_t RAW_TILT_MAX;
static const int32_t RAW_ID_MIN;
static const int32_t RAW_ID_MAX;
static const int32_t RAW_SLOT_MIN;
@@ -2500,8 +2393,9 @@ protected:
MINOR = 1 << 5,
ID = 1 << 6,
DISTANCE = 1 << 7,
- SLOT = 1 << 8,
- TOOL_TYPE = 1 << 9,
+ TILT = 1 << 8,
+ SLOT = 1 << 9,
+ TOOL_TYPE = 1 << 10,
};
void prepareDisplay(int32_t orientation);
@@ -2526,6 +2420,8 @@ const int32_t TouchInputMapperTest::RAW_ORIENTATION_MIN = -7;
const int32_t TouchInputMapperTest::RAW_ORIENTATION_MAX = 7;
const int32_t TouchInputMapperTest::RAW_DISTANCE_MIN = 0;
const int32_t TouchInputMapperTest::RAW_DISTANCE_MAX = 7;
+const int32_t TouchInputMapperTest::RAW_TILT_MIN = 0;
+const int32_t TouchInputMapperTest::RAW_TILT_MAX = 150;
const int32_t TouchInputMapperTest::RAW_ID_MIN = 0;
const int32_t TouchInputMapperTest::RAW_ID_MAX = 9;
const int32_t TouchInputMapperTest::RAW_SLOT_MIN = 0;
@@ -2543,7 +2439,7 @@ const VirtualKeyDefinition TouchInputMapperTest::VIRTUAL_KEYS[2] = {
};
void TouchInputMapperTest::prepareDisplay(int32_t orientation) {
- mFakePolicy->setDisplayInfo(DISPLAY_ID, DISPLAY_WIDTH, DISPLAY_HEIGHT, orientation);
+ setDisplayInfoAndReconfigure(DISPLAY_ID, DISPLAY_WIDTH, DISPLAY_HEIGHT, orientation);
}
void TouchInputMapperTest::prepareVirtualKeys() {
@@ -2583,6 +2479,7 @@ protected:
void processPressure(SingleTouchInputMapper* mapper, int32_t pressure);
void processToolMajor(SingleTouchInputMapper* mapper, int32_t toolMajor);
void processDistance(SingleTouchInputMapper* mapper, int32_t distance);
+ void processTilt(SingleTouchInputMapper* mapper, int32_t tiltX, int32_t tiltY);
void processKey(SingleTouchInputMapper* mapper, int32_t code, int32_t value);
void processSync(SingleTouchInputMapper* mapper);
};
@@ -2610,6 +2507,12 @@ void SingleTouchInputMapperTest::prepareAxes(int axes) {
mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_DISTANCE,
RAW_DISTANCE_MIN, RAW_DISTANCE_MAX, 0, 0);
}
+ if (axes & TILT) {
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TILT_X,
+ RAW_TILT_MIN, RAW_TILT_MAX, 0, 0);
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TILT_Y,
+ RAW_TILT_MIN, RAW_TILT_MAX, 0, 0);
+ }
}
void SingleTouchInputMapperTest::processDown(SingleTouchInputMapper* mapper, int32_t x, int32_t y) {
@@ -2642,6 +2545,12 @@ void SingleTouchInputMapperTest::processDistance(
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_DISTANCE, 0, distance, 0);
}
+void SingleTouchInputMapperTest::processTilt(
+ SingleTouchInputMapper* mapper, int32_t tiltX, int32_t tiltY) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TILT_X, 0, tiltX, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TILT_Y, 0, tiltY, 0);
+}
+
void SingleTouchInputMapperTest::processKey(
SingleTouchInputMapper* mapper, int32_t code, int32_t value) {
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, code, 0, value, 0);
@@ -2658,7 +2567,7 @@ TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndNot
prepareAxes(POSITION);
addMapperAndConfigure(mapper);
- ASSERT_EQ(AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, mapper->getSources());
+ ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper->getSources());
}
TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndIsACursor_ReturnsTouchPad) {
@@ -2766,71 +2675,6 @@ TEST_F(SingleTouchInputMapperTest, MarkSupportedKeyCodes) {
ASSERT_FALSE(flags[1]);
}
-TEST_F(SingleTouchInputMapperTest, Reset_WhenVirtualKeysAreDown_SendsUp) {
- // Note: Ideally we should send cancels but the implementation is more straightforward
- // with up and this will only happen if a device is forcibly removed.
- SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
- addConfigurationProperty("touch.deviceType", "touchScreen");
- prepareDisplay(DISPLAY_ORIENTATION_0);
- prepareButtons();
- prepareAxes(POSITION);
- prepareVirtualKeys();
- addMapperAndConfigure(mapper);
-
- mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
- // Press virtual key.
- int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
- int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
- processDown(mapper, x, y);
- processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Reset. Since key is down, synthesize key up.
- mapper->reset();
-
- NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
- //ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
- ASSERT_EQ(DEVICE_ID, args.deviceId);
- ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
- ASSERT_EQ(POLICY_FLAG_VIRTUAL, args.policyFlags);
- ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
- ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY, args.flags);
- ASSERT_EQ(AKEYCODE_HOME, args.keyCode);
- ASSERT_EQ(KEY_HOME, args.scanCode);
- ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
- ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-}
-
-TEST_F(SingleTouchInputMapperTest, Reset_WhenNothingIsPressed_NothingMuchHappens) {
- SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
- addConfigurationProperty("touch.deviceType", "touchScreen");
- prepareDisplay(DISPLAY_ORIENTATION_0);
- prepareButtons();
- prepareAxes(POSITION);
- prepareVirtualKeys();
- addMapperAndConfigure(mapper);
-
- // Press virtual key.
- int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
- int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
- processDown(mapper, x, y);
- processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Release virtual key.
- processUp(mapper);
- processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
- // Reset. Since no key is down, nothing happens.
- mapper->reset();
-
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndReleasedNormally_SendsKeyDownAndKeyUp) {
SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
addConfigurationProperty("touch.deviceType", "touchScreen");
@@ -3260,7 +3104,7 @@ TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) {
addConfigurationProperty("touch.deviceType", "touchScreen");
prepareDisplay(DISPLAY_ORIENTATION_0);
prepareButtons();
- prepareAxes(POSITION | PRESSURE | TOOL | DISTANCE);
+ prepareAxes(POSITION | PRESSURE | TOOL | DISTANCE | TILT);
addMapperAndConfigure(mapper);
// These calculations are based on the input device calibration documentation.
@@ -3268,7 +3112,9 @@ TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) {
int32_t rawY = 200;
int32_t rawPressure = 10;
int32_t rawToolMajor = 12;
- int32_t rawDistance = 0;
+ int32_t rawDistance = 2;
+ int32_t rawTiltX = 30;
+ int32_t rawTiltY = 110;
float x = toDisplayX(rawX);
float y = toDisplayY(rawY);
@@ -3277,16 +3123,25 @@ TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) {
float tool = float(rawToolMajor) * GEOMETRIC_SCALE;
float distance = float(rawDistance);
+ float tiltCenter = (RAW_TILT_MAX + RAW_TILT_MIN) * 0.5f;
+ float tiltScale = M_PI / 180;
+ float tiltXAngle = (rawTiltX - tiltCenter) * tiltScale;
+ float tiltYAngle = (rawTiltY - tiltCenter) * tiltScale;
+ float orientation = atan2f(-sinf(tiltXAngle), sinf(tiltYAngle));
+ float tilt = acosf(cosf(tiltXAngle) * cosf(tiltYAngle));
+
processDown(mapper, rawX, rawY);
processPressure(mapper, rawPressure);
processToolMajor(mapper, rawToolMajor);
processDistance(mapper, rawDistance);
+ processTilt(mapper, rawTiltX, rawTiltY);
processSync(mapper);
NotifyMotionArgs args;
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, tool, tool, tool, tool, 0, distance));
+ x, y, pressure, size, tool, tool, tool, tool, orientation, distance));
+ ASSERT_EQ(tilt, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_TILT));
}
TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllButtons) {
@@ -3482,8 +3337,48 @@ TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
- // finger
+ // brush
processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_BRUSH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // pencil
+ processKey(mapper, BTN_TOOL_BRUSH, 0);
+ processKey(mapper, BTN_TOOL_PENCIL, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // airbrush
+ processKey(mapper, BTN_TOOL_PENCIL, 0);
+ processKey(mapper, BTN_TOOL_AIRBRUSH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // mouse
+ processKey(mapper, BTN_TOOL_AIRBRUSH, 0);
+ processKey(mapper, BTN_TOOL_MOUSE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
+ // lens
+ processKey(mapper, BTN_TOOL_MOUSE, 0);
+ processKey(mapper, BTN_TOOL_LENS, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
+ // finger
+ processKey(mapper, BTN_TOOL_LENS, 0);
processKey(mapper, BTN_TOOL_FINGER, 1);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
@@ -3504,7 +3399,15 @@ TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+ // mouse trumps eraser
+ processKey(mapper, BTN_TOOL_MOUSE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
// back to default tool type
+ processKey(mapper, BTN_TOOL_MOUSE, 0);
processKey(mapper, BTN_TOOL_RUBBER, 0);
processKey(mapper, BTN_TOOL_PEN, 0);
processKey(mapper, BTN_TOOL_FINGER, 0);
@@ -3587,29 +3490,29 @@ TEST_F(SingleTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueI
toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
}
-TEST_F(SingleTouchInputMapperTest, Process_WhenAbsDistanceIsPresent_HoversIfItsValueIsGreaterThanZero) {
+TEST_F(SingleTouchInputMapperTest, Process_WhenAbsPressureIsPresent_HoversIfItsValueIsZero) {
SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
addConfigurationProperty("touch.deviceType", "touchScreen");
prepareDisplay(DISPLAY_ORIENTATION_0);
prepareButtons();
- prepareAxes(POSITION | DISTANCE);
+ prepareAxes(POSITION | PRESSURE);
addMapperAndConfigure(mapper);
NotifyMotionArgs motionArgs;
- // initially hovering because distance is 1, pressure defaults to 0
+ // initially hovering because pressure is 0
processDown(mapper, 100, 200);
- processDistance(mapper, 1);
+ processPressure(mapper, 0);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
// move a little
processMove(mapper, 150, 250);
@@ -3617,23 +3520,23 @@ TEST_F(SingleTouchInputMapperTest, Process_WhenAbsDistanceIsPresent_HoversIfItsV
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
- // down when distance goes to 0, pressure defaults to 1
- processDistance(mapper, 0);
+ // down when pressure is non-zero
+ processPressure(mapper, RAW_PRESSURE_MAX);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
- // up when distance goes to 1, hover restored
- processDistance(mapper, 1);
+ // up when pressure becomes 0, hover restored
+ processPressure(mapper, 0);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
@@ -3643,12 +3546,12 @@ TEST_F(SingleTouchInputMapperTest, Process_WhenAbsDistanceIsPresent_HoversIfItsV
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
// exit hover when pointer goes away
processUp(mapper);
@@ -3656,7 +3559,7 @@ TEST_F(SingleTouchInputMapperTest, Process_WhenAbsDistanceIsPresent_HoversIfItsV
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
}
@@ -4823,8 +4726,48 @@ TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
- // finger
+ // brush
processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_BRUSH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // pencil
+ processKey(mapper, BTN_TOOL_BRUSH, 0);
+ processKey(mapper, BTN_TOOL_PENCIL, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // airbrush
+ processKey(mapper, BTN_TOOL_PENCIL, 0);
+ processKey(mapper, BTN_TOOL_AIRBRUSH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // mouse
+ processKey(mapper, BTN_TOOL_AIRBRUSH, 0);
+ processKey(mapper, BTN_TOOL_MOUSE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
+ // lens
+ processKey(mapper, BTN_TOOL_MOUSE, 0);
+ processKey(mapper, BTN_TOOL_LENS, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
+ // finger
+ processKey(mapper, BTN_TOOL_LENS, 0);
processKey(mapper, BTN_TOOL_FINGER, 1);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
@@ -4845,6 +4788,13 @@ TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+ // mouse trumps eraser
+ processKey(mapper, BTN_TOOL_MOUSE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
+
// MT tool type trumps BTN tool types: MT_TOOL_FINGER
processToolType(mapper, MT_TOOL_FINGER); // this is the first time we send MT_TOOL_TYPE
processSync(mapper);
@@ -4861,6 +4811,7 @@ TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
// back to default tool type
processToolType(mapper, -1); // use a deliberately undefined tool type, for testing
+ processKey(mapper, BTN_TOOL_MOUSE, 0);
processKey(mapper, BTN_TOOL_RUBBER, 0);
processKey(mapper, BTN_TOOL_PEN, 0);
processKey(mapper, BTN_TOOL_FINGER, 0);
@@ -4942,29 +4893,29 @@ TEST_F(MultiTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueIs
toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
}
-TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTDistanceIsPresent_HoversIfItsValueIsGreaterThanZero) {
+TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTPressureIsPresent_HoversIfItsValueIsZero) {
MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
addConfigurationProperty("touch.deviceType", "touchScreen");
prepareDisplay(DISPLAY_ORIENTATION_0);
- prepareAxes(POSITION | ID | SLOT | DISTANCE);
+ prepareAxes(POSITION | ID | SLOT | PRESSURE);
addMapperAndConfigure(mapper);
NotifyMotionArgs motionArgs;
- // initially hovering because distance is 1, pressure defaults to 0
+ // initially hovering because pressure is 0
processId(mapper, 1);
processPosition(mapper, 100, 200);
- processDistance(mapper, 1);
+ processPressure(mapper, 0);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
// move a little
processPosition(mapper, 150, 250);
@@ -4972,23 +4923,23 @@ TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTDistanceIsPresent_HoversIfIts
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
- // down when distance goes to 0, pressure defaults to 1
- processDistance(mapper, 0);
+ // down when pressure becomes non-zero
+ processPressure(mapper, RAW_PRESSURE_MAX);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
- // up when distance goes to 1, hover restored
- processDistance(mapper, 1);
+ // up when pressure becomes 0, hover restored
+ processPressure(mapper, 0);
processSync(mapper);
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
@@ -4998,12 +4949,12 @@ TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTDistanceIsPresent_HoversIfIts
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
// exit hover when pointer goes away
processId(mapper, -1);
@@ -5011,7 +4962,7 @@ TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTDistanceIsPresent_HoversIfIts
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
}
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index a679ca72daa2..f5fd6bd866a5 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -817,11 +817,10 @@ class AppWidgetService extends IAppWidgetService.Stub
}
Provider lookupProviderLocked(ComponentName provider) {
- final String className = provider.getClassName();
final int N = mInstalledProviders.size();
for (int i=0; i<N; i++) {
Provider p = mInstalledProviders.get(i);
- if (p.info.provider.equals(provider) || className.equals(p.info.oldName)) {
+ if (p.info.provider.equals(provider)) {
return p;
}
}
@@ -1006,11 +1005,6 @@ class AppWidgetService extends IAppWidgetService.Stub
p = new Provider();
AppWidgetProviderInfo info = p.info = new AppWidgetProviderInfo();
- // If metaData was null, we would have returned earlier when getting
- // the parser No need to do the check here
- info.oldName = activityInfo.metaData.getString(
- AppWidgetManager.META_DATA_APPWIDGET_OLD_NAME);
-
info.provider = component;
p.uid = activityInfo.applicationInfo.uid;
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 1c06636b1a04..b3309e539690 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -3312,6 +3312,8 @@ class BackupManagerService extends IBackupManager.Stub {
}
} catch (NumberFormatException e) {
Slog.w(TAG, "Corrupt restore manifest for package " + info.packageName);
+ } catch (IllegalArgumentException e) {
+ Slog.w(TAG, e.getMessage());
}
return policy;
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 1aff9a2b80d0..ab9ae69b9945 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -498,7 +498,7 @@ class BatteryService extends Binder {
return;
}
- if (args == null || args.length == 0) {
+ if (args == null || args.length == 0 || "-a".equals(args[0])) {
synchronized (this) {
pw.println("Current Battery Service state:");
pw.println(" AC powered: " + mAcOnline);
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index acfc7a4d9522..1341dd4dd560 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -163,8 +163,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
private boolean mTestMode;
private static ConnectivityService sServiceInstance;
- private AtomicBoolean mBackgroundDataEnabled = new AtomicBoolean(true);
-
private INetworkManagementService mNetd;
private INetworkPolicyManager mPolicyManager;
@@ -213,13 +211,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
MAX_NETWORK_STATE_TRACKER_EVENT + 5;
/**
- * used internally to set the background data preference
- * arg1 = TRUE for enabled, FALSE for disabled
- */
- private static final int EVENT_SET_BACKGROUND_DATA =
- MAX_NETWORK_STATE_TRACKER_EVENT + 6;
-
- /**
* used internally to set enable/disable cellular data
* arg1 = ENBALED or DISABLED
*/
@@ -317,9 +308,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
handlerThread.start();
mHandler = new MyHandler(handlerThread.getLooper());
- mBackgroundDataEnabled.set(Settings.Secure.getInt(context.getContentResolver(),
- Settings.Secure.BACKGROUND_DATA, 1) == 1);
-
// setup our unique device name
if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
String id = Settings.Secure.getString(context.getContentResolver(),
@@ -468,14 +456,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
for (int netType : mPriorityList) {
switch (mNetConfigs[netType].radio) {
case ConnectivityManager.TYPE_WIFI:
- if (DBG) log("Starting Wifi Service.");
- WifiStateTracker wst = new WifiStateTracker();
- WifiService wifiService = new WifiService(context);
- ServiceManager.addService(Context.WIFI_SERVICE, wifiService);
- wifiService.checkAndStartWifi();
- mNetTrackers[ConnectivityManager.TYPE_WIFI] = wst;
- wst.startMonitoring(context, mHandler);
- break;
+ mNetTrackers[netType] = new WifiStateTracker(netType,
+ mNetConfigs[netType].name);
+ mNetTrackers[netType].startMonitoring(context, mHandler);
+ break;
case ConnectivityManager.TYPE_MOBILE:
mNetTrackers[netType] = new MobileDataStateTracker(netType,
mNetConfigs[netType].name);
@@ -882,15 +866,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
FeatureUser f = new FeatureUser(networkType, feature, binder);
- // TODO - move this into the MobileDataStateTracker
- int usedNetworkType = networkType;
- if(networkType == ConnectivityManager.TYPE_MOBILE) {
- usedNetworkType = convertFeatureToNetworkType(feature);
- if (usedNetworkType < 0) {
- loge("Can't match any netTracker!");
- usedNetworkType = networkType;
- }
- }
+ // TODO - move this into individual networktrackers
+ int usedNetworkType = convertFeatureToNetworkType(networkType, feature);
if (mProtectedNetworks.contains(usedNetworkType)) {
enforceConnectivityInternalPermission();
@@ -900,7 +877,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (network != null) {
Integer currentPid = new Integer(getCallingPid());
if (usedNetworkType != networkType) {
- NetworkStateTracker radio = mNetTrackers[networkType];
NetworkInfo ni = network.getNetworkInfo();
if (ni.isAvailable() == false) {
@@ -1046,14 +1022,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
- // TODO - move to MobileDataStateTracker
- int usedNetworkType = networkType;
- if (networkType == ConnectivityManager.TYPE_MOBILE) {
- usedNetworkType = convertFeatureToNetworkType(feature);
- if (usedNetworkType < 0) {
- usedNetworkType = networkType;
- }
- }
+ // TODO - move to individual network trackers
+ int usedNetworkType = convertFeatureToNetworkType(networkType, feature);
+
tracker = mNetTrackers[usedNetworkType];
if (tracker == null) {
if (DBG) log("ignoring - no known tracker for net type " + usedNetworkType);
@@ -1226,35 +1197,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
/**
- * @see ConnectivityManager#getBackgroundDataSetting()
- */
- public boolean getBackgroundDataSetting() {
- return mBackgroundDataEnabled.get();
- }
-
- /**
- * @see ConnectivityManager#setBackgroundDataSetting(boolean)
- */
- public void setBackgroundDataSetting(boolean allowBackgroundDataUsage) {
- mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.CHANGE_BACKGROUND_DATA_SETTING,
- "ConnectivityService");
-
- mBackgroundDataEnabled.set(allowBackgroundDataUsage);
-
- mHandler.sendMessage(mHandler.obtainMessage(EVENT_SET_BACKGROUND_DATA,
- (allowBackgroundDataUsage ? ENABLED : DISABLED), 0));
- }
-
- private void handleSetBackgroundData(boolean enabled) {
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.BACKGROUND_DATA, enabled ? 1 : 0);
- Intent broadcast = new Intent(
- ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
- mContext.sendBroadcast(broadcast);
- }
-
- /**
* @see ConnectivityManager#getMobileDataEnabled()
*/
public boolean getMobileDataEnabled() {
@@ -1778,15 +1720,32 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
mCurrentLinkProperties[netType] = newLp;
- updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault());
+ boolean resetDns = updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault());
- if (doReset || resetMask != 0) {
+ if (resetMask != 0 || resetDns) {
LinkProperties linkProperties = mNetTrackers[netType].getLinkProperties();
if (linkProperties != null) {
String iface = linkProperties.getInterfaceName();
if (TextUtils.isEmpty(iface) == false) {
- if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")");
- NetworkUtils.resetConnections(iface, resetMask);
+ if (resetMask != 0) {
+ if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")");
+ NetworkUtils.resetConnections(iface, resetMask);
+
+ // Tell VPN the interface is down. It is a temporary
+ // but effective fix to make VPN aware of the change.
+ if ((resetMask & NetworkUtils.RESET_IPV4_ADDRESSES) != 0) {
+ mVpn.interfaceStatusChanged(iface, false);
+ }
+ }
+ if (resetDns) {
+ if (DBG) log("resetting DNS cache for " + iface);
+ try {
+ mNetd.flushInterfaceDnsCache(iface);
+ } catch (Exception e) {
+ // never crash - catch them all
+ loge("Exception resetting dns cache: " + e);
+ }
+ }
}
}
}
@@ -1808,8 +1767,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
* is a noop.
* Uses isLinkDefault to determine if default routes should be set or conversely if
* host routes should be set to the dns servers
+ * returns a boolean indicating the routes changed
*/
- private void updateRoutes(LinkProperties newLp, LinkProperties curLp, boolean isLinkDefault) {
+ private boolean updateRoutes(LinkProperties newLp, LinkProperties curLp,
+ boolean isLinkDefault) {
Collection<RouteInfo> routesToAdd = null;
CompareResult<InetAddress> dnsDiff = new CompareResult<InetAddress>();
CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>();
@@ -1822,6 +1783,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
dnsDiff.added = newLp.getDnses();
}
+ boolean routesChanged = (routeDiff.removed.size() != 0 || routeDiff.added.size() != 0);
+
for (RouteInfo r : routeDiff.removed) {
if (isLinkDefault || ! r.isDefaultRoute()) {
removeRoute(curLp, r);
@@ -1849,15 +1812,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (!isLinkDefault) {
// handle DNS routes
- if (routeDiff.removed.size() == 0 && routeDiff.added.size() == 0) {
- // no change in routes, check for change in dns themselves
- for (InetAddress oldDns : dnsDiff.removed) {
- removeRouteToAddress(curLp, oldDns);
- }
- for (InetAddress newDns : dnsDiff.added) {
- addRouteToAddress(newLp, newDns);
- }
- } else {
+ if (routesChanged) {
// routes changed - remove all old dns entries and add new
if (curLp != null) {
for (InetAddress oldDns : curLp.getDnses()) {
@@ -1869,8 +1824,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
addRouteToAddress(newLp, newDns);
}
}
+ } else {
+ // no change in routes, check for change in dns themselves
+ for (InetAddress oldDns : dnsDiff.removed) {
+ removeRouteToAddress(curLp, oldDns);
+ }
+ for (InetAddress newDns : dnsDiff.added) {
+ addRouteToAddress(newLp, newDns);
+ }
}
}
+ return routesChanged;
}
@@ -2268,12 +2232,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
handleSetNetworkPreference(preference);
break;
}
- case EVENT_SET_BACKGROUND_DATA:
- {
- boolean enabled = (msg.arg1 == ENABLED);
- handleSetBackgroundData(enabled);
- break;
- }
case EVENT_SET_MOBILE_DATA:
{
boolean enabled = (msg.arg1 == ENABLED);
@@ -2650,25 +2608,38 @@ public class ConnectivityService extends IConnectivityManager.Stub {
Slog.e(TAG, s);
}
- int convertFeatureToNetworkType(String feature){
- int networkType = -1;
- if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
- networkType = ConnectivityManager.TYPE_MOBILE_MMS;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
- networkType = ConnectivityManager.TYPE_MOBILE_SUPL;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
- TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
- networkType = ConnectivityManager.TYPE_MOBILE_DUN;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
- networkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_FOTA)) {
- networkType = ConnectivityManager.TYPE_MOBILE_FOTA;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_IMS)) {
- networkType = ConnectivityManager.TYPE_MOBILE_IMS;
- } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_CBS)) {
- networkType = ConnectivityManager.TYPE_MOBILE_CBS;
- }
- return networkType;
+ int convertFeatureToNetworkType(int networkType, String feature) {
+ int usedNetworkType = networkType;
+
+ if(networkType == ConnectivityManager.TYPE_MOBILE) {
+ if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
+ TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_FOTA)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_FOTA;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_IMS)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_IMS;
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_CBS)) {
+ usedNetworkType = ConnectivityManager.TYPE_MOBILE_CBS;
+ } else {
+ Slog.e(TAG, "Can't match any mobile netTracker!");
+ }
+ } else if (networkType == ConnectivityManager.TYPE_WIFI) {
+ if (TextUtils.equals(feature, "p2p")) {
+ usedNetworkType = ConnectivityManager.TYPE_WIFI_P2P;
+ } else {
+ Slog.e(TAG, "Can't match any wifi netTracker!");
+ }
+ } else {
+ Slog.e(TAG, "Unexpected network type");
+ }
+ return usedNetworkType;
}
private static <T> T checkNotNull(T value, String message) {
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index d54930870564..f1b8bae47fcb 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -1556,13 +1556,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return false;
}
}
-
- LockPatternUtils utils = new LockPatternUtils(mContext);
- if(utils.checkPasswordHistory(password)) {
- Slog.w(TAG, "resetPassword: password is the same as one of the last "
- + getPasswordHistoryLength(null) + " passwords");
- return false;
- }
}
int callingUid = Binder.getCallingUid();
diff --git a/services/java/com/android/server/DropBoxManagerService.java b/services/java/com/android/server/DropBoxManagerService.java
index 5c878c946231..d37c9ab14b77 100644
--- a/services/java/com/android/server/DropBoxManagerService.java
+++ b/services/java/com/android/server/DropBoxManagerService.java
@@ -28,7 +28,6 @@ import android.os.Debug;
import android.os.DropBoxManager;
import android.os.FileUtils;
import android.os.Handler;
-import android.os.ParcelFileDescriptor;
import android.os.StatFs;
import android.os.SystemClock;
import android.provider.Settings;
@@ -45,14 +44,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
-import java.util.Comparator;
import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.zip.GZIPOutputStream;
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 73d790a073c0..6b64dd0fc0ee 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -1,5 +1,4 @@
/*
- * Copyright (C) 2006-2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -48,7 +47,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
@@ -57,7 +55,6 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.ContentObserver;
-import android.graphics.BitmapFactory;
import android.inputmethodservice.InputMethodService;
import android.os.Binder;
import android.os.Environment;
@@ -98,12 +95,10 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import java.util.TreeMap;
/**
@@ -147,7 +142,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
final Handler mHandler;
final InputMethodSettings mSettings;
final SettingsObserver mSettingsObserver;
- final StatusBarManagerService mStatusBar;
final IWindowManager mIWindowManager;
final HandlerCaller mCaller;
private final InputMethodFileManager mFileManager;
@@ -162,10 +156,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
new LruCache<SuggestionSpan, InputMethodInfo>(SECURE_SUGGESTION_SPANS_MAX_SIZE);
// Ongoing notification
- private final NotificationManager mNotificationManager;
- private final KeyguardManager mKeyguardManager;
- private final Notification mImeSwitcherNotification;
- private final PendingIntent mImeSwitchPendingIntent;
+ private NotificationManager mNotificationManager;
+ private KeyguardManager mKeyguardManager;
+ private StatusBarManagerService mStatusBar;
+ private Notification mImeSwitcherNotification;
+ private PendingIntent mImeSwitchPendingIntent;
private boolean mShowOngoingImeSwitcherForPhones;
private boolean mNotificationShown;
@@ -469,8 +464,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
// Pick another one...
Slog.i(TAG, "Current input method removed: " + curInputMethodId);
mImeWindowVis = 0;
- mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
- mBackDisposition);
+ updateImeWindowStatusLocked();
if (!chooseNewDefaultIMELocked()) {
changed = true;
curIm = null;
@@ -511,7 +505,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
- public InputMethodManagerService(Context context, StatusBarManagerService statusBar) {
+ public InputMethodManagerService(Context context) {
mContext = context;
mRes = context.getResources();
mHandler = new Handler(this);
@@ -524,10 +518,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
});
- mKeyguardManager = (KeyguardManager)
- mContext.getSystemService(Context.KEYGUARD_SERVICE);
- mNotificationManager = (NotificationManager)
- mContext.getSystemService(Context.NOTIFICATION_SERVICE);
mImeSwitcherNotification = new Notification();
mImeSwitcherNotification.icon = com.android.internal.R.drawable.ic_notification_ime_default;
mImeSwitcherNotification.when = 0;
@@ -553,8 +543,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
screenOnOffFilt.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mContext.registerReceiver(new ScreenOnOffReceiver(), screenOnOffFilt);
- mStatusBar = statusBar;
- statusBar.setIconVisibility("ime", false);
mNotificationShown = false;
// mSettings should be created before buildInputMethodListLocked
@@ -608,10 +596,17 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
- public void systemReady() {
+ public void systemReady(StatusBarManagerService statusBar) {
synchronized (mMethodMap) {
if (!mSystemReady) {
mSystemReady = true;
+ mKeyguardManager = (KeyguardManager)
+ mContext.getSystemService(Context.KEYGUARD_SERVICE);
+ mNotificationManager = (NotificationManager)
+ mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ mStatusBar = statusBar;
+ statusBar.setIconVisibility("ime", false);
+ updateImeWindowStatusLocked();
mShowOngoingImeSwitcherForPhones = mRes.getBoolean(
com.android.internal.R.bool.show_ongoing_ime_switcher);
try {
@@ -623,6 +618,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
+ void updateImeWindowStatusLocked() {
+ if (mStatusBar != null) {
+ mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
+ mBackDisposition);
+ }
+ }
+
@Override
public List<InputMethodInfo> getInputMethodList() {
synchronized (mMethodMap) {
@@ -1009,7 +1011,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mEnabledSession = null;
mCurMethod = null;
}
- mStatusBar.setIconVisibility("ime", false);
+ if (mStatusBar != null) {
+ mStatusBar.setIconVisibility("ime", false);
+ }
}
@Override
@@ -1046,7 +1050,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
synchronized (mMethodMap) {
if (iconId == 0) {
if (DEBUG) Slog.d(TAG, "hide the small icon for the input method");
- mStatusBar.setIconVisibility("ime", false);
+ if (mStatusBar != null) {
+ mStatusBar.setIconVisibility("ime", false);
+ }
} else if (packageName != null) {
if (DEBUG) Slog.d(TAG, "show a small icon for the input method");
CharSequence contentDescription = null;
@@ -1057,9 +1063,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
} catch (NameNotFoundException nnfe) {
/* ignore */
}
- mStatusBar.setIcon("ime", packageName, iconId, 0,
- contentDescription != null ? contentDescription.toString() : null);
- mStatusBar.setIconVisibility("ime", true);
+ if (mStatusBar != null) {
+ mStatusBar.setIcon("ime", packageName, iconId, 0,
+ contentDescription != null
+ ? contentDescription.toString() : null);
+ mStatusBar.setIconVisibility("ime", true);
+ }
}
}
} finally {
@@ -1125,7 +1134,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
synchronized (mMethodMap) {
mImeWindowVis = vis;
mBackDisposition = backDisposition;
- mStatusBar.setImeWindowStatus(token, vis, backDisposition);
+ if (mStatusBar != null) {
+ mStatusBar.setImeWindowStatus(token, vis, backDisposition);
+ }
final boolean iconVisibility = (vis & InputMethodService.IME_ACTIVE) != 0;
final InputMethodInfo imi = mMethodMap.get(mCurMethodId);
if (imi != null && iconVisibility && needsToShowImeSwitchOngoingNotification()) {
@@ -1142,12 +1153,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mImeSwitcherNotification.setLatestEventInfo(
mContext, title, summary, mImeSwitchPendingIntent);
- mNotificationManager.notify(
- com.android.internal.R.string.select_input_method,
- mImeSwitcherNotification);
- mNotificationShown = true;
+ if (mNotificationManager != null) {
+ mNotificationManager.notify(
+ com.android.internal.R.string.select_input_method,
+ mImeSwitcherNotification);
+ mNotificationShown = true;
+ }
} else {
- if (mNotificationShown) {
+ if (mNotificationShown && mNotificationManager != null) {
mNotificationManager.cancel(
com.android.internal.R.string.select_input_method);
mNotificationShown = false;
@@ -1252,8 +1265,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mImeWindowVis = (mInputShown || hardKeyShown) ? (
InputMethodService.IME_ACTIVE | InputMethodService.IME_VISIBLE)
: 0;
- mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
- mBackDisposition);
+ updateImeWindowStatusLocked();
// If subtype is null, try to find the most applicable one from
// getCurrentInputMethodSubtype.
if (subtype == null) {
@@ -1374,13 +1386,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (DEBUG) Slog.w(TAG, "Ignoring hideSoftInput of uid "
+ uid + ": " + client);
mImeWindowVis = 0;
- mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis,
- mBackDisposition);
+ updateImeWindowStatusLocked();
return false;
}
} catch (RemoteException e) {
mImeWindowVis = 0;
- mStatusBar.setImeWindowStatus(mCurToken, mImeWindowVis, mBackDisposition);
+ updateImeWindowStatusLocked();
return false;
}
}
@@ -2151,7 +2162,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
});
- if (showSubtypes && !(mKeyguardManager.isKeyguardLocked()
+ if (showSubtypes && mKeyguardManager != null && !(mKeyguardManager.isKeyguardLocked()
&& mKeyguardManager.isKeyguardSecure())) {
mDialogBuilder.setPositiveButton(
com.android.internal.R.string.configure_input_methods,
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 7f61c6351842..00aa14cb2ea8 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -89,13 +89,17 @@ import javax.crypto.spec.PBEKeySpec;
* @hide - Applications should use android.os.storage.StorageManager
* to access the MountService.
*/
-class MountService extends IMountService.Stub implements INativeDaemonConnectorCallbacks {
+class MountService extends IMountService.Stub
+ implements INativeDaemonConnectorCallbacks, Watchdog.Monitor {
private static final boolean LOCAL_LOGD = false;
private static final boolean DEBUG_UNMOUNT = false;
private static final boolean DEBUG_EVENTS = false;
private static final boolean DEBUG_OBB = false;
+ // Disable this since it messes up long-running cryptfs operations.
+ private static final boolean WATCHDOG_ENABLE = false;
+
private static final String TAG = "MountService";
private static final String VOLD_TAG = "VoldConnector";
@@ -474,7 +478,8 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC
// it is not safe to call vold with mVolumeStates locked
// so we make a copy of the paths and states and process them
// outside the lock
- String[] paths, states;
+ String[] paths;
+ String[] states;
int count;
synchronized (mVolumeStates) {
Set<String> keys = mVolumeStates.keySet();
@@ -1179,6 +1184,11 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC
mReady = false;
Thread thread = new Thread(mConnector, VOLD_TAG);
thread.start();
+
+ // Add ourself to the Watchdog monitors if enabled.
+ if (WATCHDOG_ENABLE) {
+ Watchdog.getInstance().addMonitor(this);
+ }
}
/**
@@ -2379,5 +2389,11 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC
}
}
}
-}
+ /** {@inheritDoc} */
+ public void monitor() {
+ if (mConnector != null) {
+ mConnector.monitor();
+ }
+ }
+}
diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java
index fed554cce31c..43d938cea3d8 100644
--- a/services/java/com/android/server/NativeDaemonConnector.java
+++ b/services/java/com/android/server/NativeDaemonConnector.java
@@ -16,24 +16,18 @@
package com.android.server;
-import android.net.LocalSocketAddress;
import android.net.LocalSocket;
-import android.os.Environment;
+import android.net.LocalSocketAddress;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.SystemClock;
-import android.os.SystemProperties;
import android.util.Slog;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.net.Socket;
-
-import java.util.List;
import java.util.ArrayList;
-import java.util.ListIterator;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -42,7 +36,7 @@ import java.util.concurrent.LinkedBlockingQueue;
* daemon which uses the libsysutils FrameworkListener
* protocol.
*/
-final class NativeDaemonConnector implements Runnable, Handler.Callback {
+final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdog.Monitor {
private static final boolean LOCAL_LOGD = false;
private BlockingQueue<String> mResponseQueue;
@@ -52,6 +46,9 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
private INativeDaemonConnectorCallbacks mCallbacks;
private Handler mCallbackHandler;
+ /** Lock held whenever communicating with native daemon. */
+ private Object mDaemonLock = new Object();
+
private final int BUFFER_SIZE = 4096;
class ResponseCode {
@@ -177,7 +174,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
Slog.e(TAG, "Communications error", ex);
throw ex;
} finally {
- synchronized (this) {
+ synchronized (mDaemonLock) {
if (mOutputStream != null) {
try {
mOutputStream.close();
@@ -198,9 +195,8 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
}
}
- private void sendCommand(String command)
- throws NativeDaemonConnectorException {
- sendCommand(command, null);
+ private void sendCommandLocked(String command) throws NativeDaemonConnectorException {
+ sendCommandLocked(command, null);
}
/**
@@ -209,25 +205,23 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
* @param command The command to send to the daemon
* @param argument The argument to send with the command (or null)
*/
- private void sendCommand(String command, String argument)
- throws NativeDaemonConnectorException {
- synchronized (this) {
- if (LOCAL_LOGD) Slog.d(TAG, String.format("SND -> {%s} {%s}", command, argument));
- if (mOutputStream == null) {
- Slog.e(TAG, "No connection to daemon", new IllegalStateException());
- throw new NativeDaemonConnectorException("No output stream!");
- } else {
- StringBuilder builder = new StringBuilder(command);
- if (argument != null) {
- builder.append(argument);
- }
- builder.append('\0');
+ private void sendCommandLocked(String command, String argument)
+ throws NativeDaemonConnectorException {
+ if (LOCAL_LOGD) Slog.d(TAG, String.format("SND -> {%s} {%s}", command, argument));
+ if (mOutputStream == null) {
+ Slog.e(TAG, "No connection to daemon", new IllegalStateException());
+ throw new NativeDaemonConnectorException("No output stream!");
+ } else {
+ StringBuilder builder = new StringBuilder(command);
+ if (argument != null) {
+ builder.append(argument);
+ }
+ builder.append('\0');
- try {
- mOutputStream.write(builder.toString().getBytes());
- } catch (IOException ex) {
- Slog.e(TAG, "IOException in sendCommand", ex);
- }
+ try {
+ mOutputStream.write(builder.toString().getBytes());
+ } catch (IOException ex) {
+ Slog.e(TAG, "IOException in sendCommand", ex);
}
}
}
@@ -235,10 +229,15 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
/**
* Issue a command to the native daemon and return the responses
*/
- public synchronized ArrayList<String> doCommand(String cmd)
- throws NativeDaemonConnectorException {
+ public ArrayList<String> doCommand(String cmd) throws NativeDaemonConnectorException {
+ synchronized (mDaemonLock) {
+ return doCommandLocked(cmd);
+ }
+ }
+
+ private ArrayList<String> doCommandLocked(String cmd) throws NativeDaemonConnectorException {
mResponseQueue.clear();
- sendCommand(cmd);
+ sendCommandLocked(cmd);
ArrayList<String> response = new ArrayList<String>();
boolean complete = false;
@@ -278,7 +277,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
return response;
}
- /*
+ /**
* Issues a list command and returns the cooked list
*/
public String[] doListCommand(String cmd, int expectedResponseCode)
@@ -317,4 +316,9 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback {
}
throw new NativeDaemonConnectorException("Got an empty response");
}
+
+ /** {@inheritDoc} */
+ public void monitor() {
+ synchronized (mDaemonLock) { }
+ }
}
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 782e7d7acdd5..06077dd97728 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -18,6 +18,7 @@ package com.android.server;
import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
import static android.provider.Settings.Secure.NETSTATS_ENABLED;
@@ -68,7 +69,7 @@ import libcore.io.IoUtils;
/**
* @hide
*/
-class NetworkManagementService extends INetworkManagementService.Stub {
+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";
@@ -88,8 +89,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
/** {@link #mStatsXtUid} headers. */
private static final String KEY_IFACE = "iface";
- private static final String KEY_TAG_HEX = "acct_tag_hex";
private static final String KEY_UID = "uid_tag_int";
+ private static final String KEY_COUNTER_SET = "cnt_set";
+ private static final String KEY_TAG_HEX = "acct_tag_hex";
private static final String KEY_RX_BYTES = "rx_bytes";
private static final String KEY_RX_PACKETS = "rx_packets";
private static final String KEY_TX_BYTES = "tx_bytes";
@@ -139,7 +141,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
/** Set of UIDs with active reject rules. */
private SparseBooleanArray mUidRejectOnQuota = new SparseBooleanArray();
- private boolean mBandwidthControlEnabled;
+ private volatile boolean mBandwidthControlEnabled;
/**
* Constructs a new NetworkManagementService instance
@@ -162,6 +164,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
mConnector = new NativeDaemonConnector(
new NetdCallbackReceiver(), "netd", 10, NETD_TAG);
mThread = new Thread(mConnector, NETD_TAG);
+
+ // Add ourself to the Watchdog monitors.
+ Watchdog.getInstance().addMonitor(this);
}
public static NetworkManagementService create(Context context) throws InterruptedException {
@@ -185,14 +190,12 @@ class NetworkManagementService extends INetworkManagementService.Stub {
}
public void systemReady() {
-
// only enable bandwidth control when support exists, and requested by
// system setting.
final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists();
final boolean shouldEnable =
Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 1) != 0;
- mBandwidthControlEnabled = false;
if (hasKernelSupport && shouldEnable) {
Slog.d(TAG, "enabling bandwidth control");
try {
@@ -288,7 +291,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
/**
* Let us know the daemon is connected
*/
- protected void onConnected() {
+ protected void onDaemonConnected() {
if (DBG) Slog.d(TAG, "onConnected");
mConnectedSignal.countDown();
}
@@ -299,13 +302,12 @@ class NetworkManagementService extends INetworkManagementService.Stub {
//
class NetdCallbackReceiver implements INativeDaemonConnectorCallbacks {
+ /** {@inheritDoc} */
public void onDaemonConnected() {
- NetworkManagementService.this.onConnected();
- new Thread() {
- public void run() {
- }
- }.start();
+ NetworkManagementService.this.onDaemonConnected();
}
+
+ /** {@inheritDoc} */
public boolean onEvent(int code, String raw, String[] cooked) {
switch (code) {
case NetdResponseCode.InterfaceChange:
@@ -1041,6 +1043,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
try {
entry.iface = values.get(0);
entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
entry.tag = TAG_NONE;
entry.rxBytes = Long.parseLong(values.get(1));
entry.rxPackets = Long.parseLong(values.get(2));
@@ -1071,6 +1074,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
entry.iface = iface;
entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
entry.tag = TAG_NONE;
entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
@@ -1319,8 +1323,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
try {
entry.iface = parsed.get(KEY_IFACE);
- entry.tag = kernelToTag(parsed.get(KEY_TAG_HEX));
entry.uid = getParsedInt(parsed, KEY_UID);
+ entry.set = getParsedInt(parsed, KEY_COUNTER_SET);
+ entry.tag = kernelToTag(parsed.get(KEY_TAG_HEX));
entry.rxBytes = getParsedLong(parsed, KEY_RX_BYTES);
entry.rxPackets = getParsedLong(parsed, KEY_RX_PACKETS);
entry.txBytes = getParsedLong(parsed, KEY_TX_BYTES);
@@ -1556,4 +1561,11 @@ class NetworkManagementService extends INetworkManagementService.Stub {
"Error communicating with native daemon to flush interface " + iface, e);
}
}
+
+ /** {@inheritDoc} */
+ public void monitor() {
+ if (mConnector != null) {
+ mConnector.monitor();
+ }
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 77d045709b10..e6f92a5baad2 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -40,6 +40,7 @@ import android.server.BluetoothService;
import android.server.search.SearchManagerService;
import android.util.DisplayMetrics;
import android.util.EventLog;
+import android.util.Log;
import android.util.Slog;
import android.view.WindowManager;
@@ -66,6 +67,11 @@ class ServerThread extends Thread {
ContentResolver mContentResolver;
+ void reportWtf(String msg, Throwable e) {
+ Slog.w(TAG, "***********************************************");
+ Log.wtf(TAG, "BOOT FAILURE " + msg, e);
+ }
+
@Override
public void run() {
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN,
@@ -110,12 +116,12 @@ class ServerThread extends Thread {
NetworkPolicyManagerService networkPolicy = null;
ConnectivityService connectivity = null;
WifiP2pService wifiP2p = null;
+ WifiService wifi = null;
IPackageManager pm = null;
Context context = null;
WindowManagerService wm = null;
BluetoothService bluetooth = null;
BluetoothA2dpService bluetoothA2dp = null;
- WiredAccessoryObserver wiredAccessory = null;
DockObserver dock = null;
UsbService usb = null;
UiModeManagerService uiMode = null;
@@ -221,7 +227,8 @@ class ServerThread extends Thread {
}
} catch (RuntimeException e) {
- Slog.e("System", "Failure starting core service", e);
+ Slog.e("System", "******************************************");
+ Slog.e("System", "************ Failure starting core service", e);
}
DevicePolicyManagerService devicePolicy = null;
@@ -234,13 +241,52 @@ class ServerThread extends Thread {
CountryDetectorService countryDetector = null;
TextServicesManagerService tsms = null;
+ // Bring up services needed for UI.
+ if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
+ try {
+ Slog.i(TAG, "Input Method Service");
+ imm = new InputMethodManagerService(context);
+ ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);
+ } catch (Throwable e) {
+ reportWtf("starting Input Manager Service", e);
+ }
+
+ try {
+ Slog.i(TAG, "Accessibility Manager");
+ ServiceManager.addService(Context.ACCESSIBILITY_SERVICE,
+ new AccessibilityManagerService(context));
+ } catch (Throwable e) {
+ reportWtf("starting Accessibility Manager", e);
+ }
+ }
+
+ try {
+ wm.displayReady();
+ } catch (Throwable e) {
+ reportWtf("making display ready", e);
+ }
+
+ try {
+ pm.performBootDexOpt();
+ } catch (Throwable e) {
+ reportWtf("performing boot dexopt", e);
+ }
+
+ try {
+ ActivityManagerNative.getDefault().showBootMessage(
+ context.getResources().getText(
+ com.android.internal.R.string.android_upgrading_starting_apps),
+ false);
+ } catch (RemoteException e) {
+ }
+
if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
try {
Slog.i(TAG, "Device Policy");
devicePolicy = new DevicePolicyManagerService(context);
ServiceManager.addService(Context.DEVICE_POLICY_SERVICE, devicePolicy);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting DevicePolicyService", e);
+ reportWtf("starting DevicePolicyService", e);
}
try {
@@ -248,7 +294,7 @@ class ServerThread extends Thread {
statusBar = new StatusBarManagerService(context, wm);
ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting StatusBarManagerService", e);
+ reportWtf("starting StatusBarManagerService", e);
}
try {
@@ -256,15 +302,7 @@ class ServerThread extends Thread {
ServiceManager.addService(Context.CLIPBOARD_SERVICE,
new ClipboardService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Clipboard Service", e);
- }
-
- try {
- Slog.i(TAG, "Input Method Service");
- imm = new InputMethodManagerService(context, statusBar);
- ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);
- } catch (Throwable e) {
- Slog.e(TAG, "Failure starting Input Manager Service", e);
+ reportWtf("starting Clipboard Service", e);
}
try {
@@ -272,7 +310,7 @@ class ServerThread extends Thread {
networkManagement = NetworkManagementService.create(context);
ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting NetworkManagement Service", e);
+ reportWtf("starting NetworkManagement Service", e);
}
try {
@@ -280,7 +318,7 @@ class ServerThread extends Thread {
tsms = new TextServicesManagerService(context);
ServiceManager.addService(Context.TEXT_SERVICES_MANAGER_SERVICE, tsms);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Text Service Manager Service", e);
+ reportWtf("starting Text Service Manager Service", e);
}
try {
@@ -288,7 +326,7 @@ class ServerThread extends Thread {
networkStats = new NetworkStatsService(context, networkManagement, alarm);
ServiceManager.addService(Context.NETWORK_STATS_SERVICE, networkStats);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting NetworkStats Service", e);
+ reportWtf("starting NetworkStats Service", e);
}
try {
@@ -298,7 +336,7 @@ class ServerThread extends Thread {
networkStats, networkManagement);
ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting NetworkPolicy Service", e);
+ reportWtf("starting NetworkPolicy Service", e);
}
try {
@@ -306,7 +344,16 @@ class ServerThread extends Thread {
wifiP2p = new WifiP2pService(context);
ServiceManager.addService(Context.WIFI_P2P_SERVICE, wifiP2p);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Wi-Fi P2pService", e);
+ reportWtf("starting Wi-Fi P2pService", e);
+ }
+
+ try {
+ Slog.i(TAG, "Wi-Fi Service");
+ wifi = new WifiService(context);
+ ServiceManager.addService(Context.WIFI_SERVICE, wifi);
+ wifi.checkAndStartWifi();
+ } catch (Throwable e) {
+ reportWtf("starting Wi-Fi Service", e);
}
try {
@@ -317,7 +364,7 @@ class ServerThread extends Thread {
networkPolicy.bindConnectivityManager(connectivity);
wifiP2p.connectivityServiceReady();
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Connectivity Service", e);
+ reportWtf("starting Connectivity Service", e);
}
try {
@@ -326,15 +373,7 @@ class ServerThread extends Thread {
ServiceManager.addService(
Context.THROTTLE_SERVICE, throttle);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting ThrottleService", e);
- }
-
- try {
- Slog.i(TAG, "Accessibility Manager");
- ServiceManager.addService(Context.ACCESSIBILITY_SERVICE,
- new AccessibilityManagerService(context));
- } catch (Throwable e) {
- Slog.e(TAG, "Failure starting Accessibility Manager", e);
+ reportWtf("starting ThrottleService", e);
}
try {
@@ -345,7 +384,7 @@ class ServerThread extends Thread {
Slog.i(TAG, "Mount Service");
ServiceManager.addService("mount", new MountService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Mount Service", e);
+ reportWtf("starting Mount Service", e);
}
try {
@@ -354,7 +393,7 @@ class ServerThread extends Thread {
ServiceManager.addService(Context.NOTIFICATION_SERVICE, notification);
networkPolicy.bindNotificationManager(notification);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Notification Manager", e);
+ reportWtf("starting Notification Manager", e);
}
try {
@@ -362,7 +401,7 @@ class ServerThread extends Thread {
ServiceManager.addService(DeviceStorageMonitorService.SERVICE,
new DeviceStorageMonitorService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting DeviceStorageMonitor service", e);
+ reportWtf("starting DeviceStorageMonitor service", e);
}
try {
@@ -370,7 +409,7 @@ class ServerThread extends Thread {
location = new LocationManagerService(context);
ServiceManager.addService(Context.LOCATION_SERVICE, location);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Location Manager", e);
+ reportWtf("starting Location Manager", e);
}
try {
@@ -378,7 +417,7 @@ class ServerThread extends Thread {
countryDetector = new CountryDetectorService(context);
ServiceManager.addService(Context.COUNTRY_DETECTOR, countryDetector);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Country Detector", e);
+ reportWtf("starting Country Detector", e);
}
try {
@@ -386,7 +425,7 @@ class ServerThread extends Thread {
ServiceManager.addService(Context.SEARCH_SERVICE,
new SearchManagerService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Search Service", e);
+ reportWtf("starting Search Service", e);
}
try {
@@ -394,7 +433,7 @@ class ServerThread extends Thread {
ServiceManager.addService(Context.DROPBOX_SERVICE,
new DropBoxManagerService(context, new File("/data/system/dropbox")));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting DropBoxManagerService", e);
+ reportWtf("starting DropBoxManagerService", e);
}
try {
@@ -402,14 +441,14 @@ class ServerThread extends Thread {
wallpaper = new WallpaperManagerService(context);
ServiceManager.addService(Context.WALLPAPER_SERVICE, wallpaper);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Wallpaper Service", e);
+ reportWtf("starting Wallpaper Service", e);
}
try {
Slog.i(TAG, "Audio Service");
ServiceManager.addService(Context.AUDIO_SERVICE, new AudioService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Audio Service", e);
+ reportWtf("starting Audio Service", e);
}
try {
@@ -417,15 +456,15 @@ class ServerThread extends Thread {
// Listen for dock station changes
dock = new DockObserver(context, power);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting DockObserver", e);
+ reportWtf("starting DockObserver", e);
}
try {
Slog.i(TAG, "Wired Accessory Observer");
// Listen for wired headset changes
- wiredAccessory = new WiredAccessoryObserver(context);
+ new WiredAccessoryObserver(context);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting WiredAccessoryObserver", e);
+ reportWtf("starting WiredAccessoryObserver", e);
}
try {
@@ -434,7 +473,7 @@ class ServerThread extends Thread {
usb = new UsbService(context);
ServiceManager.addService(Context.USB_SERVICE, usb);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting UsbService", e);
+ reportWtf("starting UsbService", e);
}
try {
@@ -442,7 +481,7 @@ class ServerThread extends Thread {
// Listen for UI mode changes
uiMode = new UiModeManagerService(context);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting UiModeManagerService", e);
+ reportWtf("starting UiModeManagerService", e);
}
try {
@@ -458,21 +497,21 @@ class ServerThread extends Thread {
appWidget = new AppWidgetService(context);
ServiceManager.addService(Context.APPWIDGET_SERVICE, appWidget);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting AppWidget Service", e);
+ reportWtf("starting AppWidget Service", e);
}
try {
Slog.i(TAG, "Recognition Service");
recognition = new RecognitionManagerService(context);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting Recognition Service", e);
+ reportWtf("starting Recognition Service", e);
}
try {
Slog.i(TAG, "DiskStats Service");
ServiceManager.addService("diskstats", new DiskStatsService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting DiskStats Service", e);
+ reportWtf("starting DiskStats Service", e);
}
try {
@@ -484,14 +523,14 @@ class ServerThread extends Thread {
ServiceManager.addService("samplingprofiler",
new SamplingProfilerService(context));
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting SamplingProfiler Service", e);
+ reportWtf("starting SamplingProfiler Service", e);
}
try {
Slog.i(TAG, "NetworkTimeUpdateService");
networkTimeUpdater = new NetworkTimeUpdateService(context);
} catch (Throwable e) {
- Slog.e(TAG, "Failure starting NetworkTimeUpdate service");
+ reportWtf("starting NetworkTimeUpdate service", e);
}
}
@@ -512,14 +551,26 @@ class ServerThread extends Thread {
// It is now time to start up the app processes...
if (devicePolicy != null) {
- devicePolicy.systemReady();
+ try {
+ devicePolicy.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Device Policy Service ready", e);
+ }
}
if (notification != null) {
- notification.systemReady();
+ try {
+ notification.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Notification Service ready", e);
+ }
}
- wm.systemReady();
+ try {
+ wm.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Window Manager Service ready", e);
+ }
if (safeMode) {
ActivityManagerService.self().showSafeModeOverlay();
@@ -537,7 +588,8 @@ class ServerThread extends Thread {
power.systemReady();
try {
pm.systemReady();
- } catch (RemoteException e) {
+ } catch (Throwable e) {
+ reportWtf("making Package Manager Service ready", e);
}
// These are needed to propagate to the runnable below.
@@ -559,6 +611,7 @@ class ServerThread extends Thread {
final CountryDetectorService countryDetectorF = countryDetector;
final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater;
final TextServicesManagerService textServiceManagerServiceF = tsms;
+ final StatusBarManagerService statusBarF = statusBar;
// We now tell the activity manager it is okay to run third party
// code. It will call back into us once it has gotten to the state
@@ -571,28 +624,96 @@ class ServerThread extends Thread {
Slog.i(TAG, "Making services ready");
startSystemUi(contextF);
- if (batteryF != null) batteryF.systemReady();
- if (networkManagementF != null) networkManagementF.systemReady();
- if (networkStatsF != null) networkStatsF.systemReady();
- if (networkPolicyF != null) networkPolicyF.systemReady();
- if (connectivityF != null) connectivityF.systemReady();
- if (dockF != null) dockF.systemReady();
- if (usbF != null) usbF.systemReady();
- if (uiModeF != null) uiModeF.systemReady();
- if (recognitionF != null) recognitionF.systemReady();
+ try {
+ if (batteryF != null) batteryF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Battery Service ready", e);
+ }
+ try {
+ if (networkManagementF != null) networkManagementF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Network Managment Service ready", e);
+ }
+ try {
+ if (networkStatsF != null) networkStatsF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Network Stats Service ready", e);
+ }
+ try {
+ if (networkPolicyF != null) networkPolicyF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Network Policy Service ready", e);
+ }
+ try {
+ if (connectivityF != null) connectivityF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Connectivity Service ready", e);
+ }
+ try {
+ if (dockF != null) dockF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Dock Service ready", e);
+ }
+ try {
+ if (usbF != null) usbF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making USB Service ready", e);
+ }
+ try {
+ if (uiModeF != null) uiModeF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making UI Mode Service ready", e);
+ }
+ try {
+ if (recognitionF != null) recognitionF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Recognition Service ready", e);
+ }
Watchdog.getInstance().start();
// It is now okay to let the various system services start their
// third party code...
- if (appWidgetF != null) appWidgetF.systemReady(safeMode);
- if (wallpaperF != null) wallpaperF.systemReady();
- if (immF != null) immF.systemReady();
- if (locationF != null) locationF.systemReady();
- if (countryDetectorF != null) countryDetectorF.systemReady();
- if (throttleF != null) throttleF.systemReady();
- if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemReady();
- if (textServiceManagerServiceF != null) textServiceManagerServiceF.systemReady();
+ try {
+ if (appWidgetF != null) appWidgetF.systemReady(safeMode);
+ } catch (Throwable e) {
+ reportWtf("making App Widget Service ready", e);
+ }
+ try {
+ if (wallpaperF != null) wallpaperF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Wallpaper Service ready", e);
+ }
+ try {
+ if (immF != null) immF.systemReady(statusBarF);
+ } catch (Throwable e) {
+ reportWtf("making Input Method Service ready", e);
+ }
+ try {
+ if (locationF != null) locationF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Location Service ready", e);
+ }
+ try {
+ if (countryDetectorF != null) countryDetectorF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Country Detector Service ready", e);
+ }
+ try {
+ if (throttleF != null) throttleF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Throttle Service ready", e);
+ }
+ try {
+ if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Network Time Service ready", e);
+ }
+ try {
+ if (textServiceManagerServiceF != null) textServiceManagerServiceF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Text Services Manager Service ready", e);
+ }
}
});
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index cd649ce4c554..24b6ac3c3774 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -512,8 +512,8 @@ public class ThrottleService extends IThrottleManager.Stub {
long incWrite = 0;
try {
final NetworkStats stats = mNMService.getNetworkStatsSummary();
- final int index = stats.findIndex(
- mIface, NetworkStats.UID_ALL, NetworkStats.TAG_NONE);
+ final int index = stats.findIndex(mIface, NetworkStats.UID_ALL,
+ NetworkStats.SET_DEFAULT, NetworkStats.TAG_NONE);
if (index != -1) {
final NetworkStats.Entry entry = stats.getValues(index, null);
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index d5a1b8fe434f..b817598a3fc4 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -91,6 +91,7 @@ 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;
@@ -572,8 +573,8 @@ public final class ActivityManagerService extends ActivityManagerNative
* string containing the provider's implementation class and values are a
* ContentProviderRecord object containing the data about it.
*/
- final HashMap<String, ContentProviderRecord> mProvidersByClass
- = new HashMap<String, ContentProviderRecord>();
+ final HashMap<ComponentName, ContentProviderRecord> mProvidersByClass
+ = new HashMap<ComponentName, ContentProviderRecord>();
/**
* List of content providers who have clients waiting for them. The
@@ -738,6 +739,12 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean mOrigWaitForDebugger = false;
boolean mAlwaysFinishActivities = false;
IActivityController mController = null;
+ String mProfileApp = null;
+ ProcessRecord mProfileProc = null;
+ String mProfileFile;
+ ParcelFileDescriptor mProfileFd;
+ int mProfileType = 0;
+ boolean mAutoStopProfiler = false;
final RemoteCallbackList<IActivityWatcher> mWatchers
= new RemoteCallbackList<IActivityWatcher>();
@@ -1068,7 +1075,7 @@ public final class ActivityManagerService extends ActivityManagerNative
int uid = msg.arg1;
boolean restart = (msg.arg2 == 1);
String pkg = (String) msg.obj;
- forceStopPackageLocked(pkg, uid, restart, false, true);
+ forceStopPackageLocked(pkg, uid, restart, false, true, false);
}
} break;
case FINALIZE_PENDING_INTENT_MSG: {
@@ -2090,22 +2097,24 @@ public final class ActivityManagerService extends ActivityManagerNative
public final int startActivity(IApplicationThread caller,
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo,
- String resultWho, int requestCode, boolean onlyIfNeeded,
- boolean debug) {
+ String resultWho, int requestCode, boolean onlyIfNeeded, boolean debug,
+ String profileFile, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
return mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
- requestCode, onlyIfNeeded, debug, null, null);
+ requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler,
+ null, null);
}
public final WaitResult startActivityAndWait(IApplicationThread caller,
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo,
- String resultWho, int requestCode, boolean onlyIfNeeded,
- boolean debug) {
+ String resultWho, int requestCode, boolean onlyIfNeeded, boolean debug,
+ String profileFile, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
WaitResult res = new WaitResult();
mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
- requestCode, onlyIfNeeded, debug, res, null);
+ requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler,
+ res, null);
return res;
}
@@ -2116,7 +2125,7 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean debug, Configuration config) {
return mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
- requestCode, onlyIfNeeded, debug, null, config);
+ requestCode, onlyIfNeeded, debug, null, null, false, null, config);
}
public int startActivityIntentSender(IApplicationThread caller,
@@ -2255,7 +2264,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
return mMainStack.startActivityMayWait(null, uid, intent, resolvedType,
- null, 0, resultTo, resultWho, requestCode, onlyIfNeeded, false, null, null);
+ null, 0, resultTo, resultWho, requestCode, onlyIfNeeded, false,
+ null, null, false, null, null);
}
public final int startActivities(IApplicationThread caller,
@@ -2543,6 +2553,10 @@ public final class ActivityManagerService extends ActivityManagerNative
mLruProcesses.remove(app);
}
+ if (mProfileProc == app) {
+ clearProfilerLocked();
+ }
+
// Just in case...
if (mMainStack.mPausingActivity != null && mMainStack.mPausingActivity.app == app) {
if (DEBUG_PAUSE) Slog.v(TAG, "App died while pausing: " +mMainStack.mPausingActivity);
@@ -2686,7 +2700,6 @@ public final class ActivityManagerService extends ActivityManagerNative
}
if (!haveBg) {
- Slog.i(TAG, "Low Memory: No more background processes.");
EventLog.writeEvent(EventLogTags.AM_LOW_MEMORY, mLruProcesses.size());
long now = SystemClock.uptimeMillis();
for (int i=mLruProcesses.size()-1; i>=0; i--) {
@@ -3074,7 +3087,7 @@ public final class ActivityManagerService extends ActivityManagerNative
return;
}
killPackageProcessesLocked(packageName, pkgUid,
- ProcessList.SECONDARY_SERVER_ADJ, false, true, true);
+ ProcessList.SECONDARY_SERVER_ADJ, false, true, true, false);
}
} finally {
Binder.restoreCallingIdentity(callingId);
@@ -3232,7 +3245,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
private void forceStopPackageLocked(final String packageName, int uid) {
- forceStopPackageLocked(packageName, uid, false, false, true);
+ forceStopPackageLocked(packageName, uid, false, false, true, false);
Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED,
Uri.fromParts("package", packageName, null));
if (!mProcessesReady) {
@@ -3245,7 +3258,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
private final boolean killPackageProcessesLocked(String packageName, int uid,
- int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit) {
+ int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit,
+ boolean evenPersistent) {
ArrayList<ProcessRecord> procs = new ArrayList<ProcessRecord>();
// Remove all processes this package may have touched: all with the
@@ -3256,7 +3270,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final int NA = apps.size();
for (int ia=0; ia<NA; ia++) {
ProcessRecord app = apps.valueAt(ia);
- if (app.persistent) {
+ if (app.persistent && !evenPersistent) {
// we don't kill persistent processes
continue;
}
@@ -3286,7 +3300,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
private final boolean forceStopPackageLocked(String name, int uid,
- boolean callerWillRestart, boolean purgeCache, boolean doit) {
+ boolean callerWillRestart, boolean purgeCache, boolean doit,
+ boolean evenPersistent) {
int i;
int N;
@@ -3310,12 +3325,12 @@ public final class ActivityManagerService extends ActivityManagerNative
}
boolean didSomething = killPackageProcessesLocked(name, uid, -100,
- callerWillRestart, false, doit);
+ callerWillRestart, false, doit, evenPersistent);
for (i=mMainStack.mHistory.size()-1; i>=0; i--) {
ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i);
if (r.packageName.equals(name)
- && (r.app == null || !r.app.persistent)) {
+ && (r.app == null || evenPersistent || !r.app.persistent)) {
if (!doit) {
return true;
}
@@ -3332,7 +3347,7 @@ public final class ActivityManagerService extends ActivityManagerNative
ArrayList<ServiceRecord> services = new ArrayList<ServiceRecord>();
for (ServiceRecord service : mServices.values()) {
if (service.packageName.equals(name)
- && (service.app == null || !service.app.persistent)) {
+ && (service.app == null || evenPersistent || !service.app.persistent)) {
if (!doit) {
return true;
}
@@ -3549,7 +3564,16 @@ public final class ActivityManagerService extends ActivityManagerNative
mWaitForDebugger = mOrigWaitForDebugger;
}
}
-
+ String profileFile = app.instrumentationProfileFile;
+ ParcelFileDescriptor profileFd = null;
+ boolean profileAutoStop = false;
+ if (mProfileApp != null && mProfileApp.equals(processName)) {
+ mProfileProc = app;
+ profileFile = mProfileFile;
+ profileFd = mProfileFd;
+ profileAutoStop = mAutoStopProfiler;
+ }
+
// If the app is being launched for restore or full backup, set it up specially
boolean isRestrictedBackupMode = false;
if (mBackupTarget != null && mBackupAppName.equals(processName)) {
@@ -3569,8 +3593,11 @@ public final class ActivityManagerService extends ActivityManagerNative
ApplicationInfo appInfo = app.instrumentationInfo != null
? app.instrumentationInfo : app.info;
app.compat = compatibilityInfoForPackageLocked(appInfo);
+ if (profileFd != null) {
+ profileFd = profileFd.dup();
+ }
thread.bindApplication(processName, appInfo, providers,
- app.instrumentationClass, app.instrumentationProfileFile,
+ app.instrumentationClass, profileFile, profileFd, profileAutoStop,
app.instrumentationArguments, app.instrumentationWatcher, testMode,
isRestrictedBackupMode || !normalMode,
mConfiguration, app.compat, getCommonServicesLocked(),
@@ -3697,9 +3724,22 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
- public final void activityIdle(IBinder token, Configuration config) {
+ public final void activityIdle(IBinder token, Configuration config, boolean stopProfiling) {
final long origId = Binder.clearCallingIdentity();
- mMainStack.activityIdleInternal(token, false, config);
+ ActivityRecord r = mMainStack.activityIdleInternal(token, false, config);
+ if (stopProfiling) {
+ synchronized (this) {
+ if (mProfileProc == r.app) {
+ if (mProfileFd != null) {
+ try {
+ mProfileFd.close();
+ } catch (IOException e) {
+ }
+ clearProfilerLocked();
+ }
+ }
+ }
+ }
Binder.restoreCallingIdentity(origId);
}
@@ -3709,6 +3749,10 @@ public final class ActivityManagerService extends ActivityManagerNative
mWindowManager.enableScreenAfterBoot();
}
+ public void showBootMessage(final CharSequence msg, final boolean always) {
+ mWindowManager.showBootMessage(msg, always);
+ }
+
final void finishBooting() {
IntentFilter pkgFilter = new IntentFilter();
pkgFilter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
@@ -3720,7 +3764,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (pkgs != null) {
for (String pkg : pkgs) {
synchronized (ActivityManagerService.this) {
- if (forceStopPackageLocked(pkg, -1, false, false, false)) {
+ if (forceStopPackageLocked(pkg, -1, false, false, false, false)) {
setResultCode(Activity.RESULT_OK);
return;
}
@@ -5401,10 +5445,11 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int i=0; i<N; i++) {
ProviderInfo cpi =
(ProviderInfo)providers.get(i);
- ContentProviderRecord cpr = mProvidersByClass.get(cpi.name);
+ ComponentName comp = new ComponentName(cpi.packageName, cpi.name);
+ ContentProviderRecord cpr = mProvidersByClass.get(comp);
if (cpr == null) {
cpr = new ContentProviderRecord(cpi, app.info);
- mProvidersByClass.put(cpi.name, cpr);
+ mProvidersByClass.put(comp, cpr);
}
app.pubProviders.put(cpi.name, cpr);
app.addPackage(cpi.applicationInfo.packageName);
@@ -5569,8 +5614,9 @@ public final class ActivityManagerService extends ActivityManagerNative
throw new IllegalArgumentException(
"Attempt to launch content provider before system ready");
}
-
- cpr = mProvidersByClass.get(cpi.name);
+
+ ComponentName comp = new ComponentName(cpi.packageName, cpi.name);
+ cpr = mProvidersByClass.get(comp);
final boolean firstClass = cpr == null;
if (firstClass) {
try {
@@ -5652,7 +5698,7 @@ public final class ActivityManagerService extends ActivityManagerNative
// Make sure the provider is published (the same provider class
// may be published under multiple names).
if (firstClass) {
- mProvidersByClass.put(cpi.name, cpr);
+ mProvidersByClass.put(comp, cpr);
}
mProvidersByName.put(name, cpr);
@@ -5732,7 +5778,8 @@ public final class ActivityManagerService extends ActivityManagerNative
" when removing content provider " + name);
}
//update content provider record entry info
- ContentProviderRecord localCpr = mProvidersByClass.get(cpr.info.name);
+ 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);
@@ -5764,7 +5811,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
//update content provider record entry info
- ContentProviderRecord localCpr = mProvidersByClass.get(cpr.info.name);
+ ComponentName comp = new ComponentName(cpr.info.packageName, cpr.info.name);
+ ContentProviderRecord localCpr = mProvidersByClass.get(comp);
localCpr.externals--;
if (localCpr.externals < 0) {
Slog.e(TAG, "Externals < 0 for content provider " + localCpr);
@@ -5798,7 +5846,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
ContentProviderRecord dst = r.pubProviders.get(src.info.name);
if (dst != null) {
- mProvidersByClass.put(dst.info.name, dst);
+ ComponentName comp = new ComponentName(dst.info.packageName, dst.info.name);
+ mProvidersByClass.put(comp, dst);
String names[] = dst.info.authority.split(";");
for (int j = 0; j < names.length; j++) {
mProvidersByName.put(names[j], dst);
@@ -6141,12 +6190,36 @@ public final class ActivityManagerService extends ActivityManagerNative
mDebugTransient = !persistent;
if (packageName != null) {
final long origId = Binder.clearCallingIdentity();
- forceStopPackageLocked(packageName, -1, false, false, true);
+ forceStopPackageLocked(packageName, -1, false, false, true, true);
Binder.restoreCallingIdentity(origId);
}
}
}
+ void setProfileApp(ApplicationInfo app, String processName, String profileFile,
+ ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
+ synchronized (this) {
+ boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
+ if (!isDebuggable) {
+ if ((app.flags&ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
+ throw new SecurityException("Process not debuggable: " + app.packageName);
+ }
+ }
+ mProfileApp = processName;
+ mProfileFile = profileFile;
+ if (mProfileFd != null) {
+ try {
+ mProfileFd.close();
+ } catch (IOException e) {
+ }
+ mProfileFd = null;
+ }
+ mProfileFd = profileFd;
+ mProfileType = 0;
+ mAutoStopProfiler = autoStopProfiler;
+ }
+ }
+
public void setAlwaysFinish(boolean enabled) {
enforceCallingPermission(android.Manifest.permission.SET_ALWAYS_FINISH,
"setAlwaysFinish()");
@@ -6378,7 +6451,9 @@ public final class ActivityManagerService extends ActivityManagerNative
File fname = new File(systemDir, "called_pre_boots.dat");
return fname;
}
-
+
+ static final int LAST_DONE_VERSION = 10000;
+
private static ArrayList<ComponentName> readLastDonePreBootReceivers() {
ArrayList<ComponentName> lastDoneReceivers = new ArrayList<ComponentName>();
File file = getCalledPreBootReceiversFile();
@@ -6386,16 +6461,21 @@ public final class ActivityManagerService extends ActivityManagerNative
try {
fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(new BufferedInputStream(fis, 2048));
- int vers = dis.readInt();
- String codename = dis.readUTF();
- if (vers == android.os.Build.VERSION.SDK_INT
- && codename.equals(android.os.Build.VERSION.CODENAME)) {
- int num = dis.readInt();
- while (num > 0) {
- num--;
- String pkg = dis.readUTF();
- String cls = dis.readUTF();
- lastDoneReceivers.add(new ComponentName(pkg, cls));
+ int fvers = dis.readInt();
+ if (fvers == LAST_DONE_VERSION) {
+ String vers = dis.readUTF();
+ String codename = dis.readUTF();
+ String build = dis.readUTF();
+ if (android.os.Build.VERSION.RELEASE.equals(vers)
+ && android.os.Build.VERSION.CODENAME.equals(codename)
+ && android.os.Build.VERSION.INCREMENTAL.equals(build)) {
+ int num = dis.readInt();
+ while (num > 0) {
+ num--;
+ String pkg = dis.readUTF();
+ String cls = dis.readUTF();
+ lastDoneReceivers.add(new ComponentName(pkg, cls));
+ }
}
}
} catch (FileNotFoundException e) {
@@ -6420,8 +6500,10 @@ public final class ActivityManagerService extends ActivityManagerNative
Slog.i(TAG, "Writing new set of last done pre-boot receivers...");
fos = new FileOutputStream(file);
dos = new DataOutputStream(new BufferedOutputStream(fos, 2048));
- dos.writeInt(android.os.Build.VERSION.SDK_INT);
+ dos.writeInt(LAST_DONE_VERSION);
+ dos.writeUTF(android.os.Build.VERSION.RELEASE);
dos.writeUTF(android.os.Build.VERSION.CODENAME);
+ dos.writeUTF(android.os.Build.VERSION.INCREMENTAL);
dos.writeInt(list.size());
for (int i=0; i<list.size(); i++) {
dos.writeUTF(list.get(i).getPackageName());
@@ -6503,6 +6585,9 @@ public final class ActivityManagerService extends ActivityManagerNative
mDidUpdate = true;
}
writeLastDonePreBootReceivers(doneReceivers);
+ showBootMessage(mContext.getText(
+ R.string.android_upgrading_complete),
+ false);
systemReady(goingCallback);
}
});
@@ -7546,15 +7631,15 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" i[ntents]: pending intent state");
pw.println(" p[rocesses]: process state");
pw.println(" o[om]: out of memory management");
- pw.println(" prov[iders]: content provider state");
- pw.println(" s[ervices]: service state");
+ pw.println(" prov[iders] [COMP_SPEC ...]: content provider state");
+ pw.println(" s[ervices] [COMP_SPEC ...]: service state");
pw.println(" service [COMP_SPEC]: service client-side state");
+ pw.println(" all: dump all activities");
+ pw.println(" top: dump the top activity");
pw.println(" cmd may also be a COMP_SPEC to dump activities.");
- pw.println(" COMP_SPEC may also be a component name (com.foo/.myApp),");
- pw.println(" a partial substring in a component name, an");
- pw.println(" ActivityRecord hex object identifier, or");
- pw.println(" \"all\" for all objects, or");
- pw.println(" \"top\" for the top activity.");
+ pw.println(" COMP_SPEC may be a component name (com.foo/.myApp),");
+ pw.println(" a partial substring in a component name, a");
+ pw.println(" hex object identifier.");
pw.println(" -a: include all available server state.");
pw.println(" -c: include client state.");
return;
@@ -7886,6 +7971,13 @@ public final class ActivityManagerService extends ActivityManagerNative
+ " mDebugTransient=" + mDebugTransient
+ " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
}
+ if (mProfileApp != null || mProfileProc != null || mProfileFile != null
+ || mProfileFd != null) {
+ pw.println(" mProfileApp=" + mProfileApp + " mProfileProc=" + mProfileProc);
+ pw.println(" mProfileFile=" + mProfileFile + " mProfileFd=" + mProfileFd);
+ pw.println(" mProfileType=" + mProfileType + " mAutoStopProfiler="
+ + mAutoStopProfiler);
+ }
if (mAlwaysFinishActivities || mController != null) {
pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
+ " mController=" + mController);
@@ -8098,9 +8190,89 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
+ static class ItemMatcher {
+ ArrayList<ComponentName> components;
+ ArrayList<String> strings;
+ ArrayList<Integer> objects;
+ boolean all;
+
+ ItemMatcher() {
+ all = true;
+ }
+
+ void build(String name) {
+ ComponentName componentName = ComponentName.unflattenFromString(name);
+ if (componentName != null) {
+ if (components == null) {
+ components = new ArrayList<ComponentName>();
+ }
+ components.add(componentName);
+ all = false;
+ } else {
+ int objectId = 0;
+ // Not a '/' separated full component name; maybe an object ID?
+ try {
+ objectId = Integer.parseInt(name, 16);
+ if (objects == null) {
+ objects = new ArrayList<Integer>();
+ }
+ objects.add(objectId);
+ all = false;
+ } catch (RuntimeException e) {
+ // Not an integer; just do string match.
+ if (strings == null) {
+ strings = new ArrayList<String>();
+ }
+ strings.add(name);
+ all = false;
+ }
+ }
+ }
+
+ int build(String[] args, int opti) {
+ for (; opti<args.length; opti++) {
+ String name = args[opti];
+ if ("--".equals(name)) {
+ return opti+1;
+ }
+ build(name);
+ }
+ return opti;
+ }
+
+ boolean match(Object object, ComponentName comp) {
+ if (all) {
+ return true;
+ }
+ if (components != null) {
+ for (int i=0; i<components.size(); i++) {
+ if (components.get(i).equals(comp)) {
+ return true;
+ }
+ }
+ }
+ if (objects != null) {
+ for (int i=0; i<objects.size(); i++) {
+ if (System.identityHashCode(object) == objects.get(i)) {
+ return true;
+ }
+ }
+ }
+ if (strings != null) {
+ String flat = comp.flattenToString();
+ for (int i=0; i<strings.size(); i++) {
+ if (flat.contains(strings.get(i))) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ }
+
/**
* There are three things that cmd can be:
- * - a flattened component name that matched an existing activity
+ * - a flattened component name that matches an existing activity
* - the cmd arg isn't the flattened component name of an existing activity:
* dump all activity whose component contains the cmd as a substring
* - A hex number of the ActivityRecord object instance.
@@ -8123,29 +8295,12 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
} else {
- ComponentName componentName = ComponentName.unflattenFromString(name);
- int objectId = 0;
- if (componentName == null) {
- // Not a '/' separated full component name; maybe an object ID?
- try {
- objectId = Integer.parseInt(name, 16);
- name = null;
- componentName = null;
- } catch (RuntimeException e) {
- }
- }
+ ItemMatcher matcher = new ItemMatcher();
+ matcher.build(name);
synchronized (this) {
for (ActivityRecord r1 : (ArrayList<ActivityRecord>)mMainStack.mHistory) {
- if (componentName != null) {
- if (r1.intent.getComponent().equals(componentName)) {
- activities.add(r1);
- }
- } else if (name != null) {
- if (r1.intent.getComponent().flattenToString().contains(name)) {
- activities.add(r1);
- }
- } else if (System.identityHashCode(r1) == objectId) {
+ if (matcher.match(r1, r1.intent.getComponent())) {
activities.add(r1);
}
}
@@ -8336,6 +8491,9 @@ public final class ActivityManagerService extends ActivityManagerNative
int opti, boolean dumpAll, boolean dumpClient) {
boolean needSep = false;
+ ItemMatcher matcher = new ItemMatcher();
+ matcher.build(args, opti);
+
pw.println("ACTIVITY MANAGER SERVICES (dumpsys activity services)");
if (mServices.size() > 0) {
pw.println(" Active services:");
@@ -8344,6 +8502,9 @@ public final class ActivityManagerService extends ActivityManagerNative
needSep = false;
while (it.hasNext()) {
ServiceRecord r = it.next();
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
if (needSep) {
pw.println();
}
@@ -8389,6 +8550,9 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" Pending services:");
for (int i=0; i<mPendingServices.size(); i++) {
ServiceRecord r = mPendingServices.get(i);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
pw.print(" * Pending "); pw.println(r);
r.dump(pw, " ");
}
@@ -8400,6 +8564,9 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" Restarting services:");
for (int i=0; i<mRestartingServices.size(); i++) {
ServiceRecord r = mRestartingServices.get(i);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
pw.print(" * Restarting "); pw.println(r);
r.dump(pw, " ");
}
@@ -8411,6 +8578,9 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" Stopping services:");
for (int i=0; i<mStoppingServices.size(); i++) {
ServiceRecord r = mStoppingServices.get(i);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
pw.print(" * Stopping "); pw.println(r);
r.dump(pw, " ");
}
@@ -8426,8 +8596,12 @@ public final class ActivityManagerService extends ActivityManagerNative
while (it.hasNext()) {
ArrayList<ConnectionRecord> r = it.next();
for (int i=0; i<r.size(); i++) {
- pw.print(" * "); pw.println(r.get(i));
- r.get(i).dump(pw, " ");
+ ConnectionRecord cr = r.get(i);
+ if (!matcher.match(cr.binding.service, cr.binding.service.name)) {
+ continue;
+ }
+ pw.print(" * "); pw.println(cr);
+ cr.dump(pw, " ");
}
}
needSep = true;
@@ -8441,20 +8615,34 @@ public final class ActivityManagerService extends ActivityManagerNative
int opti, boolean dumpAll) {
boolean needSep = false;
+ ItemMatcher matcher = new ItemMatcher();
+ matcher.build(args, opti);
+
pw.println("ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers)");
if (mProvidersByClass.size() > 0) {
if (needSep) pw.println(" ");
pw.println(" Published content providers (by class):");
- Iterator<Map.Entry<String, ContentProviderRecord>> it
+ Iterator<Map.Entry<ComponentName, ContentProviderRecord>> it
= mProvidersByClass.entrySet().iterator();
while (it.hasNext()) {
- Map.Entry<String, ContentProviderRecord> e = it.next();
+ Map.Entry<ComponentName, ContentProviderRecord> e = it.next();
ContentProviderRecord r = e.getValue();
+ ComponentName comp = e.getKey();
+ String cls = comp.getClassName();
+ int end = cls.lastIndexOf('.');
+ if (end > 0 && end < (cls.length()-2)) {
+ cls = cls.substring(end+1);
+ }
+ if (!matcher.match(r, comp)) {
+ continue;
+ }
+ pw.print(" * "); pw.print(cls); pw.print(" (");
+ pw.print(comp.flattenToShortString()); pw.print(")");
if (dumpAll) {
- pw.print(" * "); pw.println(r);
- r.dump(pw, " ");
+ pw.println();
+ r.dump(pw, " ");
} else {
- pw.print(" * "); pw.print(r.name.toShortString());
+ pw.print(" * "); pw.print(e.getKey().flattenToShortString());
if (r.app != null) {
pw.println(":");
pw.print(" "); pw.println(r.app);
@@ -8475,6 +8663,9 @@ public final class ActivityManagerService extends ActivityManagerNative
while (it.hasNext()) {
Map.Entry<String, ContentProviderRecord> e = it.next();
ContentProviderRecord r = e.getValue();
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
pw.print(" "); pw.print(e.getKey()); pw.print(": ");
pw.println(r);
}
@@ -10663,8 +10854,10 @@ public final class ActivityManagerService extends ActivityManagerNative
if (DEBUG_SERVICE) Slog.v(TAG, "unbindFinished in " + r
+ " at " + b + ": apps="
+ (b != null ? b.apps.size() : 0));
+
+ boolean inStopping = mStoppingServices.contains(r);
if (b != null) {
- if (b.apps.size() > 0) {
+ if (b.apps.size() > 0 && !inStopping) {
// Applications have already bound since the last
// unbind, so just rebind right here.
requestServiceBindingLocked(r, b, true);
@@ -10675,7 +10868,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
- serviceDoneExecutingLocked(r, mStoppingServices.contains(r));
+ serviceDoneExecutingLocked(r, inStopping);
Binder.restoreCallingIdentity(origId);
}
@@ -11186,7 +11379,7 @@ public final class ActivityManagerService extends ActivityManagerNative
String list[] = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
if (list != null && (list.length > 0)) {
for (String pkg : list) {
- forceStopPackageLocked(pkg, -1, false, true, true);
+ forceStopPackageLocked(pkg, -1, false, true, true, false);
}
sendPackageBroadcastLocked(
IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE, list);
@@ -11197,7 +11390,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (data != null && (ssp=data.getSchemeSpecificPart()) != null) {
if (!intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, false)) {
forceStopPackageLocked(ssp,
- intent.getIntExtra(Intent.EXTRA_UID, -1), false, true, true);
+ intent.getIntExtra(Intent.EXTRA_UID, -1), false, true, true, false);
}
if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
sendPackageBroadcastLocked(IApplicationThread.PACKAGE_REMOVED,
@@ -11948,6 +12141,7 @@ public final class ActivityManagerService extends ActivityManagerNative
while (mParallelBroadcasts.size() > 0) {
r = mParallelBroadcasts.remove(0);
r.dispatchTime = SystemClock.uptimeMillis();
+ r.dispatchClockTime = System.currentTimeMillis();
final int N = r.receivers.size();
if (DEBUG_BROADCAST_LIGHT) Slog.v(TAG, "Processing parallel broadcast "
+ r);
@@ -12086,7 +12280,7 @@ public final class ActivityManagerService extends ActivityManagerNative
r.receiverTime = SystemClock.uptimeMillis();
if (recIdx == 0) {
r.dispatchTime = r.receiverTime;
-
+ r.dispatchClockTime = System.currentTimeMillis();
if (DEBUG_BROADCAST_LIGHT) Slog.v(TAG, "Processing ordered broadcast "
+ r);
}
@@ -12147,7 +12341,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
skip = true;
}
- if (r.callingUid != Process.SYSTEM_UID &&
+ if (info.activityInfo.applicationInfo.uid != Process.SYSTEM_UID &&
r.requiredPermission != null) {
try {
perm = AppGlobals.getPackageManager().
@@ -12294,7 +12488,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
final long origId = Binder.clearCallingIdentity();
- forceStopPackageLocked(ii.targetPackage, -1, true, false, true);
+ // Instrumentation can kill and relaunch even persistent processes
+ forceStopPackageLocked(ii.targetPackage, -1, true, false, true, true);
ProcessRecord app = addAppLocked(ai);
app.instrumentationClass = className;
app.instrumentationInfo = ai;
@@ -12349,7 +12544,7 @@ public final class ActivityManagerService extends ActivityManagerNative
app.instrumentationProfileFile = null;
app.instrumentationArguments = null;
- forceStopPackageLocked(app.processName, -1, false, false, true);
+ forceStopPackageLocked(app.processName, -1, false, false, true, true);
}
public void finishInstrumentation(IApplicationThread target,
@@ -13577,6 +13772,37 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
+ private void stopProfilerLocked(ProcessRecord proc, String path, int profileType) {
+ if (proc == null || proc == mProfileProc) {
+ proc = mProfileProc;
+ path = mProfileFile;
+ profileType = mProfileType;
+ clearProfilerLocked();
+ }
+ if (proc == null) {
+ return;
+ }
+ try {
+ proc.thread.profilerControl(false, path, null, profileType);
+ } catch (RemoteException e) {
+ throw new IllegalStateException("Process disappeared");
+ }
+ }
+
+ private void clearProfilerLocked() {
+ if (mProfileFd != null) {
+ try {
+ mProfileFd.close();
+ } catch (IOException e) {
+ }
+ }
+ mProfileApp = null;
+ mProfileProc = null;
+ mProfileFile = null;
+ mProfileType = 0;
+ mAutoStopProfiler = false;
+ }
+
public boolean profileControl(String process, boolean start,
String path, ParcelFileDescriptor fd, int profileType) throws RemoteException {
@@ -13589,42 +13815,58 @@ public final class ActivityManagerService extends ActivityManagerNative
throw new SecurityException("Requires permission "
+ android.Manifest.permission.SET_ACTIVITY_WATCHER);
}
-
+
if (start && fd == null) {
throw new IllegalArgumentException("null fd");
}
-
+
ProcessRecord proc = null;
- try {
- int pid = Integer.parseInt(process);
- synchronized (mPidsSelfLocked) {
- proc = mPidsSelfLocked.get(pid);
+ if (process != null) {
+ try {
+ int pid = Integer.parseInt(process);
+ synchronized (mPidsSelfLocked) {
+ proc = mPidsSelfLocked.get(pid);
+ }
+ } catch (NumberFormatException e) {
}
- } catch (NumberFormatException e) {
- }
-
- if (proc == null) {
- HashMap<String, SparseArray<ProcessRecord>> all
- = mProcessNames.getMap();
- SparseArray<ProcessRecord> procs = all.get(process);
- if (procs != null && procs.size() > 0) {
- proc = procs.valueAt(0);
+
+ if (proc == null) {
+ HashMap<String, SparseArray<ProcessRecord>> all
+ = mProcessNames.getMap();
+ SparseArray<ProcessRecord> procs = all.get(process);
+ if (procs != null && procs.size() > 0) {
+ proc = procs.valueAt(0);
+ }
}
}
-
- if (proc == null || proc.thread == null) {
+
+ if (start && (proc == null || proc.thread == null)) {
throw new IllegalArgumentException("Unknown process: " + process);
}
-
- boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
- if (!isDebuggable) {
- if ((proc.info.flags&ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
- throw new SecurityException("Process not debuggable: " + proc);
+
+ if (start) {
+ stopProfilerLocked(null, null, 0);
+ setProfileApp(proc.info, proc.processName, path, fd, false);
+ mProfileProc = proc;
+ mProfileType = profileType;
+ try {
+ fd = fd.dup();
+ } catch (IOException e) {
+ fd = null;
+ }
+ proc.thread.profilerControl(start, path, fd, profileType);
+ fd = null;
+ mProfileFd = null;
+ } else {
+ stopProfilerLocked(proc, path, profileType);
+ if (fd != null) {
+ try {
+ fd.close();
+ } catch (IOException e) {
+ }
}
}
-
- proc.thread.profilerControl(start, path, fd, profileType);
- fd = null;
+
return true;
}
} catch (RemoteException e) {
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index ee0937dbd6bf..6f0779fb0040 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -56,6 +56,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
+import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -64,6 +65,7 @@ import android.util.Log;
import android.util.Slog;
import android.view.WindowManagerPolicy;
+import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
@@ -561,12 +563,31 @@ final class ActivityStack {
r.forceNewConfig = false;
showAskCompatModeDialogLocked(r);
r.compat = mService.compatibilityInfoForPackageLocked(r.info.applicationInfo);
+ String profileFile = null;
+ ParcelFileDescriptor profileFd = null;
+ boolean profileAutoStop = false;
+ if (mService.mProfileApp != null && mService.mProfileApp.equals(app.processName)) {
+ if (mService.mProfileProc == null || mService.mProfileProc == app) {
+ mService.mProfileProc = app;
+ profileFile = mService.mProfileFile;
+ profileFd = mService.mProfileFd;
+ profileAutoStop = mService.mAutoStopProfiler;
+ }
+ }
app.hasShownUi = true;
app.pendingUiClean = true;
+ if (profileFd != null) {
+ try {
+ profileFd = profileFd.dup();
+ } catch (IOException e) {
+ profileFd = null;
+ }
+ }
app.thread.scheduleLaunchActivity(new Intent(r.intent), r,
System.identityHashCode(r),
r.info, r.compat, r.icicle, results, newIntents, !andResume,
- mService.isNextTransitionForward());
+ mService.isNextTransitionForward(), profileFile, profileFd,
+ profileAutoStop);
if ((app.info.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
// This may be a heavy-weight process! Note that the package
@@ -2669,7 +2690,8 @@ final class ActivityStack {
return START_SUCCESS;
}
- ActivityInfo resolveActivity(Intent intent, String resolvedType, boolean debug) {
+ ActivityInfo resolveActivity(Intent intent, String resolvedType, boolean debug,
+ String profileFile, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
// Collect information about the target of the Intent.
ActivityInfo aInfo;
try {
@@ -2697,6 +2719,13 @@ final class ActivityStack {
mService.setDebugApp(aInfo.processName, true, false);
}
}
+
+ if (profileFile != null) {
+ if (!aInfo.processName.equals("system")) {
+ mService.setProfileApp(aInfo.applicationInfo, aInfo.processName,
+ profileFile, profileFd, autoStopProfiler);
+ }
+ }
}
return aInfo;
}
@@ -2705,7 +2734,8 @@ final class ActivityStack {
Intent intent, String resolvedType, Uri[] grantedUriPermissions,
int grantedMode, IBinder resultTo,
String resultWho, int requestCode, boolean onlyIfNeeded,
- boolean debug, WaitResult outResult, Configuration config) {
+ boolean debug, String profileFile, ParcelFileDescriptor profileFd,
+ boolean autoStopProfiler, WaitResult outResult, Configuration config) {
// Refuse possible leaked file descriptors
if (intent != null && intent.hasFileDescriptors()) {
throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -2717,7 +2747,8 @@ final class ActivityStack {
intent = new Intent(intent);
// Collect information about the target of the Intent.
- ActivityInfo aInfo = resolveActivity(intent, resolvedType, debug);
+ ActivityInfo aInfo = resolveActivity(intent, resolvedType, debug,
+ profileFile, profileFd, autoStopProfiler);
synchronized (mService) {
int callingPid;
@@ -2903,7 +2934,8 @@ final class ActivityStack {
intent = new Intent(intent);
// Collect information about the target of the Intent.
- ActivityInfo aInfo = resolveActivity(intent, resolvedTypes[i], false);
+ ActivityInfo aInfo = resolveActivity(intent, resolvedTypes[i], false,
+ null, null, false);
if (mMainStack && aInfo != null && (aInfo.applicationInfo.flags
& ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
@@ -3069,10 +3101,12 @@ final class ActivityStack {
return stops;
}
- final void activityIdleInternal(IBinder token, boolean fromTimeout,
+ final ActivityRecord activityIdleInternal(IBinder token, boolean fromTimeout,
Configuration config) {
if (localLOGV) Slog.v(TAG, "Activity idle: " + token);
+ ActivityRecord res = null;
+
ArrayList<ActivityRecord> stops = null;
ArrayList<ActivityRecord> finishes = null;
ArrayList<ActivityRecord> thumbnails = null;
@@ -3092,6 +3126,7 @@ final class ActivityStack {
int index = indexOfTokenLocked(token);
if (index >= 0) {
ActivityRecord r = mHistory.get(index);
+ res = r;
if (fromTimeout) {
reportActivityLaunchedLocked(fromTimeout, r, -1, -1);
@@ -3207,6 +3242,8 @@ final class ActivityStack {
if (enableScreen) {
mService.enableScreenAfterBoot();
}
+
+ return res;
}
/**
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index 293702dfe750..226723fbed6c 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -478,6 +478,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub {
} else if ("-h".equals(arg)) {
dumpHelp(pw);
return;
+ } else if ("-a".equals(arg)) {
+ // fall through
} else {
pw.println("Unknown option: " + arg);
dumpHelp(pw);
diff --git a/services/java/com/android/server/am/BroadcastRecord.java b/services/java/com/android/server/am/BroadcastRecord.java
index c95053e0b84e..bcb013404ea9 100644
--- a/services/java/com/android/server/am/BroadcastRecord.java
+++ b/services/java/com/android/server/am/BroadcastRecord.java
@@ -29,6 +29,7 @@ import android.util.PrintWriterPrinter;
import android.util.TimeUtils;
import java.io.PrintWriter;
+import java.util.Date;
import java.util.List;
/**
@@ -47,6 +48,7 @@ class BroadcastRecord extends Binder {
final List receivers; // contains BroadcastFilter and ResolveInfo
IIntentReceiver resultTo; // who receives final result if non-null
long dispatchTime; // when dispatch started on this set of receivers
+ long dispatchClockTime; // the clock time the dispatch started
long receiverTime; // when current receiver started for timeouts.
long finishTime; // when we finished the broadcast.
int resultCode; // current result code value.
@@ -91,6 +93,8 @@ class BroadcastRecord extends Binder {
if (requiredPermission != null) {
pw.print(prefix); pw.print("requiredPermission="); pw.println(requiredPermission);
}
+ pw.print(prefix); pw.print("dispatchClockTime=");
+ pw.println(new Date(dispatchClockTime));
pw.print(prefix); pw.print("dispatchTime=");
TimeUtils.formatDuration(dispatchTime, now, pw);
if (finishTime != 0) {
diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java
index d9da92cc3d01..6b65e07ee570 100644
--- a/services/java/com/android/server/connectivity/Vpn.java
+++ b/services/java/com/android/server/connectivity/Vpn.java
@@ -265,7 +265,6 @@ public class Vpn extends INetworkManagementEventObserver.Stub {
// INetworkManagementEventObserver.Stub
@Override
public void interfaceLinkStateChanged(String interfaze, boolean up) {
- interfaceStatusChanged(interfaze, up);
}
// INetworkManagementEventObserver.Stub
@@ -280,6 +279,9 @@ public class Vpn extends INetworkManagementEventObserver.Stub {
if (mConnection != null) {
mContext.unbindService(mConnection);
mConnection = null;
+ } else if (mLegacyVpnRunner != null) {
+ mLegacyVpnRunner.exit();
+ mLegacyVpnRunner = null;
}
}
}
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index a07525502003..14d966511d6f 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -89,6 +89,7 @@ import android.os.IPowerManager;
import android.os.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
+import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.format.Formatter;
import android.text.format.Time;
@@ -168,6 +169,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
private static final String ATTR_UID = "uid";
private static final String ATTR_POLICY = "policy";
+ private static final String TAG_ALLOW_BACKGROUND = TAG + ":allowBackground";
+
+ // @VisibleForTesting
+ public static final String ACTION_ALLOW_BACKGROUND =
+ "com.android.server.action.ACTION_ALLOW_BACKGROUND";
+
private static final long TIME_CACHE_MAX_AGE = DAY_IN_MILLIS;
private static final int MSG_RULES_CHANGED = 0x1;
@@ -185,8 +192,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
private final Object mRulesLock = new Object();
- private boolean mScreenOn;
- private boolean mRestrictBackground;
+ private volatile boolean mScreenOn;
+ private volatile boolean mRestrictBackground;
/** Defined network policies. */
private HashMap<NetworkTemplate, NetworkPolicy> mNetworkPolicy = Maps.newHashMap();
@@ -265,6 +272,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
if (mRestrictBackground) {
updateRulesForRestrictBackgroundLocked();
+ updateNotificationsLocked();
}
}
@@ -309,6 +317,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mContext.registerReceiver(
mStatsReceiver, statsFilter, READ_NETWORK_USAGE_HISTORY, mHandler);
+ // listen for restrict background changes from notifications
+ final IntentFilter allowFilter = new IntentFilter(ACTION_ALLOW_BACKGROUND);
+ mContext.registerReceiver(mAllowReceiver, allowFilter, MANAGE_NETWORK_POLICY, mHandler);
+
}
private IProcessObserver mProcessObserver = new IProcessObserver.Stub() {
@@ -402,6 +414,20 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
};
/**
+ * Receiver that watches for {@link Notification} control of
+ * {@link #mRestrictBackground}.
+ */
+ private BroadcastReceiver mAllowReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // on background handler thread, and verified MANAGE_NETWORK_POLICY
+ // permission above.
+
+ setRestrictBackground(false);
+ }
+ };
+
+ /**
* Observer that watches for {@link INetworkManagementService} alerts.
*/
private INetworkManagementEventObserver mAlertObserver = new NetworkAlertObserver() {
@@ -494,6 +520,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
notifyUnderLimitLocked(policy.template);
}
}
+
+ // ongoing notification when restricting background data
+ if (mRestrictBackground) {
+ enqueueRestrictedNotification(TAG_ALLOW_BACKGROUND);
+ } else {
+ cancelNotification(TAG_ALLOW_BACKGROUND);
+ }
}
/**
@@ -614,16 +647,52 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
/**
+ * Show ongoing notification to reflect that {@link #mRestrictBackground}
+ * has been enabled.
+ */
+ private void enqueueRestrictedNotification(String tag) {
+ final Resources res = mContext.getResources();
+ final Notification.Builder builder = new Notification.Builder(mContext);
+
+ final CharSequence title = res.getText(R.string.data_usage_restricted_title);
+ final CharSequence body = res.getString(R.string.data_usage_restricted_body);
+
+ builder.setOnlyAlertOnce(true);
+ builder.setOngoing(true);
+ builder.setSmallIcon(R.drawable.ic_menu_info_details);
+ builder.setTicker(title);
+ builder.setContentTitle(title);
+ builder.setContentText(body);
+
+ final Intent intent = buildAllowBackgroundDataIntent();
+ builder.setContentIntent(
+ PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
+
+ // TODO: move to NotificationManager once we can mock it
+ try {
+ final String packageName = mContext.getPackageName();
+ final int[] idReceived = new int[1];
+ mNotifManager.enqueueNotificationWithTag(packageName, tag,
+ 0x0, builder.getNotification(), idReceived);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "problem during enqueueNotification: " + e);
+ }
+ }
+
+ /**
* Cancel any notification for combined {@link NetworkPolicy} and specific
* type, like {@link #TYPE_LIMIT}.
*/
private void cancelNotification(NetworkPolicy policy, int type) {
- final String tag = buildNotificationTag(policy, type);
+ cancelNotification(buildNotificationTag(policy, type));
+ }
+ private void cancelNotification(String tag) {
// TODO: move to NotificationManager once we can mock it
try {
final String packageName = mContext.getPackageName();
- mNotifManager.cancelNotificationWithTag(packageName, tag, 0x0);
+ mNotifManager.cancelNotificationWithTag(
+ packageName, tag, 0x0);
} catch (RemoteException e) {
Slog.w(TAG, "problem during enqueueNotification: " + e);
}
@@ -731,15 +800,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final boolean hasLimit = policy.limitBytes != LIMIT_DISABLED;
final boolean hasWarning = policy.warningBytes != WARNING_DISABLED;
- if (hasLimit || hasWarning) {
- final long quotaBytes;
- if (hasLimit) {
- // remaining "quota" is based on usage in current cycle
- quotaBytes = Math.max(0, policy.limitBytes - total);
- } else {
- // to track warning alert later, use a high quota
- quotaBytes = Long.MAX_VALUE;
- }
+ if (hasLimit) {
+ // remaining "quota" is based on usage in current cycle
+ final long quotaBytes = Math.max(0, policy.limitBytes - total);
if (ifaces.length > 1) {
// TODO: switch to shared quota once NMS supports
@@ -754,16 +817,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
}
-
- if (hasWarning) {
- final long alertBytes = Math.max(0, policy.warningBytes - total);
- for (String iface : ifaces) {
- removeInterfaceAlert(iface);
- if (alertBytes > 0) {
- setInterfaceAlert(iface, alertBytes);
- }
- }
- }
}
// remove quota on any trailing interfaces
@@ -839,11 +892,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mRestrictBackground = readBooleanAttribute(
in, ATTR_RESTRICT_BACKGROUND);
} else {
- try {
- mRestrictBackground = !mConnManager.getBackgroundDataSetting();
- } catch (RemoteException e) {
- mRestrictBackground = false;
- }
+ mRestrictBackground = false;
}
} else if (TAG_NETWORK_POLICY.equals(tag)) {
@@ -879,6 +928,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
} catch (FileNotFoundException e) {
// missing policy is okay, probably first boot
+ upgradeLegacyBackgroundData();
} catch (IOException e) {
Slog.e(TAG, "problem reading network stats", e);
} catch (XmlPullParserException e) {
@@ -888,6 +938,22 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
+ /**
+ * Upgrade legacy background data flags, notifying listeners of one last
+ * change to always-true.
+ */
+ private void upgradeLegacyBackgroundData() {
+ mRestrictBackground = Settings.Secure.getInt(
+ mContext.getContentResolver(), Settings.Secure.BACKGROUND_DATA, 1) != 1;
+
+ // kick off one last broadcast if restricted
+ if (mRestrictBackground) {
+ final Intent broadcast = new Intent(
+ ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
+ mContext.sendBroadcast(broadcast);
+ }
+ }
+
private void writePolicyLocked() {
if (LOGV) Slog.v(TAG, "writePolicyLocked()");
@@ -1057,6 +1123,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
synchronized (mRulesLock) {
mRestrictBackground = restrictBackground;
updateRulesForRestrictBackgroundLocked();
+ updateNotificationsLocked();
writePolicyLocked();
}
}
@@ -1313,6 +1380,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// dispatch changed rule to existing listeners
mHandler.obtainMessage(MSG_RULES_CHANGED, uid, uidRules).sendToTarget();
+
+ try {
+ // adjust stats accounting based on foreground status
+ mNetworkStats.setUidForeground(uid, uidForeground);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "problem dispatching foreground change");
+ }
}
private Handler.Callback mHandlerCallback = new Handler.Callback() {
@@ -1413,6 +1487,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
return telephony.getSubscriberId();
}
+ private static Intent buildAllowBackgroundDataIntent() {
+ return new Intent(ACTION_ALLOW_BACKGROUND);
+ }
+
private static Intent buildNetworkOverLimitIntent(NetworkTemplate template) {
final Intent intent = new Intent();
intent.setComponent(new ComponentName(
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index deca7a91cfa4..c911687ab7a2 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -26,6 +26,9 @@ import static android.content.Intent.ACTION_UID_REMOVED;
import static android.content.Intent.EXTRA_UID;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.SET_ALL;
+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 static android.net.TrafficStats.UID_REMOVED;
@@ -40,6 +43,8 @@ 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.NetworkManagementSocketTagger.resetKernelUidStats;
+import static com.android.server.NetworkManagementSocketTagger.setKernelCounterSet;
import android.app.AlarmManager;
import android.app.IAlarmManager;
@@ -63,17 +68,20 @@ import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.INetworkManagementService;
+import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
import android.telephony.TelephonyManager;
-import android.util.LongSparseArray;
import android.util.NtpTrustedTime;
import android.util.Slog;
+import android.util.SparseIntArray;
import android.util.TrustedTime;
import com.android.internal.os.AtomicFile;
+import com.android.internal.util.Objects;
+import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
import com.google.android.collect.Sets;
@@ -88,6 +96,8 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ProtocolException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -109,6 +119,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private static final int VERSION_UID_INIT = 1;
private static final int VERSION_UID_WITH_IDENT = 2;
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 final Context mContext;
private final INetworkManagementService mNetworkManager;
@@ -156,8 +169,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
/** Set of historical network layer stats for known networks. */
private HashMap<NetworkIdentitySet, NetworkStatsHistory> mNetworkStats = Maps.newHashMap();
/** Set of historical network layer stats for known UIDs. */
- private HashMap<NetworkIdentitySet, LongSparseArray<NetworkStatsHistory>> mUidStats =
- Maps.newHashMap();
+ private HashMap<UidStatsKey, NetworkStatsHistory> mUidStats = Maps.newHashMap();
/** Flag if {@link #mUidStats} have been loaded from disk. */
private boolean mUidStatsLoaded = false;
@@ -167,6 +179,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private NetworkStats mLastUidSnapshot;
+ /** 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;
@@ -177,11 +192,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private final AtomicFile mNetworkFile;
private final AtomicFile mUidFile;
- // TODO: collect detailed uid stats, storing tag-granularity data until next
- // dropbox, and uid summary for a specific bucket count.
-
- // TODO: periodically compile statistics and send to dropbox.
-
public NetworkStatsService(
Context context, INetworkManagementService networkManager, IAlarmManager alarmManager) {
this(context, networkManager, alarmManager, NtpTrustedTime.getInstance(context),
@@ -207,7 +217,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
mHandlerThread = new HandlerThread(TAG);
mHandlerThread.start();
- mHandler = new Handler(mHandlerThread.getLooper());
+ mHandler = new Handler(mHandlerThread.getLooper(), mHandlerCallback);
mNetworkFile = new AtomicFile(new File(systemDir, "netstats.bin"));
mUidFile = new AtomicFile(new File(systemDir, "netstats_uid.bin"));
@@ -246,6 +256,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
} catch (RemoteException e) {
Slog.w(TAG, "unable to register poll alarm");
}
+
+ // kick off background poll to bootstrap deltas
+ mHandler.obtainMessage(MSG_FORCE_UPDATE).sendToTarget();
}
private void shutdownLocked() {
@@ -302,24 +315,24 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
@Override
public NetworkStatsHistory getHistoryForUid(
- NetworkTemplate template, int uid, int tag, int fields) {
+ NetworkTemplate template, int uid, int set, int tag, int fields) {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
synchronized (mStatsLock) {
ensureUidStatsLoadedLocked();
- final long packed = packUidAndTag(uid, tag);
// combine all interfaces that match template
final NetworkStatsHistory combined = new NetworkStatsHistory(
mSettings.getUidBucketDuration(), estimateUidBuckets(), fields);
- for (NetworkIdentitySet ident : mUidStats.keySet()) {
- if (templateMatches(template, ident)) {
- final NetworkStatsHistory history = mUidStats.get(ident).get(packed);
- if (history != null) {
- combined.recordEntireHistory(history);
- }
+ for (UidStatsKey key : mUidStats.keySet()) {
+ final boolean setMatches = set == SET_ALL || key.set == set;
+ if (templateMatches(template, key.ident) && key.uid == uid && setMatches
+ && key.tag == tag) {
+ final NetworkStatsHistory history = mUidStats.get(key);
+ combined.recordEntireHistory(history);
}
}
+
return combined;
}
}
@@ -371,33 +384,27 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
final NetworkStats.Entry entry = new NetworkStats.Entry();
NetworkStatsHistory.Entry historyEntry = null;
- for (NetworkIdentitySet ident : mUidStats.keySet()) {
- if (templateMatches(template, ident)) {
- final LongSparseArray<NetworkStatsHistory> uidStats = mUidStats.get(ident);
- for (int i = 0; i < uidStats.size(); i++) {
- final long packed = uidStats.keyAt(i);
- final int uid = unpackUid(packed);
- final int tag = unpackTag(packed);
-
- // always include summary under TAG_NONE, and include
- // other tags when requested.
- if (tag == TAG_NONE || includeTags) {
- final NetworkStatsHistory history = uidStats.valueAt(i);
- historyEntry = history.getValues(start, end, now, historyEntry);
-
- entry.iface = IFACE_ALL;
- entry.uid = uid;
- entry.tag = tag;
- entry.rxBytes = historyEntry.rxBytes;
- entry.rxPackets = historyEntry.rxPackets;
- entry.txBytes = historyEntry.txBytes;
- entry.txPackets = historyEntry.txPackets;
- entry.operations = historyEntry.operations;
-
- if (entry.rxBytes > 0 || entry.rxPackets > 0 || entry.txBytes > 0
- || entry.txPackets > 0 || entry.operations > 0) {
- stats.combineValues(entry);
- }
+ for (UidStatsKey key : mUidStats.keySet()) {
+ if (templateMatches(template, key.ident)) {
+ // always include summary under TAG_NONE, and include
+ // other tags when requested.
+ if (key.tag == TAG_NONE || includeTags) {
+ final NetworkStatsHistory history = mUidStats.get(key);
+ historyEntry = history.getValues(start, end, now, historyEntry);
+
+ entry.iface = IFACE_ALL;
+ entry.uid = key.uid;
+ entry.set = key.set;
+ entry.tag = key.tag;
+ entry.rxBytes = historyEntry.rxBytes;
+ entry.rxPackets = historyEntry.rxPackets;
+ entry.txBytes = historyEntry.txBytes;
+ entry.txPackets = historyEntry.txPackets;
+ entry.operations = historyEntry.operations;
+
+ if (entry.rxBytes > 0 || entry.rxPackets > 0 || entry.txBytes > 0
+ || entry.txPackets > 0 || entry.operations > 0) {
+ stats.combineValues(entry);
}
}
}
@@ -437,8 +444,31 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
}
+ if (operationCount < 0) {
+ throw new IllegalArgumentException("operation count can only be incremented");
+ }
+ if (tag == TAG_NONE) {
+ throw new IllegalArgumentException("operation count must have specific tag");
+ }
+
synchronized (mStatsLock) {
- mOperations.combineValues(IFACE_ALL, uid, tag, 0L, 0L, 0L, 0L, operationCount);
+ final int set = mActiveUidCounterSet.get(uid, SET_DEFAULT);
+ mOperations.combineValues(IFACE_ALL, uid, set, tag, 0L, 0L, 0L, 0L, operationCount);
+ mOperations.combineValues(IFACE_ALL, uid, set, TAG_NONE, 0L, 0L, 0L, 0L, operationCount);
+ }
+ }
+
+ @Override
+ public void setUidForeground(int uid, boolean uidForeground) {
+ mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
+
+ synchronized (mStatsLock) {
+ final int set = uidForeground ? SET_FOREGROUND : SET_DEFAULT;
+ final int oldSet = mActiveUidCounterSet.get(uid, SET_DEFAULT);
+ if (oldSet != set) {
+ mActiveUidCounterSet.put(uid, set);
+ setKernelCounterSet(uid, set);
+ }
}
}
@@ -601,7 +631,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
NetworkStats.Entry entry = null;
for (String iface : persistDelta.getUniqueIfaces()) {
- final int index = persistDelta.findIndex(iface, UID_ALL, TAG_NONE);
+ 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) {
@@ -676,31 +706,28 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
// splice in operation counts since last poll
- final int j = operationsDelta.findIndex(IFACE_ALL, entry.uid, entry.tag);
+ final int j = operationsDelta.findIndex(IFACE_ALL, entry.uid, entry.set, entry.tag);
if (j != -1) {
operationsEntry = operationsDelta.getValues(j, operationsEntry);
entry.operations = operationsEntry.operations;
}
final NetworkStatsHistory history = findOrCreateUidStatsLocked(
- ident, entry.uid, entry.tag);
+ ident, entry.uid, entry.set, entry.tag);
history.recordData(timeStart, currentTime, entry);
}
// trim any history beyond max
final long maxUidHistory = mSettings.getUidMaxHistory();
final long maxTagHistory = mSettings.getTagMaxHistory();
- for (LongSparseArray<NetworkStatsHistory> uidStats : mUidStats.values()) {
- for (int i = 0; i < uidStats.size(); i++) {
- final long packed = uidStats.keyAt(i);
- final NetworkStatsHistory history = uidStats.valueAt(i);
-
- // detailed tags are trimmed sooner than summary in TAG_NONE
- if (unpackTag(packed) == TAG_NONE) {
- history.removeBucketsBefore(currentTime - maxUidHistory);
- } else {
- history.removeBucketsBefore(currentTime - maxTagHistory);
- }
+ for (UidStatsKey key : mUidStats.keySet()) {
+ final NetworkStatsHistory history = mUidStats.get(key);
+
+ // detailed tags are trimmed sooner than summary in TAG_NONE
+ if (key.tag == TAG_NONE) {
+ history.removeBucketsBefore(currentTime - maxUidHistory);
+ } else {
+ history.removeBucketsBefore(currentTime - maxTagHistory);
}
}
@@ -715,26 +742,25 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void removeUidLocked(int uid) {
ensureUidStatsLoadedLocked();
+ final ArrayList<UidStatsKey> knownKeys = Lists.newArrayList();
+ knownKeys.addAll(mUidStats.keySet());
+
// migrate all UID stats into special "removed" bucket
- for (NetworkIdentitySet ident : mUidStats.keySet()) {
- final LongSparseArray<NetworkStatsHistory> uidStats = mUidStats.get(ident);
- for (int i = 0; i < uidStats.size(); i++) {
- final long packed = uidStats.keyAt(i);
- if (unpackUid(packed) == uid) {
- // only migrate combined TAG_NONE history
- if (unpackTag(packed) == TAG_NONE) {
- final NetworkStatsHistory uidHistory = uidStats.valueAt(i);
- final NetworkStatsHistory removedHistory = findOrCreateUidStatsLocked(
- ident, UID_REMOVED, TAG_NONE);
- removedHistory.recordEntireHistory(uidHistory);
- }
- uidStats.remove(packed);
+ for (UidStatsKey key : knownKeys) {
+ if (key.uid == uid) {
+ // only migrate combined TAG_NONE history
+ if (key.tag == TAG_NONE) {
+ final NetworkStatsHistory uidHistory = mUidStats.get(key);
+ final NetworkStatsHistory removedHistory = findOrCreateUidStatsLocked(
+ key.ident, UID_REMOVED, SET_DEFAULT, TAG_NONE);
+ removedHistory.recordEntireHistory(uidHistory);
}
+ mUidStats.remove(key);
}
}
- // TODO: push kernel event to wipe stats for UID, otherwise we risk
- // picking them up again during next poll.
+ // clear kernel stats associated with UID
+ resetKernelUidStats(uid);
// since this was radical rewrite, push to disk
writeUidStatsLocked();
@@ -763,17 +789,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
private NetworkStatsHistory findOrCreateUidStatsLocked(
- NetworkIdentitySet ident, int uid, int tag) {
+ NetworkIdentitySet ident, int uid, int set, int tag) {
ensureUidStatsLoadedLocked();
- LongSparseArray<NetworkStatsHistory> uidStats = mUidStats.get(ident);
- if (uidStats == null) {
- uidStats = new LongSparseArray<NetworkStatsHistory>();
- mUidStats.put(ident, uidStats);
- }
-
- final long packed = packUidAndTag(uid, tag);
- final NetworkStatsHistory existing = uidStats.get(packed);
+ final UidStatsKey key = new UidStatsKey(ident, uid, set, tag);
+ final NetworkStatsHistory existing = mUidStats.get(key);
// update when no existing, or when bucket duration changed
final long bucketDuration = mSettings.getUidBucketDuration();
@@ -787,7 +807,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
if (updated != null) {
- uidStats.put(packed, updated);
+ mUidStats.put(key, updated);
return updated;
} else {
return existing;
@@ -874,25 +894,24 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// for a short time.
break;
}
- case VERSION_UID_WITH_TAG: {
- // uid := size *(NetworkIdentitySet size *(UID tag NetworkStatsHistory))
- final int ifaceSize = in.readInt();
- for (int i = 0; i < ifaceSize; i++) {
+ case VERSION_UID_WITH_TAG:
+ case VERSION_UID_WITH_SET: {
+ // uid := size *(NetworkIdentitySet size *(uid set tag NetworkStatsHistory))
+ final int identSize = in.readInt();
+ for (int i = 0; i < identSize; i++) {
final NetworkIdentitySet ident = new NetworkIdentitySet(in);
- final int childSize = in.readInt();
- final LongSparseArray<NetworkStatsHistory> uidStats = new LongSparseArray<
- NetworkStatsHistory>(childSize);
- for (int j = 0; j < childSize; j++) {
+ final int size = in.readInt();
+ for (int j = 0; j < size; j++) {
final int uid = in.readInt();
+ final int set = (version >= VERSION_UID_WITH_SET) ? in.readInt()
+ : SET_DEFAULT;
final int tag = in.readInt();
- final long packed = packUidAndTag(uid, tag);
+ final UidStatsKey key = new UidStatsKey(ident, uid, set, tag);
final NetworkStatsHistory history = new NetworkStatsHistory(in);
- uidStats.put(packed, history);
+ mUidStats.put(key, history);
}
-
- mUidStats.put(ident, uidStats);
}
break;
}
@@ -949,29 +968,36 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// TODO: consider duplicating stats and releasing lock while writing
+ // build UidStatsKey lists grouped by ident
+ final HashMap<NetworkIdentitySet, ArrayList<UidStatsKey>> keysByIdent = Maps.newHashMap();
+ for (UidStatsKey key : mUidStats.keySet()) {
+ ArrayList<UidStatsKey> keys = keysByIdent.get(key.ident);
+ if (keys == null) {
+ keys = Lists.newArrayList();
+ keysByIdent.put(key.ident, keys);
+ }
+ keys.add(key);
+ }
+
FileOutputStream fos = null;
try {
fos = mUidFile.startWrite();
final DataOutputStream out = new DataOutputStream(new BufferedOutputStream(fos));
out.writeInt(FILE_MAGIC);
- out.writeInt(VERSION_UID_WITH_TAG);
+ out.writeInt(VERSION_UID_WITH_SET);
- final int size = mUidStats.size();
- out.writeInt(size);
- for (NetworkIdentitySet ident : mUidStats.keySet()) {
- final LongSparseArray<NetworkStatsHistory> uidStats = mUidStats.get(ident);
+ out.writeInt(keysByIdent.size());
+ for (NetworkIdentitySet ident : keysByIdent.keySet()) {
+ final ArrayList<UidStatsKey> keys = keysByIdent.get(ident);
ident.writeToStream(out);
- final int childSize = uidStats.size();
- out.writeInt(childSize);
- for (int i = 0; i < childSize; i++) {
- final long packed = uidStats.keyAt(i);
- final int uid = unpackUid(packed);
- final int tag = unpackTag(packed);
- final NetworkStatsHistory history = uidStats.valueAt(i);
- out.writeInt(uid);
- out.writeInt(tag);
+ out.writeInt(keys.size());
+ for (UidStatsKey key : keys) {
+ final NetworkStatsHistory history = mUidStats.get(key);
+ out.writeInt(key.uid);
+ out.writeInt(key.set);
+ out.writeInt(key.tag);
history.writeToStream(out);
}
}
@@ -1030,20 +1056,19 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// from disk if not already in memory.
ensureUidStatsLoadedLocked();
+ final ArrayList<UidStatsKey> keys = Lists.newArrayList();
+ keys.addAll(mUidStats.keySet());
+ Collections.sort(keys);
+
pw.println("Detailed UID stats:");
- for (NetworkIdentitySet ident : mUidStats.keySet()) {
- pw.print(" ident="); pw.println(ident.toString());
-
- final LongSparseArray<NetworkStatsHistory> uidStats = mUidStats.get(ident);
- for (int i = 0; i < uidStats.size(); i++) {
- final long packed = uidStats.keyAt(i);
- final int uid = unpackUid(packed);
- final int tag = unpackTag(packed);
- final NetworkStatsHistory history = uidStats.valueAt(i);
- pw.print(" UID="); pw.print(uid);
- pw.print(" tag=0x"); pw.println(Integer.toHexString(tag));
- history.dump(" ", pw, fullHistory);
- }
+ for (UidStatsKey key : keys) {
+ pw.print(" ident="); pw.print(key.ident.toString());
+ pw.print(" uid="); pw.print(key.uid);
+ pw.print(" set="); pw.print(NetworkStats.setToString(key.set));
+ pw.print(" tag="); pw.println(NetworkStats.tagToString(key.tag));
+
+ final NetworkStatsHistory history = mUidStats.get(key);
+ history.dump(" ", pw, fullHistory);
}
}
}
@@ -1080,8 +1105,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
for (ApplicationInfo info : installedApps) {
final int uid = info.uid;
- findOrCreateUidStatsLocked(ident, uid, TAG_NONE).generateRandom(UID_START, UID_END,
- UID_RX_BYTES, UID_RX_PACKETS, UID_TX_BYTES, UID_TX_PACKETS, UID_OPERATIONS);
+ findOrCreateUidStatsLocked(ident, uid, SET_DEFAULT, TAG_NONE).generateRandom(
+ UID_START, UID_END, UID_RX_BYTES, UID_RX_PACKETS, UID_TX_BYTES,
+ UID_TX_PACKETS, UID_OPERATIONS);
+ findOrCreateUidStatsLocked(ident, uid, SET_FOREGROUND, TAG_NONE).generateRandom(
+ UID_START, UID_END, UID_RX_BYTES, UID_RX_PACKETS, UID_TX_BYTES,
+ UID_TX_PACKETS, UID_OPERATIONS);
}
}
}
@@ -1116,23 +1145,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
return (int) (existing.size() * existing.getBucketDuration() / newBucketDuration);
}
- // @VisibleForTesting
- public static long packUidAndTag(int uid, int tag) {
- final long uidLong = uid;
- final long tagLong = tag;
- return (uidLong << 32) | (tagLong & 0xFFFFFFFFL);
- }
-
- // @VisibleForTesting
- public static int unpackUid(long packed) {
- return (int) (packed >> 32);
- }
-
- // @VisibleForTesting
- public static int unpackTag(long packed) {
- return (int) (packed & 0xFFFFFFFFL);
- }
-
/**
* Test if given {@link NetworkTemplate} matches any {@link NetworkIdentity}
* in the given {@link NetworkIdentitySet}.
@@ -1146,6 +1158,58 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
return false;
}
+ private Handler.Callback mHandlerCallback = new Handler.Callback() {
+ /** {@inheritDoc} */
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_FORCE_UPDATE: {
+ forceUpdate();
+ return true;
+ }
+ default: {
+ return false;
+ }
+ }
+ }
+ };
+
+ /**
+ * Key uniquely identifying a {@link NetworkStatsHistory} for a UID.
+ */
+ private static class UidStatsKey implements Comparable<UidStatsKey> {
+ public final NetworkIdentitySet ident;
+ public final int uid;
+ public final int set;
+ public final int tag;
+
+ public UidStatsKey(NetworkIdentitySet ident, int uid, int set, int tag) {
+ this.ident = ident;
+ this.uid = uid;
+ this.set = set;
+ this.tag = tag;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(ident, uid, set, tag);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof UidStatsKey) {
+ final UidStatsKey key = (UidStatsKey) obj;
+ return Objects.equal(ident, key.ident) && uid == key.uid && set == key.set
+ && tag == key.tag;
+ }
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ public int compareTo(UidStatsKey another) {
+ return Integer.compare(uid, another.uid);
+ }
+ }
+
/**
* Default external settings that read from {@link Settings.Secure}.
*/
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 177cf41658e0..2f19a46203b9 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -38,6 +38,7 @@ import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.admin.IDevicePolicyManager;
import android.app.backup.IBackupManager;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.IIntentReceiver;
@@ -69,6 +70,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.Signature;
import android.content.pm.UserInfo;
+import android.content.pm.ManifestDigest;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -185,9 +187,21 @@ public class PackageManagerService extends IPackageManager.Stub {
static final int SCAN_NEW_INSTALL = 1<<4;
static final int SCAN_NO_PATHS = 1<<5;
static final int SCAN_UPDATE_TIME = 1<<6;
+ static final int SCAN_DEFER_DEX = 1<<7;
static final int REMOVE_CHATTY = 1<<16;
+ /**
+ * Whether verification is enabled by default.
+ */
+ private static final boolean DEFAULT_VERIFY_ENABLE = true;
+
+ /**
+ * The default maximum time to wait for the verification agent to return in
+ * milliseconds.
+ */
+ private static final long DEFAULT_VERIFICATION_TIMEOUT = 60 * 1000;
+
static final String DEFAULT_CONTAINER_PACKAGE = "com.android.defcontainer";
static final ComponentName DEFAULT_CONTAINER_COMPONENT = new ComponentName(
@@ -333,6 +347,15 @@ public class PackageManagerService extends IPackageManager.Stub {
// Broadcast actions that are only available to the system.
final HashSet<String> mProtectedBroadcasts = new HashSet<String>();
+ /** List of packages waiting for verification. */
+ final SparseArray<InstallArgs> mPendingVerification = new SparseArray<InstallArgs>();
+
+ final ArrayList<PackageParser.Package> mDeferredDexOpt =
+ new ArrayList<PackageParser.Package>();
+
+ /** Token for keys in mPendingVerification. */
+ private int mPendingVerificationToken = 0;
+
boolean mSystemReady;
boolean mSafeMode;
boolean mHasSystemUidErrors;
@@ -364,6 +387,8 @@ public class PackageManagerService extends IPackageManager.Stub {
static final int UPDATED_MEDIA_STATUS = 12;
static final int WRITE_SETTINGS = 13;
static final int WRITE_STOPPED_PACKAGES = 14;
+ static final int PACKAGE_VERIFIED = 15;
+ static final int CHECK_PENDING_VERIFICATION = 16;
static final int WRITE_SETTINGS_DELAY = 10*1000; // 10 seconds
@@ -444,10 +469,10 @@ public class PackageManagerService extends IPackageManager.Stub {
void doHandleMessage(Message msg) {
switch (msg.what) {
case INIT_COPY: {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "init_copy");
+ if (DEBUG_INSTALL) Slog.i(TAG, "init_copy");
HandlerParams params = (HandlerParams) msg.obj;
int idx = mPendingInstalls.size();
- if (DEBUG_SD_INSTALL) Log.i(TAG, "idx=" + idx);
+ if (DEBUG_INSTALL) Slog.i(TAG, "idx=" + idx);
// If a bind was already initiated we dont really
// need to do anything. The pending install
// will be processed later on.
@@ -474,7 +499,7 @@ public class PackageManagerService extends IPackageManager.Stub {
break;
}
case MCS_BOUND: {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "mcs_bound");
+ if (DEBUG_INSTALL) Slog.i(TAG, "mcs_bound");
if (msg.obj != null) {
mContainerService = (IMediaContainerService) msg.obj;
}
@@ -525,8 +550,8 @@ public class PackageManagerService extends IPackageManager.Stub {
}
break;
}
- case MCS_RECONNECT : {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "mcs_reconnect");
+ case MCS_RECONNECT: {
+ if (DEBUG_INSTALL) Slog.i(TAG, "mcs_reconnect");
if (mPendingInstalls.size() > 0) {
if (mBound) {
disconnectService();
@@ -543,27 +568,31 @@ public class PackageManagerService extends IPackageManager.Stub {
}
break;
}
- case MCS_UNBIND : {
+ case MCS_UNBIND: {
// If there is no actual work left, then time to unbind.
- if (DEBUG_SD_INSTALL) Log.i(TAG, "mcs_unbind");
- if (mPendingInstalls.size() == 0) {
+ if (DEBUG_INSTALL) Slog.i(TAG, "mcs_unbind");
+
+ if (mPendingInstalls.size() == 0 && mPendingVerification.size() == 0) {
if (mBound) {
+ if (DEBUG_INSTALL) Slog.i(TAG, "calling disconnectService()");
+
disconnectService();
}
- } else {
+ } else if (mPendingInstalls.size() > 0) {
// There are more pending requests in queue.
// Just post MCS_BOUND message to trigger processing
// of next pending install.
mHandler.sendEmptyMessage(MCS_BOUND);
}
+
break;
}
case MCS_GIVE_UP: {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "mcs_giveup too many retries");
+ if (DEBUG_INSTALL) Slog.i(TAG, "mcs_giveup too many retries");
mPendingInstalls.remove(0);
break;
}
- case SEND_PENDING_BROADCAST : {
+ case SEND_PENDING_BROADCAST: {
String packages[];
ArrayList<String> components[];
int size = 0;
@@ -707,6 +736,52 @@ public class PackageManagerService extends IPackageManager.Stub {
}
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
} break;
+ case CHECK_PENDING_VERIFICATION: {
+ final int verificationId = msg.arg1;
+ final InstallArgs args = mPendingVerification.get(verificationId);
+
+ if (args != null) {
+ Slog.i(TAG, "Validation timed out for " + args.packageURI.toString());
+ mPendingVerification.remove(verificationId);
+
+ int ret = PackageManager.INSTALL_FAILED_VERIFICATION_TIMEOUT;
+ processPendingInstall(args, ret);
+
+ mHandler.sendEmptyMessage(MCS_UNBIND);
+ }
+
+ break;
+ }
+ case PACKAGE_VERIFIED: {
+ final int verificationId = msg.arg1;
+ final boolean verified = msg.arg2 == 1 ? true : false;
+
+ final InstallArgs args = mPendingVerification.get(verificationId);
+ if (args == null) {
+ Slog.w(TAG, "Invalid validation token " + verificationId + " received");
+ break;
+ }
+
+ mPendingVerification.remove(verificationId);
+
+ int ret;
+ if (verified) {
+ ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+ try {
+ ret = args.copyApk(mContainerService, true);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Could not contact the ContainerService");
+ }
+ } else {
+ ret = PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE;
+ }
+
+ processPendingInstall(args, ret);
+
+ mHandler.sendEmptyMessage(MCS_UNBIND);
+
+ break;
+ }
}
}
}
@@ -836,7 +911,7 @@ public class PackageManagerService extends IPackageManager.Stub {
// Set flag to monitor and not change apk file paths when
// scanning install directories.
- int scanMode = SCAN_MONITOR | SCAN_NO_PATHS;
+ int scanMode = SCAN_MONITOR | SCAN_NO_PATHS | SCAN_DEFER_DEX;
if (mNoDexOpt) {
Slog.w(TAG, "Running ENG build: no pre-dexopt!");
scanMode |= SCAN_NO_DEX;
@@ -2828,6 +2903,33 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
+ public void performBootDexOpt() {
+ ArrayList<PackageParser.Package> pkgs = null;
+ synchronized (mPackages) {
+ if (mDeferredDexOpt.size() > 0) {
+ pkgs = new ArrayList<PackageParser.Package>(mDeferredDexOpt);
+ mDeferredDexOpt.clear();
+ }
+ }
+ if (pkgs != null) {
+ for (int i=0; i<pkgs.size(); i++) {
+ try {
+ ActivityManagerNative.getDefault().showBootMessage(
+ mContext.getResources().getString(
+ com.android.internal.R.string.android_upgrading_apk,
+ i+1, pkgs.size()), true);
+ } catch (RemoteException e) {
+ }
+ PackageParser.Package p = pkgs.get(i);
+ synchronized (mInstallLock) {
+ if (!p.mDidDexOpt) {
+ performDexOptLI(p, false, false);
+ }
+ }
+ }
+ }
+ }
+
public boolean performDexOpt(String packageName) {
enforceSystemOrRoot("Only the system can request dexopt be performed");
@@ -2843,25 +2945,32 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
synchronized (mInstallLock) {
- return performDexOptLI(p, false) == DEX_OPT_PERFORMED;
+ return performDexOptLI(p, false, false) == DEX_OPT_PERFORMED;
}
}
static final int DEX_OPT_SKIPPED = 0;
static final int DEX_OPT_PERFORMED = 1;
+ static final int DEX_OPT_DEFERRED = 2;
static final int DEX_OPT_FAILED = -1;
- private int performDexOptLI(PackageParser.Package pkg, boolean forceDex) {
+ private int performDexOptLI(PackageParser.Package pkg, boolean forceDex, boolean defer) {
boolean performed = false;
if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_HAS_CODE) != 0) {
String path = pkg.mScanPath;
int ret = 0;
try {
if (forceDex || dalvik.system.DexFile.isDexOptNeeded(path)) {
- ret = mInstaller.dexopt(path, pkg.applicationInfo.uid,
- !isForwardLocked(pkg));
- pkg.mDidDexOpt = true;
- performed = true;
+ if (!forceDex && defer) {
+ mDeferredDexOpt.add(pkg);
+ return DEX_OPT_DEFERRED;
+ } else {
+ Log.i(TAG, "Running dexopt on: " + pkg.applicationInfo.packageName);
+ ret = mInstaller.dexopt(path, pkg.applicationInfo.uid,
+ !isForwardLocked(pkg));
+ pkg.mDidDexOpt = true;
+ performed = true;
+ }
}
} catch (FileNotFoundException e) {
Slog.w(TAG, "Apk not found for dexopt: " + path);
@@ -3416,7 +3525,8 @@ public class PackageManagerService extends IPackageManager.Stub {
pkg.mScanPath = path;
if ((scanMode&SCAN_NO_DEX) == 0) {
- if (performDexOptLI(pkg, forceDex) == DEX_OPT_FAILED) {
+ if (performDexOptLI(pkg, forceDex, (scanMode&SCAN_DEFER_DEX) != 0)
+ == DEX_OPT_FAILED) {
mLastScanError = PackageManager.INSTALL_FAILED_DEXOPT;
return null;
}
@@ -4269,6 +4379,7 @@ public class PackageManagerService extends IPackageManager.Stub {
res.labelRes = info.labelRes;
res.nonLocalizedLabel = info.nonLocalizedLabel;
res.icon = info.icon;
+ res.system = isSystemApp(res.activityInfo.applicationInfo);
return res;
}
@@ -4441,6 +4552,7 @@ public class PackageManagerService extends IPackageManager.Stub {
res.labelRes = info.labelRes;
res.nonLocalizedLabel = info.nonLocalizedLabel;
res.icon = info.icon;
+ res.system = isSystemApp(res.serviceInfo.applicationInfo);
return res;
}
@@ -4498,7 +4610,13 @@ public class PackageManagerService extends IPackageManager.Stub {
v1 = r1.match;
v2 = r2.match;
//System.out.println("Comparing: m1=" + m1 + " m2=" + m2);
- return (v1 > v2) ? -1 : ((v1 < v2) ? 1 : 0);
+ if (v1 != v2) {
+ return (v1 > v2) ? -1 : 1;
+ }
+ if (r1.system != r2.system) {
+ return r1.system ? -1 : 1;
+ }
+ return 0;
}
};
@@ -4693,12 +4811,45 @@ public class PackageManagerService extends IPackageManager.Stub {
public void installPackage(
final Uri packageURI, final IPackageInstallObserver observer, final int flags,
final String installerPackageName) {
+ installPackageWithVerification(packageURI, observer, flags, installerPackageName, null,
+ null);
+ }
+
+ @Override
+ public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
+ int flags, String installerPackageName, Uri verificationURI,
+ ManifestDigest manifestDigest) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
+
+ final int uid = Binder.getCallingUid();
+
+ final int filteredFlags;
+
+ if (uid == Process.SHELL_UID || uid == 0) {
+ if (DEBUG_INSTALL) {
+ Slog.v(TAG, "Install from ADB");
+ }
+ filteredFlags = flags | PackageManager.INSTALL_FROM_ADB;
+ } else {
+ filteredFlags = flags & ~PackageManager.INSTALL_FROM_ADB;
+ }
+
+ final Message msg = mHandler.obtainMessage(INIT_COPY);
+ msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
+ verificationURI, manifestDigest);
+ mHandler.sendMessage(msg);
+ }
+
+ @Override
+ public void verifyPendingInstall(int id, boolean verified, String message)
+ throws RemoteException {
mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.INSTALL_PACKAGES, null);
+ android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, null);
- Message msg = mHandler.obtainMessage(INIT_COPY);
- msg.obj = new InstallParams(packageURI, observer, flags,
- installerPackageName);
+ final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED);
+ msg.arg1 = id;
+ msg.arg2 = verified ? 1 : 0;
+ msg.obj = message;
mHandler.sendMessage(msg);
}
@@ -4713,6 +4864,28 @@ public class PackageManagerService extends IPackageManager.Stub {
mHandler.sendMessage(msg);
}
+ /**
+ * Get the verification agent timeout.
+ *
+ * @return verification timeout in milliseconds
+ */
+ private long getVerificationTimeout() {
+ return android.provider.Settings.Secure.getLong(mContext.getContentResolver(),
+ android.provider.Settings.Secure.PACKAGE_VERIFIER_TIMEOUT,
+ DEFAULT_VERIFICATION_TIMEOUT);
+ }
+
+ /**
+ * Check whether or not package verification has been enabled.
+ *
+ * @return true if verification should be performed
+ */
+ private boolean isVerificationEnabled() {
+ return android.provider.Settings.Secure.getInt(mContext.getContentResolver(),
+ android.provider.Settings.Secure.PACKAGE_VERIFIER_ENABLE,
+ DEFAULT_VERIFY_ENABLE ? 1 : 0) == 1 ? true : false;
+ }
+
public void setInstallerPackageName(String targetPackage, String installerPackageName) {
final int uid = Binder.getCallingUid();
// writer
@@ -4856,15 +5029,21 @@ public class PackageManagerService extends IPackageManager.Stub {
});
}
- abstract class HandlerParams {
- final static int MAX_RETRIES = 4;
- int retry = 0;
+ private abstract class HandlerParams {
+ private static final int MAX_RETRIES = 4;
+
+ /**
+ * Number of times startCopy() has been attempted and had a non-fatal
+ * error.
+ */
+ private int mRetries = 0;
+
final boolean startCopy() {
boolean res;
try {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "startCopy");
- retry++;
- if (retry > MAX_RETRIES) {
+ if (DEBUG_INSTALL) Slog.i(TAG, "startCopy");
+
+ if (++mRetries > MAX_RETRIES) {
Slog.w(TAG, "Failed to invoke remote methods on default container service. Giving up");
mHandler.sendEmptyMessage(MCS_GIVE_UP);
handleServiceError();
@@ -4874,7 +5053,7 @@ public class PackageManagerService extends IPackageManager.Stub {
res = true;
}
} catch (RemoteException e) {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "Posting install MCS_RECONNECT");
+ if (DEBUG_INSTALL) Slog.i(TAG, "Posting install MCS_RECONNECT");
mHandler.sendEmptyMessage(MCS_RECONNECT);
res = false;
}
@@ -4883,10 +5062,11 @@ public class PackageManagerService extends IPackageManager.Stub {
}
final void serviceError() {
- if (DEBUG_SD_INSTALL) Log.i(TAG, "serviceError");
+ if (DEBUG_INSTALL) Slog.i(TAG, "serviceError");
handleServiceError();
handleReturnCode();
}
+
abstract void handleStartCopy() throws RemoteException;
abstract void handleServiceError();
abstract void handleReturnCode();
@@ -4969,15 +5149,20 @@ public class PackageManagerService extends IPackageManager.Stub {
int flags;
final Uri packageURI;
final String installerPackageName;
+ final Uri verificationURI;
+ final ManifestDigest manifestDigest;
private InstallArgs mArgs;
private int mRet;
+
InstallParams(Uri packageURI,
IPackageInstallObserver observer, int flags,
- String installerPackageName) {
+ String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest) {
this.packageURI = packageURI;
this.flags = flags;
this.observer = observer;
this.installerPackageName = installerPackageName;
+ this.verificationURI = verificationURI;
+ this.manifestDigest = manifestDigest;
}
private int installLocationPolicy(PackageInfoLite pkgLite, int flags) {
@@ -5102,13 +5287,70 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
}
- // Create the file args now.
- mArgs = createInstallArgs(this);
+
+ final InstallArgs args = createInstallArgs(this);
if (ret == PackageManager.INSTALL_SUCCEEDED) {
- // Create copy only if we are not in an erroneous state.
- // Remote call to initiate copy using temporary file
- ret = mArgs.copyApk(mContainerService, true);
+ /*
+ * Determine if we have any installed package verifiers. If we
+ * do, then we'll defer to them to verify the packages.
+ */
+ final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION,
+ packageURI);
+ verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+
+ final List<ResolveInfo> receivers = queryIntentReceivers(verification, null,
+ PackageManager.GET_DISABLED_COMPONENTS);
+ if (isVerificationEnabled() && receivers.size() > 0) {
+ if (DEBUG_INSTALL) {
+ Slog.d(TAG, "Found " + receivers.size() + " verifiers for intent "
+ + verification.toString());
+ }
+
+ final int verificationId = mPendingVerificationToken++;
+
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_ID, verificationId);
+
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_INSTALLER_PACKAGE,
+ installerPackageName);
+
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_INSTALL_FLAGS, flags);
+
+ if (verificationURI != null) {
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_URI,
+ verificationURI);
+ }
+
+ mPendingVerification.append(verificationId, args);
+
+ /*
+ * Send the intent to the registered verification agents,
+ * but only start the verification timeout after the target
+ * BroadcastReceivers have run.
+ */
+ mContext.sendOrderedBroadcast(verification,
+ android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final Message msg = mHandler
+ .obtainMessage(CHECK_PENDING_VERIFICATION);
+ msg.arg1 = verificationId;
+ mHandler.sendMessageDelayed(msg, getVerificationTimeout());
+ }
+ },
+ null, 0, null, null);
+ } else {
+ // Create copy only if we are not in an erroneous state.
+ // Remote call to initiate copy using temporary file
+ mArgs = args;
+ ret = args.copyApk(mContainerService, true);
+ }
+ } else {
+ // There was an error, so let the processPendingInstall() break
+ // the bad news... uh, through a call in handleReturnCode()
+ mArgs = args;
}
+
mRet = ret;
}
@@ -5233,14 +5475,15 @@ public class PackageManagerService extends IPackageManager.Stub {
final int flags;
final Uri packageURI;
final String installerPackageName;
+ final ManifestDigest manifestDigest;
- InstallArgs(Uri packageURI,
- IPackageInstallObserver observer, int flags,
- String installerPackageName) {
+ InstallArgs(Uri packageURI, IPackageInstallObserver observer, int flags,
+ String installerPackageName, ManifestDigest manifestDigest) {
this.packageURI = packageURI;
this.flags = flags;
this.observer = observer;
this.installerPackageName = installerPackageName;
+ this.manifestDigest = manifestDigest;
}
abstract void createCopyFile();
@@ -5265,12 +5508,12 @@ public class PackageManagerService extends IPackageManager.Stub {
boolean created = false;
FileInstallArgs(InstallParams params) {
- super(params.packageURI, params.observer,
- params.flags, params.installerPackageName);
+ super(params.packageURI, params.observer, params.flags, params.installerPackageName,
+ params.manifestDigest);
}
FileInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath) {
- super(null, null, 0, null);
+ super(null, null, 0, null, null);
File codeFile = new File(fullCodePath);
installDir = codeFile.getParentFile();
codeFileName = fullCodePath;
@@ -5279,7 +5522,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
FileInstallArgs(Uri packageURI, String pkgName, String dataDir) {
- super(packageURI, null, 0, null);
+ super(packageURI, null, 0, null, null);
installDir = isFwdLocked() ? mDrmAppPrivateInstallDir : mAppInstallDir;
String apkName = getNextCodePath(null, pkgName, ".apk");
codeFileName = new File(installDir, apkName + ".apk").getPath();
@@ -5509,12 +5752,12 @@ public class PackageManagerService extends IPackageManager.Stub {
String libraryPath;
SdInstallArgs(InstallParams params) {
- super(params.packageURI, params.observer,
- params.flags, params.installerPackageName);
+ super(params.packageURI, params.observer, params.flags, params.installerPackageName,
+ params.manifestDigest);
}
SdInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath) {
- super(null, null, PackageManager.INSTALL_EXTERNAL, null);
+ super(null, null, PackageManager.INSTALL_EXTERNAL, null, null);
// Extract cid from fullCodePath
int eidx = fullCodePath.lastIndexOf("/");
String subStr1 = fullCodePath.substring(0, eidx);
@@ -5524,13 +5767,13 @@ public class PackageManagerService extends IPackageManager.Stub {
}
SdInstallArgs(String cid) {
- super(null, null, PackageManager.INSTALL_EXTERNAL, null);
+ super(null, null, PackageManager.INSTALL_EXTERNAL, null, null);
this.cid = cid;
setCachePath(PackageHelper.getSdDir(cid));
}
SdInstallArgs(Uri packageURI, String cid) {
- super(packageURI, null, PackageManager.INSTALL_EXTERNAL, null);
+ super(packageURI, null, PackageManager.INSTALL_EXTERNAL, null, null);
this.cid = cid;
}
@@ -6152,6 +6395,26 @@ public class PackageManagerService extends IPackageManager.Stub {
res.returnCode = pp.getParseError();
return;
}
+
+ /* If the installer passed in a manifest digest, compare it now. */
+ if (args.manifestDigest != null) {
+ if (DEBUG_INSTALL) {
+ final String parsedManifest = pkg.manifestDigest == null ? "null"
+ : pkg.manifestDigest.toString();
+ Slog.d(TAG, "Comparing manifests: " + args.manifestDigest.toString() + " vs. "
+ + parsedManifest);
+ }
+
+ if (!args.manifestDigest.equals(pkg.manifestDigest)) {
+ res.returnCode = PackageManager.INSTALL_FAILED_PACKAGE_CHANGED;
+ return;
+ }
+ } else if (DEBUG_INSTALL) {
+ final String parsedManifest = pkg.manifestDigest == null
+ ? "null" : pkg.manifestDigest.toString();
+ Slog.d(TAG, "manifestDigest was not present, but parser got: " + parsedManifest);
+ }
+
// Get rid of all references to package scan path via parser.
pp = null;
String oldCodePath = null;
diff --git a/services/java/com/android/server/pm/PackageSignatures.java b/services/java/com/android/server/pm/PackageSignatures.java
index a25ec6cee508..9a20be7c8d76 100644
--- a/services/java/com/android/server/pm/PackageSignatures.java
+++ b/services/java/com/android/server/pm/PackageSignatures.java
@@ -138,6 +138,12 @@ class PackageSignatures {
"Error in package manager settings: <cert> "
+ "index " + index + " is not a number at "
+ parser.getPositionDescription());
+ } catch (IllegalArgumentException e) {
+ PackageManagerService.reportSettingsProblem(Log.WARN,
+ "Error in package manager settings: <cert> "
+ + "index " + index + " has an invalid signature at "
+ + parser.getPositionDescription() + ": "
+ + e.getMessage());
}
} else {
PackageManagerService.reportSettingsProblem(Log.WARN,
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index 91c5e332304b..a01c9758bb58 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -253,13 +253,6 @@ public class UsbDeviceManager {
}
};
- private static final int NOTIFICATION_NONE = 0;
- private static final int NOTIFICATION_MTP = 1;
- private static final int NOTIFICATION_PTP = 2;
- private static final int NOTIFICATION_INSTALLER = 3;
- private static final int NOTIFICATION_ACCESSORY = 4;
- private static final int NOTIFICATION_ADB = 5;
-
public UsbHandler(Looper looper) {
super(looper);
try {
@@ -536,27 +529,18 @@ public class UsbDeviceManager {
private void updateUsbNotification() {
if (mNotificationManager == null || !mUseUsbNotification) return;
- int id = NOTIFICATION_NONE;
+ int id = 0;
Resources r = mContext.getResources();
- CharSequence title = null;
if (mConnected) {
if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_MTP)) {
- title = r.getText(
- com.android.internal.R.string.usb_mtp_notification_title);
- id = NOTIFICATION_MTP;
+ id = com.android.internal.R.string.usb_mtp_notification_title;
} else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_PTP)) {
- title = r.getText(
- com.android.internal.R.string.usb_ptp_notification_title);
- id = NOTIFICATION_PTP;
+ id = com.android.internal.R.string.usb_ptp_notification_title;
} else if (containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_MASS_STORAGE)) {
- title = r.getText(
- com.android.internal.R.string.usb_cd_installer_notification_title);
- id = NOTIFICATION_INSTALLER;
+ id = com.android.internal.R.string.usb_cd_installer_notification_title;
} else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_ACCESSORY)) {
- title = r.getText(
- com.android.internal.R.string.usb_accessory_notification_title);
- id = NOTIFICATION_ACCESSORY;
+ id = com.android.internal.R.string.usb_accessory_notification_title;
} else {
// There is a different notification for USB tethering so we don't need one here
if (!containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_RNDIS)) {
@@ -566,13 +550,14 @@ public class UsbDeviceManager {
}
if (id != mUsbNotificationId) {
// clear notification if title needs changing
- if (mUsbNotificationId != NOTIFICATION_NONE) {
+ if (mUsbNotificationId != 0) {
mNotificationManager.cancel(mUsbNotificationId);
- mUsbNotificationId = NOTIFICATION_NONE;
+ mUsbNotificationId = 0;
}
- if (id != NOTIFICATION_NONE) {
+ if (id != 0) {
CharSequence message = r.getText(
com.android.internal.R.string.usb_notification_message);
+ CharSequence title = r.getText(id);
Notification notification = new Notification();
notification.icon = com.android.internal.R.drawable.stat_sys_data_usb;
@@ -600,13 +585,13 @@ public class UsbDeviceManager {
private void updateAdbNotification() {
if (mNotificationManager == null) return;
+ final int id = com.android.internal.R.string.adb_active_notification_title;
if (mAdbEnabled && mConnected) {
if ("0".equals(SystemProperties.get("persist.adb.notify"))) return;
if (!mAdbNotificationShown) {
Resources r = mContext.getResources();
- CharSequence title = r.getText(
- com.android.internal.R.string.adb_active_notification_title);
+ CharSequence title = r.getText(id);
CharSequence message = r.getText(
com.android.internal.R.string.adb_active_notification_message);
@@ -629,11 +614,11 @@ public class UsbDeviceManager {
intent, 0);
notification.setLatestEventInfo(mContext, title, message, pi);
mAdbNotificationShown = true;
- mNotificationManager.notify(NOTIFICATION_ADB, notification);
+ mNotificationManager.notify(id, notification);
}
} else if (mAdbNotificationShown) {
mAdbNotificationShown = false;
- mNotificationManager.cancel(NOTIFICATION_ADB);
+ mNotificationManager.cancel(id);
}
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 5967428a33b6..dc5555ef808c 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -50,6 +50,7 @@ import com.android.server.am.BatteryStatsService;
import android.Manifest;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
+import android.app.ProgressDialog;
import android.app.StatusBarManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
@@ -407,6 +408,7 @@ public class WindowManagerService extends IWindowManager.Stub
boolean mSafeMode;
boolean mDisplayEnabled = false;
boolean mSystemBooted = false;
+ boolean mShowingBootMessages = false;
int mInitialDisplayWidth = 0;
int mInitialDisplayHeight = 0;
int mBaseDisplayWidth = 0;
@@ -4685,16 +4687,17 @@ public class WindowManagerService extends IWindowManager.Stub
return;
}
mSystemBooted = true;
+ hideBootMessagesLocked();
}
performEnableScreen();
}
- public void enableScreenIfNeededLocked() {
+ void enableScreenIfNeededLocked() {
if (mDisplayEnabled) {
return;
}
- if (!mSystemBooted) {
+ if (!mSystemBooted && !mShowingBootMessages) {
return;
}
mH.sendMessage(mH.obtainMessage(H.ENABLE_SCREEN));
@@ -4705,7 +4708,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (mDisplayEnabled) {
return;
}
- if (!mSystemBooted) {
+ if (!mSystemBooted && !mShowingBootMessages) {
return;
}
@@ -4749,6 +4752,33 @@ public class WindowManagerService extends IWindowManager.Stub
mLastRotationFlags | Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
}
+ public void showBootMessage(final CharSequence msg, final boolean always) {
+ boolean first = false;
+ synchronized(mWindowMap) {
+ if (!mShowingBootMessages) {
+ if (!always) {
+ return;
+ }
+ first = true;
+ }
+ if (mSystemBooted) {
+ return;
+ }
+ mShowingBootMessages = true;
+ mPolicy.showBootMessage(msg, always);
+ }
+ if (first) {
+ performEnableScreen();
+ }
+ }
+
+ public void hideBootMessagesLocked() {
+ if (mShowingBootMessages) {
+ mShowingBootMessages = false;
+ mPolicy.hideBootMessages();
+ }
+ }
+
public void setInTouchMode(boolean mode) {
synchronized(mWindowMap) {
mInTouchMode = mode;
@@ -6136,7 +6166,7 @@ public class WindowManagerService extends IWindowManager.Stub
return mSafeMode;
}
- public void systemReady() {
+ public void displayReady() {
synchronized(mWindowMap) {
if (mDisplay != null) {
throw new IllegalStateException("Display already initialized");
@@ -6165,14 +6195,16 @@ public class WindowManagerService extends IWindowManager.Stub
mActivityManager.updateConfiguration(null);
} catch (RemoteException e) {
}
-
- mPolicy.systemReady();
-
+
synchronized (mWindowMap) {
readForcedDisplaySizeLocked();
}
}
+ public void systemReady() {
+ mPolicy.systemReady();
+ }
+
// This is an animation that does nothing: it just immediately finishes
// itself every time it is called. It is used as a stub animation in cases
// where we want to synchronize multiple things that may be animating.
@@ -6573,8 +6605,10 @@ public class WindowManagerService extends IWindowManager.Stub
}
synchronized (mWindowMap) {
// !!! TODO: ANR the drag-receiving app
- mDragState.mDragResult = false;
- mDragState.endDragLw();
+ if (mDragState != null) {
+ mDragState.mDragResult = false;
+ mDragState.endDragLw();
+ }
}
break;
}
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp
index 7c84e4355b04..f2a0a71725d1 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -182,8 +182,6 @@ public:
/* --- InputReaderPolicyInterface implementation --- */
- virtual bool getDisplayInfo(int32_t displayId, bool external,
- int32_t* width, int32_t* height, int32_t* orientation);
virtual void getReaderConfiguration(InputReaderConfiguration* outConfig);
virtual sp<PointerControllerInterface> obtainPointerController(int32_t deviceId);
@@ -273,7 +271,7 @@ NativeInputManager::NativeInputManager(jobject contextObj,
mLocked.displayHeight = -1;
mLocked.displayExternalWidth = -1;
mLocked.displayExternalHeight = -1;
- mLocked.displayOrientation = ROTATION_0;
+ mLocked.displayOrientation = DISPLAY_ORIENTATION_0;
mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE;
mLocked.pointerSpeed = 0;
@@ -311,31 +309,42 @@ bool NativeInputManager::checkAndClearExceptionFromCallback(JNIEnv* env, const c
void NativeInputManager::setDisplaySize(int32_t displayId, int32_t width, int32_t height,
int32_t externalWidth, int32_t externalHeight) {
+ bool changed = false;
if (displayId == 0) {
- { // acquire lock
- AutoMutex _l(mLock);
+ AutoMutex _l(mLock);
- if (mLocked.displayWidth != width || mLocked.displayHeight != height) {
- mLocked.displayWidth = width;
- mLocked.displayHeight = height;
+ if (mLocked.displayWidth != width || mLocked.displayHeight != height) {
+ changed = true;
+ mLocked.displayWidth = width;
+ mLocked.displayHeight = height;
- sp<PointerController> controller = mLocked.pointerController.promote();
- if (controller != NULL) {
- controller->setDisplaySize(width, height);
- }
+ sp<PointerController> controller = mLocked.pointerController.promote();
+ if (controller != NULL) {
+ controller->setDisplaySize(width, height);
}
+ }
+ if (mLocked.displayExternalWidth != externalWidth
+ || mLocked.displayExternalHeight != externalHeight) {
+ changed = true;
mLocked.displayExternalWidth = externalWidth;
mLocked.displayExternalHeight = externalHeight;
- } // release lock
+ }
+ }
+
+ if (changed) {
+ mInputManager->getReader()->requestRefreshConfiguration(
+ InputReaderConfiguration::CHANGE_DISPLAY_INFO);
}
}
void NativeInputManager::setDisplayOrientation(int32_t displayId, int32_t orientation) {
+ bool changed = false;
if (displayId == 0) {
AutoMutex _l(mLock);
if (mLocked.displayOrientation != orientation) {
+ changed = true;
mLocked.displayOrientation = orientation;
sp<PointerController> controller = mLocked.pointerController.promote();
@@ -344,6 +353,11 @@ void NativeInputManager::setDisplayOrientation(int32_t displayId, int32_t orient
}
}
}
+
+ if (changed) {
+ mInputManager->getReader()->requestRefreshConfiguration(
+ InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ }
}
status_t NativeInputManager::registerInputChannel(JNIEnv* env,
@@ -358,28 +372,6 @@ status_t NativeInputManager::unregisterInputChannel(JNIEnv* env,
return mInputManager->getDispatcher()->unregisterInputChannel(inputChannel);
}
-bool NativeInputManager::getDisplayInfo(int32_t displayId, bool external,
- int32_t* width, int32_t* height, int32_t* orientation) {
- bool result = false;
- if (displayId == 0) {
- AutoMutex _l(mLock);
-
- if (mLocked.displayWidth > 0 && mLocked.displayHeight > 0) {
- if (width) {
- *width = external ? mLocked.displayExternalWidth : mLocked.displayWidth;
- }
- if (height) {
- *height = external ? mLocked.displayExternalHeight : mLocked.displayHeight;
- }
- if (orientation) {
- *orientation = mLocked.displayOrientation;
- }
- result = true;
- }
- }
- return result;
-}
-
void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outConfig) {
JNIEnv* env = jniEnv();
@@ -438,6 +430,12 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
outConfig->pointerVelocityControlParameters.scale = exp2f(mLocked.pointerSpeed
* POINTER_SPEED_EXPONENT);
outConfig->pointerGesturesEnabled = mLocked.pointerGesturesEnabled;
+
+ outConfig->setDisplayInfo(0, false /*external*/,
+ mLocked.displayWidth, mLocked.displayHeight, mLocked.displayOrientation);
+ outConfig->setDisplayInfo(0, true /*external*/,
+ mLocked.displayExternalWidth, mLocked.displayExternalHeight,
+ mLocked.displayOrientation);
} // release lock
}
diff --git a/services/sensorservice/Fusion.cpp b/services/sensorservice/Fusion.cpp
index d706af598320..ff4786bf02b2 100644
--- a/services/sensorservice/Fusion.cpp
+++ b/services/sensorservice/Fusion.cpp
@@ -48,6 +48,7 @@ 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;
// -----------------------------------------------------------------------
@@ -134,10 +135,13 @@ Fusion::Fusion() {
void Fusion::init() {
mInitState = 0;
+
mGyroRate = 0;
+
mCount[0] = 0;
mCount[1] = 0;
mCount[2] = 0;
+
mData = 0;
}
@@ -267,19 +271,16 @@ status_t Fusion::handleMag(const vec3_t& m) {
return NO_ERROR;
}
-bool Fusion::checkState(const vec3_t& v) {
- if (isnanf(length(v))) {
- LOGW("9-axis fusion diverged. reseting state.");
+void Fusion::checkState() {
+ // P needs to stay positive semidefinite or the fusion diverges. When we
+ // detect divergence, we reset the fusion.
+ // TODO(braun): Instead, find the reason for the divergence and fix it.
+
+ if (!isPositiveSemidefinite(P[0][0], SYMMETRY_TOLERANCE) ||
+ !isPositiveSemidefinite(P[1][1], SYMMETRY_TOLERANCE)) {
+ LOGW("Sensor fusion diverged; resetting state.");
P = 0;
- x1 = 0;
- mInitState = 0;
- mCount[0] = 0;
- mCount[1] = 0;
- mCount[2] = 0;
- mData = 0;
- return false;
}
- return true;
}
vec4_t Fusion::getAttitude() const {
@@ -327,6 +328,8 @@ void Fusion::predict(const vec3_t& w, float dT) {
Phi[1][0] = wx*k0 - I33dT - wx2*(ilwe*ilwe*ilwe)*(lwedT-k1);
P = Phi*P*transpose(Phi) + GQGt;
+
+ checkState();
}
void Fusion::update(const vec3_t& z, const vec3_t& Bi, float sigma) {
@@ -365,6 +368,8 @@ void Fusion::update(const vec3_t& z, const vec3_t& Bi, float sigma) {
q += getF(q)*(0.5f*dq);
x0 = normalize_quat(q);
x1 += db;
+
+ checkState();
}
// -----------------------------------------------------------------------
diff --git a/services/sensorservice/Fusion.h b/services/sensorservice/Fusion.h
index 556944bbed05..7062999b75f8 100644
--- a/services/sensorservice/Fusion.h
+++ b/services/sensorservice/Fusion.h
@@ -37,7 +37,7 @@ class Fusion {
vec3_t x1;
/*
- * the predicated covariance matrix is made of 4 3x3 sub-matrices and it
+ * the predicated covariance matrix is made of 4 3x3 sub-matrices and it is
* semi-definite positive.
*
* P = | P00 P10 | = | P00 P10 |
@@ -74,7 +74,7 @@ private:
enum { ACC=0x1, MAG=0x2, GYRO=0x4 };
bool checkInitComplete(int, const vec3_t& w, float d = 0);
void initFusion(const vec4_t& q0, float dT);
- bool checkState(const vec3_t& v);
+ void checkState();
void predict(const vec3_t& w, float dT);
void update(const vec3_t& z, const vec3_t& Bi, float sigma);
static mat34_t getF(const vec4_t& p);
diff --git a/services/sensorservice/mat.h b/services/sensorservice/mat.h
index 1302ca327a36..a76fc91cb074 100644
--- a/services/sensorservice/mat.h
+++ b/services/sensorservice/mat.h
@@ -295,6 +295,29 @@ mat<TYPE, R, C> PURE transpose(const mat<TYPE, C, R>& m) {
return r;
}
+// Calculate the trace of a matrix
+template <typename TYPE, size_t C> static TYPE trace(const mat<TYPE, C, C>& m) {
+ TYPE t;
+ for (size_t i=0 ; i<C ; i++)
+ t += m[i][i];
+ return t;
+}
+
+// Test positive-semidefiniteness of a matrix
+template <typename TYPE, size_t C>
+static bool isPositiveSemidefinite(const mat<TYPE, C, C>& m, TYPE tolerance) {
+ for (size_t i=0 ; i<C ; i++)
+ if (m[i][i] < 0)
+ return false;
+
+ for (size_t i=0 ; i<C ; i++)
+ for (size_t j=i+1 ; j<C ; j++)
+ if (fabs(m[i][j] - m[j][i]) > tolerance)
+ return false;
+
+ return true;
+}
+
// Transpose a vector
template <
template<typename T, size_t S> class VEC,
diff --git a/services/sensorservice/tests/sensorservicetest.cpp b/services/sensorservice/tests/sensorservicetest.cpp
index aea106224bda..54bce091f66f 100644
--- a/services/sensorservice/tests/sensorservicetest.cpp
+++ b/services/sensorservice/tests/sensorservicetest.cpp
@@ -22,6 +22,9 @@
using namespace android;
+static nsecs_t sStartTime = 0;
+
+
int receiver(int fd, int events, void* data)
{
sp<SensorEventQueue> q((SensorEventQueue*)data);
@@ -32,7 +35,7 @@ int receiver(int fd, int events, void* data)
while ((n = q->read(buffer, 8)) > 0) {
for (int i=0 ; i<n ; i++) {
- if (buffer[i].type == Sensor::TYPE_GYROSCOPE) {
+ if (buffer[i].type == Sensor::TYPE_ACCELEROMETER) {
printf("time=%lld, value=<%5.1f,%5.1f,%5.1f>\n",
buffer[i].timestamp,
buffer[i].acceleration.x,
@@ -43,9 +46,11 @@ int receiver(int fd, int events, void* data)
if (oldTimeStamp) {
float t = float(buffer[i].timestamp - oldTimeStamp) / s2ns(1);
printf("%f ms (%f Hz)\n", t*1000, 1.0/t);
+ } else {
+ float t = float(buffer[i].timestamp - sStartTime) / s2ns(1);
+ printf("first event: %f ms\n", t*1000);
}
oldTimeStamp = buffer[i].timestamp;
-
}
}
if (n<0 && n != -EAGAIN) {
@@ -66,12 +71,15 @@ int main(int argc, char** argv)
sp<SensorEventQueue> q = mgr.createEventQueue();
printf("queue=%p\n", q.get());
- Sensor const* accelerometer = mgr.getDefaultSensor(Sensor::TYPE_GYROSCOPE);
+ Sensor const* accelerometer = mgr.getDefaultSensor(Sensor::TYPE_ACCELEROMETER);
printf("accelerometer=%p (%s)\n",
accelerometer, accelerometer->getName().string());
+
+ sStartTime = systemTime();
+
q->enableSensor(accelerometer);
- q->setEventRate(accelerometer, ms2ns(10));
+ q->setEventRate(accelerometer, ms2ns(200));
sp<Looper> loop = new Looper(false);
loop->addFd(q->getFd(), 0, ALOOPER_EVENT_INPUT, receiver, q.get());
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index b178e4979b2c..51eb0a376d06 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \
Layer.cpp \
LayerBase.cpp \
LayerDim.cpp \
+ DdmConnection.cpp \
DisplayHardware/DisplayHardware.cpp \
DisplayHardware/DisplayHardwareBase.cpp \
DisplayHardware/HWComposer.cpp \
@@ -36,6 +37,9 @@ LOCAL_SHARED_LIBRARIES := \
libui \
libgui
+# this is only needed for DDMS debugging
+LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime
+
LOCAL_C_INCLUDES := \
$(call include-path-for, corecg graphics)
diff --git a/services/surfaceflinger/DdmConnection.cpp b/services/surfaceflinger/DdmConnection.cpp
new file mode 100644
index 000000000000..467a915ed8b9
--- /dev/null
+++ b/services/surfaceflinger/DdmConnection.cpp
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ */
+
+#include <android_runtime/AndroidRuntime.h>
+
+#include "jni.h"
+#include "DdmConnection.h"
+
+extern "C" jint Java_com_android_internal_util_WithFramework_registerNatives(
+ JNIEnv* env, jclass clazz);
+
+namespace android {
+
+void DdmConnection::start(const char* name) {
+ JavaVM* vm;
+ JNIEnv* env;
+
+ // start a VM
+ JavaVMInitArgs args;
+ JavaVMOption opt;
+
+ opt.optionString =
+ "-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y";
+
+ args.version = JNI_VERSION_1_4;
+ args.options = &opt;
+ args.nOptions = 1;
+ args.ignoreUnrecognized = JNI_FALSE;
+
+ if (JNI_CreateJavaVM(&vm, &env, &args) == 0) {
+ jclass startClass;
+ jmethodID startMeth;
+
+ // register native code
+ if (Java_com_android_internal_util_WithFramework_registerNatives(env, 0) == 0) {
+ // set our name by calling DdmHandleAppName.setAppName()
+ startClass = env->FindClass("android/ddm/DdmHandleAppName");
+ if (startClass) {
+ startMeth = env->GetStaticMethodID(startClass,
+ "setAppName", "(Ljava/lang/String;)V");
+ if (startMeth) {
+ jstring str = env->NewStringUTF(name);
+ env->CallStaticVoidMethod(startClass, startMeth, str);
+ env->DeleteLocalRef(str);
+ }
+ }
+
+ // initialize DDMS communication by calling
+ // DdmRegister.registerHandlers()
+ startClass = env->FindClass("android/ddm/DdmRegister");
+ if (startClass) {
+ startMeth = env->GetStaticMethodID(startClass,
+ "registerHandlers", "()V");
+ if (startMeth) {
+ env->CallStaticVoidMethod(startClass, startMeth);
+ }
+ }
+ }
+ }
+}
+
+}; // namespace android
diff --git a/services/surfaceflinger/DdmConnection.h b/services/surfaceflinger/DdmConnection.h
new file mode 100644
index 000000000000..91b737c92591
--- /dev/null
+++ b/services/surfaceflinger/DdmConnection.h
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+#ifndef ANDROID_SF_DDM_CONNECTION
+#define ANDROID_SF_DDM_CONNECTION
+
+namespace android {
+
+class DdmConnection {
+public:
+ static void start(const char* name);
+};
+
+}; // namespace android
+
+#endif /* ANDROID_SF_DDM_CONNECTION */
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 0425fc3ba525..19c7ddd4fbab 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -133,6 +133,11 @@ sp<ISurface> Layer::createSurface()
return sur;
}
+wp<IBinder> Layer::getSurfaceTextureBinder() const
+{
+ return mSurfaceTexture->asBinder();
+}
+
status_t Layer::setBuffers( uint32_t w, uint32_t h,
PixelFormat format, uint32_t flags)
{
@@ -191,13 +196,12 @@ void Layer::setGeometry(hwc_layer_t* hwcl)
* 1) buffer orientation/flip/mirror
* 2) state transformation (window manager)
* 3) layer orientation (screen orientation)
- * mOrientation is already the composition of (2) and (3)
+ * mTransform is already the composition of (2) and (3)
* (NOTE: the matrices are multiplied in reverse order)
*/
const Transform bufferOrientation(mCurrentTransform);
- const Transform layerOrientation(mOrientation);
- const Transform tr(layerOrientation * bufferOrientation);
+ const Transform tr(mTransform * bufferOrientation);
// this gives us only the "orientation" component of the transform
const uint32_t finalTransform = tr.getOrientation();
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index d3ddab4f22a0..5f0be8074a1a 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -74,6 +74,9 @@ public:
virtual bool isProtected() const;
virtual void onRemoved();
+ // LayerBaseClient interface
+ virtual wp<IBinder> getSurfaceTextureBinder() const;
+
// only for debugging
inline const sp<FreezeLock>& getFreezeLock() const { return mFreezeLock; }
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp
index e04c533efc3b..4cc245a11076 100644
--- a/services/surfaceflinger/LayerBase.cpp
+++ b/services/surfaceflinger/LayerBase.cpp
@@ -257,6 +257,7 @@ void LayerBase::validateVisibility(const Transform& planeTransform)
// cache a few things...
mOrientation = tr.getOrientation();
+ mTransform = tr;
mTransformedBounds = tr.makeBounds(w, h);
mLeft = tr.tx();
mTop = tr.ty();
@@ -544,6 +545,10 @@ wp<IBinder> LayerBaseClient::getSurfaceBinder() const {
return mClientSurfaceBinder;
}
+wp<IBinder> LayerBaseClient::getSurfaceTextureBinder() const {
+ return 0;
+}
+
void LayerBaseClient::dump(String8& result, char* buffer, size_t SIZE) const
{
LayerBase::dump(result, buffer, SIZE);
diff --git a/services/surfaceflinger/LayerBase.h b/services/surfaceflinger/LayerBase.h
index faf71ddbe0dd..2cd3a9435e91 100644
--- a/services/surfaceflinger/LayerBase.h
+++ b/services/surfaceflinger/LayerBase.h
@@ -247,6 +247,7 @@ private:
protected:
// cached during validateVisibility()
int32_t mOrientation;
+ Transform mTransform;
GLfloat mVertices[4][2];
Rect mTransformedBounds;
int mLeft;
@@ -288,6 +289,7 @@ public:
sp<ISurface> getSurface();
wp<IBinder> getSurfaceBinder() const;
+ virtual wp<IBinder> getSurfaceTextureBinder() const;
virtual sp<LayerBaseClient> getLayerBaseClient() const {
return const_cast<LayerBaseClient*>(this); }
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 082effe699f7..50afb3d8bd6e 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -47,6 +47,7 @@
#include "clz.h"
#include "GLExtensions.h"
+#include "DdmConnection.h"
#include "Layer.h"
#include "LayerDim.h"
#include "SurfaceFlinger.h"
@@ -90,6 +91,7 @@ SurfaceFlinger::SurfaceFlinger()
mFreezeDisplayTime(0),
mDebugRegion(0),
mDebugBackground(0),
+ mDebugDDMS(0),
mDebugDisableHWC(0),
mDebugInSwapBuffers(0),
mLastSwapBufferTime(0),
@@ -108,13 +110,22 @@ void SurfaceFlinger::init()
// debugging stuff...
char value[PROPERTY_VALUE_MAX];
+
property_get("debug.sf.showupdates", value, "0");
mDebugRegion = atoi(value);
+
property_get("debug.sf.showbackground", value, "0");
mDebugBackground = atoi(value);
+ property_get("debug.sf.ddms", value, "0");
+ mDebugDDMS = atoi(value);
+ if (mDebugDDMS) {
+ DdmConnection::start(getServiceName());
+ }
+
LOGI_IF(mDebugRegion, "showupdates enabled");
LOGI_IF(mDebugBackground, "showbackground enabled");
+ LOGI_IF(mDebugDDMS, "DDMS debugging enabled");
}
SurfaceFlinger::~SurfaceFlinger()
@@ -342,9 +353,10 @@ void SurfaceFlinger::signalEvent() {
mEventQueue.invalidate();
}
-bool SurfaceFlinger::authenticateSurface(const sp<ISurface>& surface) const {
+bool SurfaceFlinger::authenticateSurfaceTexture(
+ const sp<ISurfaceTexture>& surfaceTexture) const {
Mutex::Autolock _l(mStateLock);
- sp<IBinder> surfBinder(surface->asBinder());
+ sp<IBinder> surfaceTextureBinder(surfaceTexture->asBinder());
// Check the visible layer list for the ISurface
const LayerVector& currentLayers = mCurrentState.layersSortedByZ;
@@ -352,14 +364,17 @@ bool SurfaceFlinger::authenticateSurface(const sp<ISurface>& surface) const {
for (size_t i=0 ; i<count ; i++) {
const sp<LayerBase>& layer(currentLayers[i]);
sp<LayerBaseClient> lbc(layer->getLayerBaseClient());
- if (lbc != NULL && lbc->getSurfaceBinder() == surfBinder) {
- return true;
+ if (lbc != NULL) {
+ wp<IBinder> lbcBinder = lbc->getSurfaceTextureBinder();
+ if (lbcBinder == surfaceTextureBinder) {
+ return true;
+ }
}
}
// Check the layers in the purgatory. This check is here so that if a
- // Surface gets destroyed before all the clients are done using it, the
- // error will not be reported as "surface XYZ is not authenticated", but
+ // SurfaceTexture gets destroyed before all the clients are done using it,
+ // the error will not be reported as "surface XYZ is not authenticated", but
// will instead fail later on when the client tries to use the surface,
// which should be reported as "surface XYZ returned an -ENODEV". The
// purgatorized layers are no less authentic than the visible ones, so this
@@ -368,8 +383,11 @@ bool SurfaceFlinger::authenticateSurface(const sp<ISurface>& surface) const {
for (size_t i=0 ; i<purgatorySize ; i++) {
const sp<LayerBase>& layer(mLayerPurgatory.itemAt(i));
sp<LayerBaseClient> lbc(layer->getLayerBaseClient());
- if (lbc != NULL && lbc->getSurfaceBinder() == surfBinder) {
- return true;
+ if (lbc != NULL) {
+ wp<IBinder> lbcBinder = lbc->getSurfaceTextureBinder();
+ if (lbcBinder == surfaceTextureBinder) {
+ return true;
+ }
}
}
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 6f93f5ba0ae5..1738238abea4 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -171,7 +171,7 @@ public:
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
- virtual bool authenticateSurface(const sp<ISurface>& surface) const;
+ virtual bool authenticateSurfaceTexture(const sp<ISurfaceTexture>& surface) const;
virtual status_t captureScreen(DisplayID dpy,
sp<IMemoryHeap>* heap,
@@ -371,6 +371,7 @@ private:
// don't use a lock for these, we don't care
int mDebugRegion;
int mDebugBackground;
+ int mDebugDDMS;
int mDebugDisableHWC;
volatile nsecs_t mDebugInSwapBuffers;
nsecs_t mLastSwapBufferTime;
diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set b/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set
new file mode 100644
index 000000000000..3678b101529c
--- /dev/null
+++ b/services/tests/servicestests/res/raw/xt_qtaguid_typical_with_set
@@ -0,0 +1,13 @@
+idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_packets rx_tcp_bytes rx_udp_packets rx_udp_bytes rx_other_packets rx_other_bytes tx_tcp_packets tx_tcp_bytes tx_udp_packets tx_udp_bytes tx_other_packets tx_other_bytes
+1 rmnet0 0x0 0 0 14855 82 2804 47 2000 45 12799 35 56 2 676 13 2128 34 0 0
+1 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 rmnet0 0x0 1000 0 278102 253 10487 182 277342 243 760 10 0 0 9727 172 760 10 0 0
+2 rmnet0 0x0 1000 1 26033 30 1401 26 25881 28 152 2 0 0 1249 24 152 2 0 0
+3 rmnet0 0x0 10012 0 40524 272 134138 293 40524 272 0 0 0 0 134138 293 0 0 0 0
+3 rmnet0 0x0 10012 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 rmnet0 0x0 10034 0 15791 59 9905 69 15791 59 0 0 0 0 9905 69 0 0 0 0
+4 rmnet0 0x0 10034 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+5 rmnet0 0x0 10055 0 3602 29 7739 59 3602 29 0 0 0 0 7739 59 0 0 0 0
+5 rmnet0 0x0 10055 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+6 rmnet0 0x7fff000300000000 1000 0 483 4 1931 6 483 4 0 0 0 0 1931 6 0 0 0 0
+6 rmnet0 0x7fff000300000000 1000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java b/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java
index fe8879321265..f14569c5c7f7 100644
--- a/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java
+++ b/services/tests/servicestests/src/com/android/server/BroadcastInterceptingContext.java
@@ -28,7 +28,10 @@ import com.google.common.util.concurrent.AbstractFuture;
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* {@link ContextWrapper} that can attach listeners for upcoming
@@ -62,6 +65,15 @@ public class BroadcastInterceptingContext extends ContextWrapper {
return false;
}
}
+
+ @Override
+ public Intent get() throws InterruptedException, ExecutionException {
+ try {
+ return get(5, TimeUnit.SECONDS);
+ } catch (TimeoutException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
public BroadcastInterceptingContext(Context base) {
@@ -126,6 +138,11 @@ public class BroadcastInterceptingContext extends ContextWrapper {
}
@Override
+ public void sendBroadcast(Intent intent, String receiverPermission) {
+ sendBroadcast(intent);
+ }
+
+ @Override
public void removeStickyBroadcast(Intent intent) {
// ignored
}
diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
index f628977908bc..5f3569783e69 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
@@ -16,6 +16,8 @@
package com.android.server;
+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 static com.android.server.NetworkManagementSocketTagger.kernelToTag;
@@ -27,7 +29,6 @@ import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import com.android.frameworks.servicestests.R;
-import com.google.common.io.Files;
import java.io.File;
import java.io.FileOutputStream;
@@ -74,11 +75,11 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
final NetworkStats stats = mService.getNetworkStatsDetail();
assertEquals(31, stats.size());
- assertStatsEntry(stats, "wlan0", 0, 0, 14615L, 4270L);
- assertStatsEntry(stats, "wlan0", 10004, 0, 333821L, 53558L);
- assertStatsEntry(stats, "wlan0", 10004, 1947740890, 18725L, 1066L);
- assertStatsEntry(stats, "rmnet0", 10037, 0, 31184994L, 684122L);
- assertStatsEntry(stats, "rmnet0", 10037, 1947740890, 28507378L, 437004L);
+ assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0, 14615L, 4270L);
+ assertStatsEntry(stats, "wlan0", 10004, SET_DEFAULT, 0, 333821L, 53558L);
+ assertStatsEntry(stats, "wlan0", 10004, SET_DEFAULT, 1947740890, 18725L, 1066L);
+ assertStatsEntry(stats, "rmnet0", 10037, SET_DEFAULT, 0, 31184994L, 684122L);
+ assertStatsEntry(stats, "rmnet0", 10037, SET_DEFAULT, 1947740890, 28507378L, 437004L);
}
public void testNetworkStatsDetailExtended() throws Exception {
@@ -86,8 +87,8 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
final NetworkStats stats = mService.getNetworkStatsDetail();
assertEquals(2, stats.size());
- assertStatsEntry(stats, "test0", 1000, 0, 1024L, 2048L);
- assertStatsEntry(stats, "test0", 1000, 0xF00D, 512L, 512L);
+ assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0, 1024L, 2048L);
+ assertStatsEntry(stats, "test0", 1000, SET_DEFAULT, 0xF00D, 512L, 512L);
}
public void testNetworkStatsSummary() throws Exception {
@@ -95,12 +96,12 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
final NetworkStats stats = mService.getNetworkStatsSummary();
assertEquals(6, stats.size());
- assertStatsEntry(stats, "lo", UID_ALL, TAG_NONE, 8308L, 8308L);
- assertStatsEntry(stats, "rmnet0", UID_ALL, TAG_NONE, 1507570L, 489339L);
- assertStatsEntry(stats, "ifb0", UID_ALL, TAG_NONE, 52454L, 0L);
- assertStatsEntry(stats, "ifb1", UID_ALL, TAG_NONE, 52454L, 0L);
- assertStatsEntry(stats, "sit0", UID_ALL, TAG_NONE, 0L, 0L);
- assertStatsEntry(stats, "ip6tnl0", UID_ALL, TAG_NONE, 0L, 0L);
+ assertStatsEntry(stats, "lo", UID_ALL, SET_DEFAULT, TAG_NONE, 8308L, 8308L);
+ assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L);
+ assertStatsEntry(stats, "ifb0", UID_ALL, SET_DEFAULT, TAG_NONE, 52454L, 0L);
+ assertStatsEntry(stats, "ifb1", UID_ALL, SET_DEFAULT, TAG_NONE, 52454L, 0L);
+ assertStatsEntry(stats, "sit0", UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L);
+ assertStatsEntry(stats, "ip6tnl0", UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L);
}
public void testNetworkStatsSummaryDown() throws Exception {
@@ -112,8 +113,8 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
final NetworkStats stats = mService.getNetworkStatsSummary();
assertEquals(7, stats.size());
- assertStatsEntry(stats, "rmnet0", UID_ALL, TAG_NONE, 1507570L, 489339L);
- assertStatsEntry(stats, "wlan0", UID_ALL, TAG_NONE, 1024L, 2048L);
+ assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 1507570L, 489339L);
+ assertStatsEntry(stats, "wlan0", UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 2048L);
}
public void testKernelTags() throws Exception {
@@ -130,6 +131,15 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000"));
}
+ public void testNetworkStatsWithSet() throws Exception {
+ stageFile(R.raw.xt_qtaguid_typical_with_set, new File(mTestProc, "net/xt_qtaguid/stats"));
+
+ final NetworkStats stats = mService.getNetworkStatsDetail();
+ assertEquals(12, stats.size());
+ assertStatsEntry(stats, "rmnet0", 1000, SET_DEFAULT, 0, 278102L, 253L, 10487L, 182L);
+ assertStatsEntry(stats, "rmnet0", 1000, SET_FOREGROUND, 0, 26033L, 30L, 1401L, 26L);
+ }
+
/**
* Copy a {@link Resources#openRawResource(int)} into {@link File} for
* testing purposes.
@@ -159,12 +169,22 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
}
}
- private static void assertStatsEntry(
- NetworkStats stats, String iface, int uid, int tag, long rxBytes, long txBytes) {
- final int i = stats.findIndex(iface, uid, tag);
+ private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
+ int tag, long rxBytes, long txBytes) {
+ final int i = stats.findIndex(iface, uid, set, tag);
+ final NetworkStats.Entry entry = stats.getValues(i, null);
+ assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
+ assertEquals("unexpected txBytes", txBytes, entry.txBytes);
+ }
+
+ private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
+ int tag, long rxBytes, long rxPackets, long txBytes, long txPackets) {
+ final int i = stats.findIndex(iface, uid, set, tag);
final NetworkStats.Entry entry = stats.getValues(i, null);
- assertEquals(rxBytes, entry.rxBytes);
- assertEquals(txBytes, entry.txBytes);
+ assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
+ assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
+ assertEquals("unexpected txBytes", txBytes, entry.txBytes);
+ assertEquals("unexpected txPackets", txPackets, entry.txPackets);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index 09f8ff39c97e..845aa3f2bb01 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -29,8 +29,6 @@ import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL;
import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
import static android.net.NetworkPolicyManager.computeLastCycleBoundary;
import static android.net.NetworkPolicyManager.computeNextCycleBoundary;
-import static android.net.NetworkStats.TAG_NONE;
-import static android.net.NetworkStats.UID_ALL;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT;
@@ -282,6 +280,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
Future<Void> future;
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true);
@@ -290,6 +289,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// push strict policy for foreground uid, verify ALLOW rule
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND);
@@ -299,6 +299,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// now turn screen off and verify REJECT rule
expect(mPowerManager.isScreenOn()).andReturn(false).atLeastOnce();
expectSetUidNetworkRules(UID_A, true);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
replay();
mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_OFF));
@@ -308,6 +309,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// and turn screen back on, verify ALLOW rule restored
expect(mPowerManager.isScreenOn()).andReturn(true).atLeastOnce();
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_ON));
@@ -319,6 +321,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
Future<Void> future;
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true);
@@ -327,6 +330,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_NONE should RULE_ALLOW in foreground
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mService.setUidPolicy(UID_A, POLICY_NONE);
@@ -335,6 +339,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_NONE should RULE_ALLOW in background
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false);
@@ -347,6 +352,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_REJECT should RULE_ALLOW in background
expectSetUidNetworkRules(UID_A, true);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
replay();
mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND);
@@ -355,6 +361,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_REJECT should RULE_ALLOW in foreground
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, true);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true);
@@ -363,6 +370,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_REJECT should RULE_REJECT in background
expectSetUidNetworkRules(UID_A, true);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false);
@@ -375,6 +383,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_NONE should have RULE_ALLOW in background
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false);
@@ -384,6 +393,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// adding POLICY_REJECT should cause RULE_REJECT
expectSetUidNetworkRules(UID_A, true);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
replay();
mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND);
@@ -392,6 +402,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// removing POLICY_REJECT should return us to RULE_ALLOW
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
mService.setUidPolicy(UID_A, POLICY_NONE);
@@ -503,7 +514,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// pretend that 512 bytes total have happened
stats = new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 256L, 2L, 256L, 2L, 11);
+ .addIfaceValues(TEST_IFACE, 256L, 2L, 256L, 2L);
expect(mStatsService.getSummaryForNetwork(sTemplateWifi, TIME_FEB_15, TIME_MAR_10))
.andReturn(stats).atLeastOnce();
@@ -527,6 +538,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// POLICY_REJECT should RULE_REJECT in background
expectSetUidNetworkRules(UID_A, true);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
replay();
mService.setUidPolicy(UID_A, POLICY_REJECT_METERED_BACKGROUND);
@@ -535,6 +547,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// uninstall should clear RULE_REJECT
expectSetUidNetworkRules(UID_A, false);
+ expectSetUidForeground(UID_A, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
replay();
final Intent intent = new Intent(ACTION_UID_REMOVED);
@@ -579,7 +592,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
elapsedRealtime += MINUTE_IN_MILLIS;
currentTime = TIME_MAR_10 + elapsedRealtime;
stats = new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 0L, 0L, 0L, 0L, 0);
+ .addIfaceValues(TEST_IFACE, 0L, 0L, 0L, 0L);
state = new NetworkState[] { buildWifi() };
{
@@ -606,7 +619,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
elapsedRealtime += MINUTE_IN_MILLIS;
currentTime = TIME_MAR_10 + elapsedRealtime;
stats = new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1536L, 15L, 0L, 0L, 11);
+ .addIfaceValues(TEST_IFACE, 1536L, 15L, 0L, 0L);
{
expectTime(currentTime);
@@ -627,7 +640,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
elapsedRealtime += MINUTE_IN_MILLIS;
currentTime = TIME_MAR_10 + elapsedRealtime;
stats = new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 5120L, 512L, 0L, 0L, 22);
+ .addIfaceValues(TEST_IFACE, 5120L, 512L, 0L, 0L);
{
expectTime(currentTime);
@@ -738,6 +751,11 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expectLastCall().atLeastOnce();
}
+ private void expectSetUidForeground(int uid, boolean uidForeground) throws Exception {
+ mStatsService.setUidForeground(uid, uidForeground);
+ expectLastCall().atLeastOnce();
+ }
+
private Future<Void> expectRulesChanged(int uid, int policy) throws Exception {
final FutureAnswer future = new FutureAnswer();
mPolicyListener.onUidRulesChanged(eq(uid), eq(policy));
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index 8eb9cc305397..6138490781a0 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -23,6 +23,9 @@ import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.ConnectivityManager.TYPE_WIMAX;
import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.SET_ALL;
+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 static android.net.NetworkStatsHistory.FIELD_ALL;
@@ -34,9 +37,6 @@ import static android.text.format.DateUtils.HOUR_IN_MILLIS;
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 com.android.server.net.NetworkStatsService.packUidAndTag;
-import static com.android.server.net.NetworkStatsService.unpackTag;
-import static com.android.server.net.NetworkStatsService.unpackUid;
import static org.easymock.EasyMock.anyLong;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.eq;
@@ -68,6 +68,9 @@ import com.android.server.net.NetworkStatsService.NetworkStatsSettings;
import org.easymock.EasyMock;
import java.io.File;
+import java.util.concurrent.Future;
+
+import libcore.io.IoUtils;
/**
* Tests for {@link NetworkStatsService}.
@@ -90,6 +93,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
private static final int UID_BLUE = 1002;
private static final int UID_GREEN = 1003;
+ private long mElapsedRealtime;
+
private BroadcastInterceptingContext mServiceContext;
private File mStatsDir;
@@ -107,6 +112,9 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
mServiceContext = new BroadcastInterceptingContext(getContext());
mStatsDir = getContext().getFilesDir();
+ if (mStatsDir.exists()) {
+ IoUtils.deleteContents(mStatsDir);
+ }
mNetManager = createMock(INetworkManagementService.class);
mAlarmManager = createMock(IAlarmManager.class);
@@ -118,11 +126,17 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings);
mService.bindConnectivityManager(mConnManager);
+ mElapsedRealtime = 0L;
+
+ expectCurrentTime();
expectDefaultSettings();
- expectSystemReady();
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
+ final Future<?> firstPoll = expectSystemReady();
replay();
mService.systemReady();
+ firstPoll.get();
verifyAndReset();
}
@@ -148,14 +162,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
public void testNetworkStatsWifi() throws Exception {
- long elapsedRealtime = 0;
-
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildWifiState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -164,16 +176,13 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// modify some number on wifi, and trigger poll event
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 1L, 2048L, 2L));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 1024L, 1L, 2048L, 2L));
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -184,12 +193,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// and bump forward again, with counters going higher. this is
// important, since polling should correctly subtract last snapshot.
- elapsedRealtime += DAY_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(DAY_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4096L, 4L, 8192L, 8L));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 4096L, 4L, 8192L, 8L));
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -201,15 +210,14 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
public void testStatsRebootPersist() throws Exception {
- long elapsedRealtime = 0;
assertStatsFilesExist(false);
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildWifiState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -218,29 +226,33 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// modify some number on wifi, and trigger poll event
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 1024L, 8L, 2048L, 16L));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 2)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 512L, 4L, 256L, 2L)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 128L, 1L, 128L, 1L));
-
- mService.incrementOperationCount(UID_RED, TAG_NONE, 20);
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 1024L, 8L, 2048L, 16L));
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 2)
+ .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 0L)
+ .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xFAAD, 256L, 2L, 128L, 1L, 0L)
+ .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));
+
+ mService.setUidForeground(UID_RED, false);
+ mService.incrementOperationCount(UID_RED, 0xFAAD, 4);
+ mService.setUidForeground(UID_RED, true);
+ mService.incrementOperationCount(UID_RED, 0xFAAD, 6);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
// verify service recorded history
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
- assertUidTotal(sTemplateWifi, UID_RED, 512L, 4L, 256L, 2L, 20);
- assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 10);
+ assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10);
+ assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4);
+ assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6);
+ assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0);
verifyAndReset();
// graceful shutdown system, which should trigger persist of stats, and
@@ -257,47 +269,49 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
assertStatsFilesExist(true);
// boot through serviceReady() again
+ expectCurrentTime();
expectDefaultSettings();
- expectSystemReady();
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
+ final Future<?> firstPoll = expectSystemReady();
replay();
mService.systemReady();
+ firstPoll.get();
// after systemReady(), we should have historical stats loaded again
assertNetworkTotal(sTemplateWifi, 1024L, 8L, 2048L, 16L, 0);
- assertUidTotal(sTemplateWifi, UID_RED, 512L, 4L, 256L, 2L, 20);
- assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 10);
+ assertUidTotal(sTemplateWifi, UID_RED, 1024L, 8L, 512L, 4L, 10);
+ assertUidTotal(sTemplateWifi, UID_RED, SET_DEFAULT, 512L, 4L, 256L, 2L, 4);
+ assertUidTotal(sTemplateWifi, UID_RED, SET_FOREGROUND, 512L, 4L, 256L, 2L, 6);
+ assertUidTotal(sTemplateWifi, UID_BLUE, 128L, 1L, 128L, 1L, 0);
verifyAndReset();
}
public void testStatsBucketResize() throws Exception {
- long elapsedRealtime = 0;
NetworkStatsHistory history = null;
assertStatsFilesExist(false);
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
expectNetworkState(buildWifiState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// modify some number on wifi, and trigger poll event
- elapsedRealtime += 2 * HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(2 * HOUR_IN_MILLIS);
+ expectCurrentTime();
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 512L, 4L, 512L, 4L));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 512L, 4L, 512L, 4L));
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -311,10 +325,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// now change bucket duration setting and trigger another poll with
// exact same values, which should resize existing buckets.
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectSettings(0L, 30 * MINUTE_IN_MILLIS, WEEK_IN_MILLIS);
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -329,35 +343,28 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
public void testUidStatsAcrossNetworks() throws Exception {
- long elapsedRealtime = 0;
-
// pretend first mobile network comes online
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildMobile3gState(IMSI_1));
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// create some traffic on first network
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 2048L, 16L, 512L, 4L));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 3)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 1536L, 12L, 512L, 4L)
- .addValues(TEST_IFACE, UID_RED, 0xF00D, 512L, 4L, 512L, 4L)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 512L, 4L, 0L, 0L));
-
- mService.incrementOperationCount(UID_RED, TAG_NONE, 15);
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3)
+ .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));
+
mService.incrementOperationCount(UID_RED, 0xF00D, 10);
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 5);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -365,18 +372,18 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// verify service recorded history
assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0);
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
- assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 15);
- assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 5);
+ assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10);
+ assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0);
verifyAndReset();
// now switch networks; this also tests that we're okay with interfaces
// disappearing, to verify we don't count backwards.
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildMobile3gState(IMSI_2));
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -384,23 +391,24 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
verifyAndReset();
// create traffic on second network
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 128L, 1L, 1024L, 8L));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 128L, 1L, 1024L, 8L));
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 128L, 1L, 1024L, 8L));
+ 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));
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
+ mService.incrementOperationCount(UID_BLUE, 0xFAAD, 10);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
// verify original history still intact
assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0);
- assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 15);
- assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 5);
+ assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 512L, 4L, 10);
+ assertUidTotal(sTemplateImsi1, UID_BLUE, 512L, 4L, 0L, 0L, 0);
// and verify new history also recorded under different template, which
// verifies that we didn't cross the streams.
@@ -412,35 +420,29 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
public void testUidRemovedIsMoved() throws Exception {
- long elapsedRealtime = 0;
-
// pretend that network comes online
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildWifiState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// create some traffic
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_ALL, TAG_NONE, 4128L, 258L, 544L, 34L));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 16L, 1L, 16L, 1L)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 4096L, 258L, 512L, 32L)
- .addValues(TEST_IFACE, UID_GREEN, TAG_NONE, 16L, 1L, 16L, 1L));
+ expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
+ .addIfaceValues(TEST_IFACE, 4128L, 258L, 544L, 34L));
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
+ .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 16L, 1L, 16L, 1L, 0L)
+ .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));
- mService.incrementOperationCount(UID_RED, TAG_NONE, 10);
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15);
- mService.incrementOperationCount(UID_GREEN, TAG_NONE, 5);
+ mService.incrementOperationCount(UID_RED, 0xFAAD, 10);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -448,8 +450,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// verify service recorded history
assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0);
assertUidTotal(sTemplateWifi, UID_RED, 16L, 1L, 16L, 1L, 10);
- assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 258L, 512L, 32L, 15);
- assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 5);
+ assertUidTotal(sTemplateWifi, UID_BLUE, 4096L, 258L, 512L, 32L, 0);
+ assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0);
verifyAndReset();
// now pretend two UIDs are uninstalled, which should migrate stats to
@@ -467,54 +469,48 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
assertNetworkTotal(sTemplateWifi, 4128L, 258L, 544L, 34L, 0);
assertUidTotal(sTemplateWifi, UID_RED, 0L, 0L, 0L, 0L, 0);
assertUidTotal(sTemplateWifi, UID_BLUE, 0L, 0L, 0L, 0L, 0);
- assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 5);
- assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 259L, 528L, 33L, 25);
+ assertUidTotal(sTemplateWifi, UID_GREEN, 16L, 1L, 16L, 1L, 0);
+ assertUidTotal(sTemplateWifi, UID_REMOVED, 4112L, 259L, 528L, 33L, 10);
verifyAndReset();
}
public void testUid3g4gCombinedByTemplate() throws Exception {
- long elapsedRealtime = 0;
-
// pretend that network comes online
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildMobile3gState(IMSI_1));
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// create some traffic
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 1024L, 8L, 1024L, 8L)
- .addValues(TEST_IFACE, UID_RED, 0xF00D, 512L, 4L, 512L, 4L));
+ expectNetworkStatsSummary(buildEmptyStats());
+ 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));
- mService.incrementOperationCount(UID_RED, TAG_NONE, 10);
mService.incrementOperationCount(UID_RED, 0xF00D, 5);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
// verify service recorded history
- assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 10);
+ assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 5);
verifyAndReset();
// now switch over to 4g network
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildMobile4gState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -522,92 +518,64 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
verifyAndReset();
// create traffic on second network
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 512L, 4L, 256L, 2L));
+ expectNetworkStatsSummary(buildEmptyStats());
+ 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));
- mService.incrementOperationCount(UID_RED, TAG_NONE, 5);
+ mService.incrementOperationCount(UID_RED, 0xFAAD, 5);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
// verify that ALL_MOBILE template combines both
- assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 15);
+ assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 10);
verifyAndReset();
}
-
- public void testPackedUidAndTag() throws Exception {
- assertEquals(0x0000000000000000L, packUidAndTag(0, 0x0));
- assertEquals(0x000003E900000000L, packUidAndTag(1001, 0x0));
- assertEquals(0x000003E90000F00DL, packUidAndTag(1001, 0xF00D));
-
- long packed;
- packed = packUidAndTag(Integer.MAX_VALUE, Integer.MIN_VALUE);
- assertEquals(Integer.MAX_VALUE, unpackUid(packed));
- assertEquals(Integer.MIN_VALUE, unpackTag(packed));
-
- packed = packUidAndTag(Integer.MIN_VALUE, Integer.MAX_VALUE);
- assertEquals(Integer.MIN_VALUE, unpackUid(packed));
- assertEquals(Integer.MAX_VALUE, unpackTag(packed));
-
- packed = packUidAndTag(10005, 0xFFFFFFFF);
- assertEquals(10005, unpackUid(packed));
- assertEquals(0xFFFFFFFF, unpackTag(packed));
-
- }
public void testSummaryForAllUid() throws Exception {
- long elapsedRealtime = 0;
-
// pretend that network comes online
- expectTime(TEST_START + elapsedRealtime);
+ expectCurrentTime();
expectDefaultSettings();
expectNetworkState(buildWifiState());
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
+ expectNetworkStatsSummary(buildEmptyStats());
replay();
mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
verifyAndReset();
- // bootstrap with full polling event to prime stats
- performBootstrapPoll(TEST_START, elapsedRealtime);
-
// create some traffic for two apps
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_RED, TAG_NONE, 50L, 5L, 50L, 5L)
- .addValues(TEST_IFACE, UID_RED, 0xF00D, 10L, 1L, 10L, 1L)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 1024L, 8L, 512L, 4L));
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
+ .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));
- mService.incrementOperationCount(UID_RED, TAG_NONE, 5);
mService.incrementOperationCount(UID_RED, 0xF00D, 1);
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 10);
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
// verify service recorded history
- assertUidTotal(sTemplateWifi, UID_RED, 50L, 5L, 50L, 5L, 5);
- assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 10);
+ assertUidTotal(sTemplateWifi, UID_RED, 50L, 5L, 50L, 5L, 1);
+ assertUidTotal(sTemplateWifi, UID_BLUE, 1024L, 8L, 512L, 4L, 0);
verifyAndReset();
// now create more traffic in next hour, but only for one app
- elapsedRealtime += HOUR_IN_MILLIS;
- expectTime(TEST_START + elapsedRealtime);
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
expectDefaultSettings();
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(new NetworkStats(elapsedRealtime, 1)
- .addValues(TEST_IFACE, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L));
-
- mService.incrementOperationCount(UID_BLUE, TAG_NONE, 15);
+ expectNetworkStatsSummary(buildEmptyStats());
+ expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
+ .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0L));
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -616,16 +584,77 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
NetworkStats stats = mService.getSummaryForAllUid(
sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
assertEquals(3, stats.size());
- assertValues(stats, 0, IFACE_ALL, UID_RED, TAG_NONE, 50L, 5L, 50L, 5L, 5);
- assertValues(stats, 1, IFACE_ALL, UID_RED, 0xF00D, 10L, 1L, 10L, 1L, 1);
- assertValues(stats, 2, IFACE_ALL, UID_BLUE, TAG_NONE, 2048L, 16L, 1024L, 8L, 15);
+ assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 1);
+ assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 10L, 1L, 10L, 1L, 1);
+ assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 2048L, 16L, 1024L, 8L, 0);
// now verify that recent history only contains one uid
- final long currentTime = TEST_START + elapsedRealtime;
+ final long currentTime = currentTimeMillis();
stats = mService.getSummaryForAllUid(
sTemplateWifi, currentTime - HOUR_IN_MILLIS, currentTime, true);
assertEquals(1, stats.size());
- assertValues(stats, 0, IFACE_ALL, UID_BLUE, TAG_NONE, 1024L, 8L, 512L, 4L, 5);
+ assertValues(stats, IFACE_ALL, UID_BLUE, SET_DEFAULT, TAG_NONE, 1024L, 8L, 512L, 4L, 0);
+
+ verifyAndReset();
+ }
+
+ public void testForegroundBackground() throws Exception {
+ // pretend that network comes online
+ expectCurrentTime();
+ expectDefaultSettings();
+ expectNetworkState(buildWifiState());
+ expectNetworkStatsSummary(buildEmptyStats());
+
+ replay();
+ mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
+ verifyAndReset();
+
+ // create some initial traffic
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
+ expectDefaultSettings();
+ expectNetworkStatsSummary(buildEmptyStats());
+ 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));
+
+ mService.incrementOperationCount(UID_RED, 0xF00D, 1);
+
+ replay();
+ mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
+
+ // verify service recorded history
+ assertUidTotal(sTemplateWifi, UID_RED, 128L, 2L, 128L, 2L, 1);
+ verifyAndReset();
+
+ // now switch to foreground
+ incrementCurrentTime(HOUR_IN_MILLIS);
+ expectCurrentTime();
+ expectDefaultSettings();
+ expectNetworkStatsSummary(buildEmptyStats());
+ 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)
+ .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));
+
+ mService.setUidForeground(UID_RED, true);
+ mService.incrementOperationCount(UID_RED, 0xFAAD, 1);
+
+ replay();
+ mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
+
+ // test that we combined correctly
+ assertUidTotal(sTemplateWifi, UID_RED, 160L, 4L, 160L, 4L, 2);
+
+ // verify entire history present
+ final NetworkStats stats = mService.getSummaryForAllUid(
+ sTemplateWifi, Long.MIN_VALUE, Long.MAX_VALUE, true);
+ assertEquals(4, stats.size());
+ assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 1);
+ assertValues(stats, IFACE_ALL, UID_RED, SET_DEFAULT, 0xF00D, 64L, 1L, 64L, 1L, 1);
+ assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, TAG_NONE, 32L, 2L, 32L, 2L, 1);
+ assertValues(stats, IFACE_ALL, UID_RED, SET_FOREGROUND, 0xFAAD, 1L, 1L, 1L, 1L, 1);
verifyAndReset();
}
@@ -639,19 +668,27 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
private void assertUidTotal(NetworkTemplate template, int uid, long rxBytes, long rxPackets,
long txBytes, long txPackets, int operations) {
+ assertUidTotal(template, uid, SET_ALL, rxBytes, rxPackets, txBytes, txPackets, operations);
+ }
+
+ private void assertUidTotal(NetworkTemplate template, int uid, int set, long rxBytes,
+ long rxPackets, long txBytes, long txPackets, int operations) {
final NetworkStatsHistory history = mService.getHistoryForUid(
- template, uid, TAG_NONE, FIELD_ALL);
+ template, uid, set, TAG_NONE, FIELD_ALL);
assertValues(history, Long.MIN_VALUE, Long.MAX_VALUE, rxBytes, rxPackets, txBytes,
txPackets, operations);
}
- private void expectSystemReady() throws Exception {
+ private Future<?> expectSystemReady() throws Exception {
mAlarmManager.remove(isA(PendingIntent.class));
expectLastCall().anyTimes();
mAlarmManager.setInexactRepeating(
eq(AlarmManager.ELAPSED_REALTIME), anyLong(), anyLong(), isA(PendingIntent.class));
expectLastCall().atLeastOnce();
+
+ return mServiceContext.nextBroadcastIntent(
+ NetworkStatsService.ACTION_NETWORK_STATS_UPDATED);
}
private void expectNetworkState(NetworkState... state) throws Exception {
@@ -682,25 +719,14 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes();
}
- private void expectTime(long currentTime) throws Exception {
+ private void expectCurrentTime() throws Exception {
expect(mTime.forceRefresh()).andReturn(false).anyTimes();
expect(mTime.hasCache()).andReturn(true).anyTimes();
- expect(mTime.currentTimeMillis()).andReturn(currentTime).anyTimes();
+ expect(mTime.currentTimeMillis()).andReturn(currentTimeMillis()).anyTimes();
expect(mTime.getCacheAge()).andReturn(0L).anyTimes();
expect(mTime.getCacheCertainty()).andReturn(0L).anyTimes();
}
- private void performBootstrapPoll(long testStart, long elapsedRealtime) throws Exception {
- expectTime(testStart + elapsedRealtime);
- expectDefaultSettings();
- expectNetworkStatsSummary(buildEmptyStats(elapsedRealtime));
- expectNetworkStatsUidDetail(buildEmptyStats(elapsedRealtime));
-
- replay();
- mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
- verifyAndReset();
- }
-
private void assertStatsFilesExist(boolean exist) {
final File networkFile = new File(mStatsDir, "netstats.bin");
final File uidFile = new File(mStatsDir, "netstats_uid.bin");
@@ -713,12 +739,10 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
}
- private static void assertValues(NetworkStats stats, int i, String iface, int uid, int tag,
- long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
+ private static void assertValues(NetworkStats stats, String iface, int uid, int set,
+ int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) {
+ final int i = stats.findIndex(iface, uid, set, tag);
final NetworkStats.Entry entry = stats.getValues(i, null);
- assertEquals("unexpected iface", iface, entry.iface);
- assertEquals("unexpected uid", uid, entry.uid);
- assertEquals("unexpected tag", tag, entry.tag);
assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
assertEquals("unexpected txBytes", txBytes, entry.txBytes);
@@ -761,8 +785,24 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
return new NetworkState(info, prop, null);
}
- private static NetworkStats buildEmptyStats(long elapsedRealtime) {
- return new NetworkStats(elapsedRealtime, 0);
+ private NetworkStats buildEmptyStats() {
+ return new NetworkStats(getElapsedRealtime(), 0);
+ }
+
+ private long getElapsedRealtime() {
+ return mElapsedRealtime;
+ }
+
+ private long startTimeMillis() {
+ return TEST_START;
+ }
+
+ private long currentTimeMillis() {
+ return startTimeMillis() + mElapsedRealtime;
+ }
+
+ private void incrementCurrentTime(long duration) {
+ mElapsedRealtime += duration;
}
private void replay() {
diff --git a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
index c0870c76edd6..6a9778ee94ab 100644
--- a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
@@ -16,6 +16,9 @@
package com.android.server;
+import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.TAG_NONE;
+import static android.net.NetworkStats.UID_ALL;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
@@ -289,7 +292,7 @@ public class ThrottleServiceTest extends AndroidTestCase {
public void expectGetInterfaceCounter(long rx, long tx) throws Exception {
// TODO: provide elapsedRealtime mock to match TimeAuthority
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1);
- stats.addValues(TEST_IFACE, NetworkStats.UID_ALL, NetworkStats.TAG_NONE, rx, 0L, tx, 0L, 0);
+ stats.addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, rx, 0L, tx, 0L, 0);
expect(mMockNMService.getNetworkStatsSummary()).andReturn(stats).atLeastOnce();
}
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index c1713a58002a..51922da2b4f7 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -122,6 +122,17 @@ public class PhoneNumberUtils
return c == PAUSE || c == WAIT;
}
+ private static boolean
+ isPause (char c){
+ return c == 'p'||c == 'P';
+ }
+
+ private static boolean
+ isToneWait (char c){
+ return c == 'w'||c == 'W';
+ }
+
+
/** Returns true if ch is not dialable or alpha char */
private static boolean isSeparator(char ch) {
return !isDialable(ch) && !(('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z'));
@@ -278,6 +289,32 @@ public class PhoneNumberUtils
return ret.toString();
}
+ /**
+ * Converts pause and tonewait pause characters
+ * to Android representation.
+ * RFC 3601 says pause is 'p' and tonewait is 'w'.
+ * @hide
+ */
+ public static String convertPreDial(String phoneNumber) {
+ if (phoneNumber == null) {
+ return null;
+ }
+ int len = phoneNumber.length();
+ StringBuilder ret = new StringBuilder(len);
+
+ for (int i = 0; i < len; i++) {
+ char c = phoneNumber.charAt(i);
+
+ if (isPause(c)) {
+ c = PAUSE;
+ } else if (isToneWait(c)) {
+ c = WAIT;
+ }
+ ret.append(c);
+ }
+ return ret.toString();
+ }
+
/** or -1 if both are negative */
static private int
minPositive (int a, int b) {
diff --git a/telephony/java/com/android/internal/telephony/IccCard.java b/telephony/java/com/android/internal/telephony/IccCard.java
index 02617c8083e2..bce99916662c 100644
--- a/telephony/java/com/android/internal/telephony/IccCard.java
+++ b/telephony/java/com/android/internal/telephony/IccCard.java
@@ -268,7 +268,6 @@ public abstract class IccCard {
}
public void supplyNetworkDepersonalization (String pin, Message onComplete) {
- if(mDbg) log("Network Despersonalization: " + pin);
mPhone.mCM.supplyNetworkDepersonalization(pin,
mHandler.obtainMessage(EVENT_PINPUK_DONE, onComplete));
}
@@ -359,7 +358,6 @@ public abstract class IccCard {
*/
public void changeIccLockPassword(String oldPassword, String newPassword,
Message onComplete) {
- if(mDbg) log("Change Pin1 old: " + oldPassword + " new: " + newPassword);
mPhone.mCM.changeIccPin(oldPassword, newPassword,
mHandler.obtainMessage(EVENT_CHANGE_ICC_PASSWORD_DONE, onComplete));
@@ -378,7 +376,6 @@ public abstract class IccCard {
*/
public void changeIccFdnPassword(String oldPassword, String newPassword,
Message onComplete) {
- if(mDbg) log("Change Pin2 old: " + oldPassword + " new: " + newPassword);
mPhone.mCM.changeIccPin2(oldPassword, newPassword,
mHandler.obtainMessage(EVENT_CHANGE_ICC_PASSWORD_DONE, onComplete));
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index d84f1e5f958a..501c21974e82 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -37,6 +37,7 @@ import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
+import android.content.pm.ManifestDigest;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
@@ -533,4 +534,22 @@ public class MockPackageManager extends PackageManager {
public void updateUserFlags(int id, int flags) {
throw new UnsupportedOperationException();
}
+
+ /**
+ * @hide
+ */
+ @Override
+ public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
+ int flags, String installerPackageName, Uri verificationURI,
+ ManifestDigest manifestDigest) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ public void verifyPendingInstall(int id, boolean verified, String failureMessage) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
index b7d2c26f8d05..5e2a9fd41982 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
@@ -141,7 +141,7 @@ public class FsUtils {
} else if (!path.startsWith(HTTP_LOCAL_TESTS_PREFIX)
&& !path.startsWith(HTTP_MEDIA_TESTS_PREFIX)
&& !path.startsWith(HTTP_WML_TESTS_PREFIX)) {
- url = "http://127.0.0.1:8000/" + path.substring(HTTP_TESTS_PREFIX.length());
+ url = "http://127.0.0.1:18000/" + path.substring(HTTP_TESTS_PREFIX.length());
} else {
url = "file://" + path;
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java b/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
index 25dd04fdea6f..7a277d7ad990 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
@@ -26,7 +26,7 @@ import android.util.Log;
public class ForwardService {
- private ForwardServer fs8000, fs8080, fs8443;
+ private ForwardServer fs18000, fs8080, fs8443;
private static ForwardService inst;
@@ -40,7 +40,7 @@ public class ForwardService {
private ForwardService() {
int addr = getForwardHostAddr();
if (addr != -1) {
- fs8000 = new ForwardServer(8000, addr, 8000);
+ fs18000 = new ForwardServer(18000, addr, 8000);
fs8080 = new ForwardServer(8080, addr, 8080);
fs8443 = new ForwardServer(8443, addr, 8443);
}
@@ -55,8 +55,8 @@ public class ForwardService {
public void startForwardService() {
try {
- if (fs8000 != null)
- fs8000.start();
+ if (fs18000 != null)
+ fs18000.start();
if (fs8080 != null)
fs8080.start();
if (fs8443 != null)
@@ -68,9 +68,9 @@ public class ForwardService {
}
public void stopForwardService() {
- if (fs8000 != null) {
- fs8000.stop();
- fs8000 = null;
+ if (fs18000 != null) {
+ fs18000.stop();
+ fs18000 = null;
}
if (fs8080 != null) {
fs8080.stop();
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
index 97e21089428c..fcb57d96b3f1 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java
@@ -17,6 +17,7 @@
package com.android.test.hwui;
import android.app.Activity;
+import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.Bundle;
@@ -33,6 +34,7 @@ public class TextureViewActivity extends Activity implements TextureView.Surface
private Camera mCamera;
private TextureView mTextureView;
private FrameLayout mContent;
+ private Matrix mMatrix = new Matrix();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -82,8 +84,6 @@ public class TextureViewActivity extends Activity implements TextureView.Surface
}
mCamera.startPreview();
-
- mTextureView.setCameraDistance(5000);
}
@Override
diff --git a/tests/RenderScriptTests/ShadersTest/Android.mk b/tests/RenderScriptTests/ShadersTest/Android.mk
new file mode 100644
index 000000000000..109b0a0e4bac
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/Android.mk
@@ -0,0 +1,26 @@
+#
+# 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
+
+LOCAL_PACKAGE_NAME := ShadersTest
+
+include $(BUILD_PACKAGE)
diff --git a/tests/RenderScriptTests/ShadersTest/AndroidManifest.xml b/tests/RenderScriptTests/ShadersTest/AndroidManifest.xml
new file mode 100644
index 000000000000..871200da6ad6
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.shaderstest">
+
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <application android:label="_ShadersTest">
+ <activity android:name="ShadersTest"
+ android:label="_ShadersTest"
+ android:theme="@android:style/Theme.Black.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/tests/RenderScriptTests/ShadersTest/res/drawable-nodpi/robot.png b/tests/RenderScriptTests/ShadersTest/res/drawable-nodpi/robot.png
new file mode 100644
index 000000000000..f7353fd61c5b
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/res/drawable-nodpi/robot.png
Binary files differ
diff --git a/tests/RenderScriptTests/ShadersTest/res/raw/depth_fs.glsl b/tests/RenderScriptTests/ShadersTest/res/raw/depth_fs.glsl
new file mode 100644
index 000000000000..096843b1bb44
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/res/raw/depth_fs.glsl
@@ -0,0 +1,13 @@
+void main() {
+ // Non-linear depth value
+ float z = gl_FragCoord.z;
+ // Near and far planes from the projection
+ // In practice, these values can be used to tweak
+ // the focus range
+ float n = UNI_near;
+ float f = UNI_far;
+ // Linear depth value
+ z = (2.0 * n) / (f + n - z * (f - n));
+
+ gl_FragColor = vec4(z, z, z, 1.0);
+}
diff --git a/tests/RenderScriptTests/ShadersTest/res/raw/robot.a3d b/tests/RenderScriptTests/ShadersTest/res/raw/robot.a3d
new file mode 100644
index 000000000000..f48895cd8451
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/res/raw/robot.a3d
Binary files differ
diff --git a/tests/RenderScriptTests/ShadersTest/res/raw/vignette_fs.glsl b/tests/RenderScriptTests/ShadersTest/res/raw/vignette_fs.glsl
new file mode 100644
index 000000000000..2dc1ea31b9d6
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/res/raw/vignette_fs.glsl
@@ -0,0 +1,31 @@
+#define CRT_MASK
+
+varying vec2 varTex0;
+
+void main() {
+ lowp vec4 color = texture2D(UNI_Tex0, varTex0);
+
+ vec2 powers = pow(abs((gl_FragCoord.xy / vec2(UNI_width, UNI_height)) - 0.5), vec2(2.0));
+ float gradient = smoothstep(UNI_size - UNI_feather, UNI_size + UNI_feather,
+ powers.x + powers.y);
+
+ color = vec4(mix(color.rgb, vec3(0.0), gradient), 1.0);
+
+#ifdef CRT_MASK
+ float vShift = gl_FragCoord.y;
+ if (mod(gl_FragCoord.x, 6.0) >= 3.0) {
+ vShift += 2.0;
+ }
+
+ lowp vec3 r = vec3(0.95, 0.0, 0.2);
+ lowp vec3 g = vec3(0.2, 0.95, 0.0);
+ lowp vec3 b = vec3(0.0, 0.2, 0.95);
+ int channel = int(floor(mod(gl_FragCoord.x, 3.0)));
+ lowp vec4 crt = vec4(r[channel], g[channel], b[channel], 1.0);
+ crt *= clamp(floor(mod(vShift, 4.0)), 0.0, 1.0);
+
+ color = (crt * color * 1.25) + 0.05;
+#endif
+
+ gl_FragColor = color;
+}
diff --git a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTest.java b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTest.java
new file mode 100644
index 000000000000..6803fbbf4016
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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.shaderstest;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ShadersTest extends Activity {
+
+ private ShadersTestView mView;
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ mView = new ShadersTestView(this);
+ setContentView(mView);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mView.resume();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mView.pause();
+ }
+}
diff --git a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestRS.java b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestRS.java
new file mode 100644
index 000000000000..dad97e20417d
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestRS.java
@@ -0,0 +1,202 @@
+/*
+ * 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.shaderstest;
+
+import android.content.res.Resources;
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.Element.DataKind;
+import android.renderscript.Element.DataType;
+import android.renderscript.FileA3D;
+import android.renderscript.Mesh;
+import android.renderscript.Program;
+import android.renderscript.ProgramFragment;
+import android.renderscript.ProgramFragmentFixedFunction;
+import android.renderscript.ProgramStore;
+import android.renderscript.ProgramStore.DepthFunc;
+import android.renderscript.ProgramVertex;
+import android.renderscript.ProgramVertexFixedFunction;
+import android.renderscript.RSRuntimeException;
+import android.renderscript.RenderScriptGL;
+import android.renderscript.Sampler;
+import android.renderscript.Type.Builder;
+
+@SuppressWarnings({"FieldCanBeLocal"})
+public class ShadersTestRS {
+ public ShadersTestRS() {
+ }
+
+ public void init(RenderScriptGL rs, Resources res) {
+ mRS = rs;
+ mRes = res;
+ initRS();
+ }
+
+ public void surfaceChanged() {
+ initBuffers(mRS.getWidth(), mRS.getHeight());
+ }
+
+ private Resources mRes;
+ private RenderScriptGL mRS;
+ private Sampler mLinearClamp;
+ private Sampler mNearestClamp;
+ private ProgramStore mPSBackground;
+ private ProgramFragment mPFBackground;
+ private ProgramVertex mPVBackground;
+ private ProgramVertexFixedFunction.Constants mPVA;
+
+ private ProgramFragment mPFVignette;
+ private ScriptField_VignetteConstants_s mFSVignetteConst;
+
+ private Allocation mMeshTexture;
+ private Allocation mScreen;
+ private Allocation mScreenDepth;
+
+ private ScriptField_MeshInfo mMeshes;
+ private ScriptC_shaderstest mScript;
+
+
+ public void onActionDown(float x, float y) {
+ mScript.invoke_onActionDown(x, y);
+ }
+
+ public void onActionScale(float scale) {
+ mScript.invoke_onActionScale(scale);
+ }
+
+ public void onActionMove(float x, float y) {
+ mScript.invoke_onActionMove(x, y);
+ }
+
+ private void initPFS() {
+ ProgramStore.Builder b = new ProgramStore.Builder(mRS);
+
+ b.setDepthFunc(DepthFunc.LESS);
+ b.setDitherEnabled(false);
+ b.setDepthMaskEnabled(true);
+ mPSBackground = b.create();
+
+ mScript.set_gPFSBackground(mPSBackground);
+ }
+
+ private void initPF() {
+ mLinearClamp = Sampler.CLAMP_LINEAR(mRS);
+ mScript.set_gLinear(mLinearClamp);
+
+ mNearestClamp = Sampler.CLAMP_NEAREST(mRS);
+ mScript.set_gNearest(mNearestClamp);
+
+ ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS);
+ b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
+ ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
+ mPFBackground = b.create();
+ mPFBackground.bindSampler(mLinearClamp, 0);
+ mScript.set_gPFBackground(mPFBackground);
+
+ mFSVignetteConst = new ScriptField_VignetteConstants_s(mRS, 1);
+ mScript.bind_gFSVignetteConstants(mFSVignetteConst);
+
+ ProgramFragment.Builder fs;
+
+ fs = new ProgramFragment.Builder(mRS);
+ fs.setShader(mRes, R.raw.vignette_fs);
+ fs.addConstant(mFSVignetteConst.getAllocation().getType());
+ fs.addTexture(Program.TextureType.TEXTURE_2D);
+ mPFVignette = fs.create();
+ mPFVignette.bindConstants(mFSVignetteConst.getAllocation(), 0);
+ mScript.set_gPFVignette(mPFVignette);
+ }
+
+ private void initPV() {
+ ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
+ mPVBackground = pvb.create();
+
+ mPVA = new ProgramVertexFixedFunction.Constants(mRS);
+ ((ProgramVertexFixedFunction) mPVBackground).bindConstants(mPVA);
+
+ mScript.set_gPVBackground(mPVBackground);
+ }
+
+ private void loadImage() {
+ mMeshTexture = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot,
+ Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
+ Allocation.USAGE_GRAPHICS_TEXTURE);
+ mScript.set_gTMesh(mMeshTexture);
+ }
+
+ private void initMeshes(FileA3D model) {
+ int numEntries = model.getIndexEntryCount();
+ int numMeshes = 0;
+ for (int i = 0; i < numEntries; i ++) {
+ FileA3D.IndexEntry entry = model.getIndexEntry(i);
+ if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) {
+ numMeshes ++;
+ }
+ }
+
+ if (numMeshes > 0) {
+ mMeshes = new ScriptField_MeshInfo(mRS, numMeshes);
+
+ for (int i = 0; i < numEntries; i ++) {
+ FileA3D.IndexEntry entry = model.getIndexEntry(i);
+ if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) {
+ Mesh mesh = entry.getMesh();
+ mMeshes.set_mMesh(i, mesh, false);
+ mMeshes.set_mNumIndexSets(i, mesh.getPrimitiveCount(), false);
+ }
+ }
+ mMeshes.copyAll();
+ } else {
+ throw new RSRuntimeException("No valid meshes in file");
+ }
+
+ mScript.bind_gMeshes(mMeshes);
+ mScript.invoke_updateMeshInfo();
+ }
+
+ private void initRS() {
+ mScript = new ScriptC_shaderstest(mRS, mRes, R.raw.shaderstest);
+
+ initPFS();
+ initPF();
+ initPV();
+
+ loadImage();
+
+ initBuffers(1, 1);
+
+ FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot);
+ initMeshes(model);
+
+ mRS.bindRootScript(mScript);
+ }
+
+ private void initBuffers(int width, int height) {
+ Builder b;
+ b = new Builder(mRS, Element.RGBA_8888(mRS));
+ b.setX(width).setY(height);
+ mScreen = Allocation.createTyped(mRS, b.create(),
+ Allocation.USAGE_GRAPHICS_TEXTURE | Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+ mScript.set_gScreen(mScreen);
+
+ b = new Builder(mRS, Element.createPixel(mRS, DataType.UNSIGNED_16, DataKind.PIXEL_DEPTH));
+ b.setX(width).setY(height);
+ mScreenDepth = Allocation.createTyped(mRS, b.create(),
+ Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+ mScript.set_gScreenDepth(mScreenDepth);
+ }
+}
diff --git a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestView.java b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestView.java
new file mode 100644
index 000000000000..e0a540fb8c87
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/ShadersTestView.java
@@ -0,0 +1,138 @@
+/*
+ * 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.shaderstest;
+
+import android.content.Context;
+import android.renderscript.RSSurfaceView;
+import android.renderscript.RenderScriptGL;
+import android.view.MotionEvent;
+import android.view.ScaleGestureDetector;
+import android.view.SurfaceHolder;
+
+public class ShadersTestView extends RSSurfaceView {
+
+ private RenderScriptGL mRS;
+ private ShadersTestRS mRender;
+
+ private ScaleGestureDetector mScaleDetector;
+
+ private static final int INVALID_POINTER_ID = -1;
+ private int mActivePointerId = INVALID_POINTER_ID;
+
+ public ShadersTestView(Context context) {
+ super(context);
+ ensureRenderScript();
+ mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
+ }
+
+ private void ensureRenderScript() {
+ if (mRS == null) {
+ RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+ sc.setDepth(16, 24);
+ mRS = createRenderScriptGL(sc);
+ mRender = new ShadersTestRS();
+ mRender.init(mRS, getResources());
+ }
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ ensureRenderScript();
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
+ super.surfaceChanged(holder, format, w, h);
+ mRender.surfaceChanged();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ mRender = null;
+ if (mRS != null) {
+ mRS = null;
+ destroyRenderScriptGL();
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ mScaleDetector.onTouchEvent(ev);
+
+ boolean ret = false;
+ float x = ev.getX();
+ float y = ev.getY();
+
+ final int action = ev.getAction();
+
+ switch (action & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_DOWN: {
+ mRender.onActionDown(x, y);
+ mActivePointerId = ev.getPointerId(0);
+ ret = true;
+ break;
+ }
+ case MotionEvent.ACTION_MOVE: {
+ if (!mScaleDetector.isInProgress()) {
+ mRender.onActionMove(x, y);
+ }
+ mRender.onActionDown(x, y);
+ ret = true;
+ break;
+ }
+
+ case MotionEvent.ACTION_UP: {
+ mActivePointerId = INVALID_POINTER_ID;
+ break;
+ }
+
+ case MotionEvent.ACTION_CANCEL: {
+ mActivePointerId = INVALID_POINTER_ID;
+ break;
+ }
+
+ case MotionEvent.ACTION_POINTER_UP: {
+ final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
+ >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+ final int pointerId = ev.getPointerId(pointerIndex);
+ if (pointerId == mActivePointerId) {
+ // This was our active pointer going up. Choose a new
+ // active pointer and adjust accordingly.
+ final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
+ x = ev.getX(newPointerIndex);
+ y = ev.getY(newPointerIndex);
+ mRender.onActionDown(x, y);
+ mActivePointerId = ev.getPointerId(newPointerIndex);
+ }
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+ private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
+ @Override
+ public boolean onScale(ScaleGestureDetector detector) {
+ mRender.onActionScale(detector.getScaleFactor());
+ return true;
+ }
+ }
+}
+
+
diff --git a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs
new file mode 100644
index 000000000000..53f10f989319
--- /dev/null
+++ b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs
@@ -0,0 +1,193 @@
+// 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.
+
+#pragma version(1)
+
+#pragma rs java_package_name(com.android.shaderstest)
+
+#include "rs_graphics.rsh"
+
+rs_program_vertex gPVBackground;
+rs_program_fragment gPFBackground;
+
+typedef struct VignetteConstants_s {
+ float size;
+ float feather;
+ float width;
+ float height;
+} VignetteConstants;
+VignetteConstants *gFSVignetteConstants;
+rs_program_fragment gPFVignette;
+
+rs_allocation gTMesh;
+
+rs_sampler gLinear;
+rs_sampler gNearest;
+
+rs_program_store gPFSBackground;
+
+rs_allocation gScreenDepth;
+rs_allocation gScreen;
+
+typedef struct MeshInfo {
+ rs_mesh mMesh;
+ int mNumIndexSets;
+ float3 bBoxMin;
+ float3 bBoxMax;
+} MeshInfo_t;
+MeshInfo_t *gMeshes;
+
+static float3 gLookAt;
+
+static float gRotateX;
+static float gRotateY;
+static float gZoom;
+
+static float gLastX;
+static float gLastY;
+
+void onActionDown(float x, float y) {
+ gLastX = x;
+ gLastY = y;
+}
+
+void onActionScale(float scale) {
+
+ gZoom *= 1.0f / scale;
+ gZoom = max(0.1f, min(gZoom, 500.0f));
+}
+
+void onActionMove(float x, float y) {
+ float dx = gLastX - x;
+ float dy = gLastY - y;
+
+ if (fabs(dy) <= 2.0f) {
+ dy = 0.0f;
+ }
+ if (fabs(dx) <= 2.0f) {
+ dx = 0.0f;
+ }
+
+ gRotateY -= dx;
+ if (gRotateY > 360) {
+ gRotateY -= 360;
+ }
+ if (gRotateY < 0) {
+ gRotateY += 360;
+ }
+
+ gRotateX -= dy;
+ gRotateX = min(gRotateX, 80.0f);
+ gRotateX = max(gRotateX, -80.0f);
+
+ gLastX = x;
+ gLastY = y;
+}
+
+void init() {
+ gRotateX = 0.0f;
+ gRotateY = 0.0f;
+ gZoom = 50.0f;
+ gLookAt = 0.0f;
+}
+
+void updateMeshInfo() {
+ rs_allocation allMeshes = rsGetAllocation(gMeshes);
+ int size = rsAllocationGetDimX(allMeshes);
+ gLookAt = 0.0f;
+ float minX, minY, minZ, maxX, maxY, maxZ;
+ for (int i = 0; i < size; i++) {
+ MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
+ rsgMeshComputeBoundingBox(info->mMesh,
+ &minX, &minY, &minZ,
+ &maxX, &maxY, &maxZ);
+ info->bBoxMin = (minX, minY, minZ);
+ info->bBoxMax = (maxX, maxY, maxZ);
+ gLookAt += (info->bBoxMin + info->bBoxMax)*0.5f;
+ }
+ gLookAt = gLookAt / (float)size;
+}
+
+static void renderAllMeshes() {
+ rs_allocation allMeshes = rsGetAllocation(gMeshes);
+ int size = rsAllocationGetDimX(allMeshes);
+ gLookAt = 0.0f;
+ float minX, minY, minZ, maxX, maxY, maxZ;
+ for (int i = 0; i < size; i++) {
+ MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
+ rsgDrawMesh(info->mMesh);
+ }
+}
+
+static void renderOffscreen() {
+ rsgBindProgramVertex(gPVBackground);
+ rs_matrix4x4 proj;
+ float aspect = (float) rsAllocationGetDimX(gScreen) / (float) rsAllocationGetDimY(gScreen);
+ rsMatrixLoadPerspective(&proj, 30.0f, aspect, 1.0f, 1000.0f);
+ rsgProgramVertexLoadProjectionMatrix(&proj);
+
+ rsgBindProgramFragment(gPFBackground);
+ rsgBindTexture(gPFBackground, 0, gTMesh);
+
+ rs_matrix4x4 matrix;
+
+ rsMatrixLoadIdentity(&matrix);
+ rsMatrixTranslate(&matrix, gLookAt.x, gLookAt.y, gLookAt.z - gZoom);
+ rsMatrixRotate(&matrix, gRotateX, 1.0f, 0.0f, 0.0f);
+ rsMatrixRotate(&matrix, gRotateY, 0.0f, 1.0f, 0.0f);
+ rsgProgramVertexLoadModelMatrix(&matrix);
+
+ renderAllMeshes();
+}
+
+static void drawOffscreenResult(int posX, int posY, float width, float height) {
+ // display the result d
+ rs_matrix4x4 proj, matrix;
+ rsMatrixLoadOrtho(&proj, 0, width, height, 0, -500, 500);
+ rsgProgramVertexLoadProjectionMatrix(&proj);
+ rsMatrixLoadIdentity(&matrix);
+ rsgProgramVertexLoadModelMatrix(&matrix);
+ float startX = posX, startY = posY;
+ rsgDrawQuadTexCoords(startX, startY, 0, 0, 1,
+ startX, startY + height, 0, 0, 0,
+ startX + width, startY + height, 0, 1, 0,
+ startX + width, startY, 0, 1, 1);
+}
+
+int root(void) {
+ gFSVignetteConstants->size = 0.58f * 0.58f;
+ gFSVignetteConstants->feather = 0.2f;
+ gFSVignetteConstants->width = (float) rsAllocationGetDimX(gScreen);
+ gFSVignetteConstants->height = (float) rsAllocationGetDimY(gScreen);
+
+ rsgBindProgramStore(gPFSBackground);
+
+ // Render scene to fullscreenbuffer
+ rsgBindColorTarget(gScreen, 0);
+ rsgBindDepthTarget(gScreenDepth);
+ rsgClearDepth(1.0f);
+ rsgClearColor(1.0f, 1.0f, 1.0f, 0.0f);
+ renderOffscreen();
+
+ // Render on screen
+ rsgClearAllRenderTargets();
+ rsgClearColor(1.0f, 1.0f, 1.0f, 1.0f);
+ rsgClearDepth(1.0f);
+
+ rsgBindProgramFragment(gPFVignette);
+ rsgBindTexture(gPFVignette, 0, gScreen);
+ drawOffscreenResult(0, 0, rsgGetWidth(), rsgGetHeight());
+
+ return 0;
+}
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
index be012eec62c2..e37e9b58d630 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
@@ -70,6 +70,7 @@ public class RSTestCore {
unitTests.add(new UT_rstime(this, mRes, mCtx));
unitTests.add(new UT_rstypes(this, mRes, mCtx));
unitTests.add(new UT_alloc(this, mRes, mCtx));
+ unitTests.add(new UT_foreach(this, mRes, mCtx));
unitTests.add(new UT_math(this, mRes, mCtx));
unitTests.add(new UT_fp_mad(this, mRes, mCtx));
/*
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java
new file mode 100644
index 000000000000..1d2555ec4b07
--- /dev/null
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java
@@ -0,0 +1,56 @@
+/*
+ * 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.rs.test;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.renderscript.*;
+
+public class UT_foreach extends UnitTest {
+ private Resources mRes;
+ private Allocation A;
+
+ protected UT_foreach(RSTestCore rstc, Resources res, Context ctx) {
+ super(rstc, "ForEach", ctx);
+ mRes = res;
+ }
+
+ private void initializeGlobals(RenderScript RS, ScriptC_foreach s) {
+ Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+ int X = 5;
+ int Y = 7;
+ s.set_dimX(X);
+ s.set_dimY(Y);
+ typeBuilder.setX(X).setY(Y);
+ A = Allocation.createTyped(RS, typeBuilder.create());
+ s.bind_a(A);
+
+ return;
+ }
+
+ public void run() {
+ RenderScript pRS = RenderScript.create(mCtx);
+ ScriptC_foreach s = new ScriptC_foreach(pRS, mRes, R.raw.foreach);
+ pRS.setMessageHandler(mRsMessage);
+ initializeGlobals(pRS, s);
+ s.forEach_root(A);
+ s.invoke_foreach_test();
+ pRS.finish();
+ waitForMessage();
+ pRS.destroy();
+ }
+}
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/foreach.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/foreach.rs
new file mode 100644
index 000000000000..3ba3eef1bbc8
--- /dev/null
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/foreach.rs
@@ -0,0 +1,42 @@
+#include "shared.rsh"
+
+int *a;
+int dimX;
+int dimY;
+
+void root(int *out, uint32_t x, uint32_t y) {
+ *out = x + y * dimX;
+}
+
+static bool test_foreach_output() {
+ bool failed = false;
+ int i, j;
+
+ for (j = 0; j < dimY; j++) {
+ for (i = 0; i < dimX; i++) {
+ _RS_ASSERT(a[i + j * dimX] == (i + j * dimX));
+ }
+ }
+
+ if (failed) {
+ rsDebug("test_foreach_output FAILED", 0);
+ }
+ else {
+ rsDebug("test_foreach_output PASSED", 0);
+ }
+
+ return failed;
+}
+
+void foreach_test() {
+ bool failed = false;
+ failed |= test_foreach_output();
+
+ if (failed) {
+ rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+ }
+ else {
+ rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+ }
+}
+
diff --git a/tests/TileBenchmark/res/values/strings.xml b/tests/TileBenchmark/res/values/strings.xml
index c4fd189c8ac3..5af52dcbe4b9 100644
--- a/tests/TileBenchmark/res/values/strings.xml
+++ b/tests/TileBenchmark/res/values/strings.xml
@@ -73,6 +73,8 @@
<string name="viewport_coverage">Coverage</string>
<!-- Milliseconds taken to inval, and re-render the page [CHAR LIMIT=15] -->
<string name="render_millis">RenderMillis</string>
+ <!-- Number of rendering stalls while running the test [CHAR LIMIT=15] -->
+ <string name="render_stalls">Stalls</string>
<!-- Format string for stat value overlay [CHAR LIMIT=15] -->
<string name="format_stat">%4.4f</string>
diff --git a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
index 82a7e8226415..e7a21ad8437d 100644
--- a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
+++ b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfileActivity.java
@@ -22,7 +22,6 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.CountDownTimer;
import android.util.Pair;
import android.view.KeyEvent;
import android.view.View;
@@ -55,8 +54,6 @@ public class ProfileActivity extends Activity {
}
public static final String TEMP_FILENAME = "profile.tiles";
- private static final int LOAD_TEST_DELAY = 1000; // nr of millis after load,
- // before test
Button mInspectButton;
ToggleButton mCaptureButton;
@@ -136,16 +133,7 @@ public class ProfileActivity extends Activity {
super.onPageFinished(view, url);
view.requestFocus();
- new CountDownTimer(LOAD_TEST_DELAY, LOAD_TEST_DELAY) {
- @Override
- public void onTick(long millisUntilFinished) {
- }
-
- @Override
- public void onFinish() {
- startViewProfiling(true);
- }
- }.start();
+ startViewProfiling(true);
}
@Override
diff --git a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
index 3fc4665e9238..b1cef15ce639 100644
--- a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
+++ b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java
@@ -17,6 +17,7 @@
package com.test.tilebenchmark;
import android.content.Context;
+import android.os.CountDownTimer;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebView;
@@ -27,10 +28,14 @@ import com.test.tilebenchmark.RunData.TileData;
public class ProfiledWebView extends WebView {
private int mSpeed;
- private boolean isTesting = false;
- private boolean isScrolling = false;
+ private boolean mIsTesting = false;
+ private boolean mIsScrolling = false;
private ProfileCallback mCallback;
private long mContentInvalMillis;
+ private boolean mHadToBeForced = false;
+ private int mTestCount = 0;
+ private static final int LOAD_STALL_MILLIS = 5000; // nr of millis after load,
+ // before test is forced
public ProfiledWebView(Context context) {
super(context);
@@ -51,12 +56,12 @@ public class ProfiledWebView extends WebView {
@Override
protected void onDraw(android.graphics.Canvas canvas) {
- if (isTesting && isScrolling) {
+ if (mIsTesting && mIsScrolling) {
if (canScrollVertically(1)) {
scrollBy(0, mSpeed);
} else {
stopScrollTest();
- isScrolling = false;
+ mIsScrolling = false;
}
}
super.onDraw(canvas);
@@ -68,13 +73,36 @@ public class ProfiledWebView extends WebView {
* scrolling, invalidate all content and redraw it, measuring time taken.
*/
public void startScrollTest(ProfileCallback callback, boolean autoScrolling) {
- isScrolling = autoScrolling;
+ mIsScrolling = autoScrolling;
mCallback = callback;
- isTesting = false;
+ mIsTesting = false;
mContentInvalMillis = System.currentTimeMillis();
registerPageSwapCallback();
contentInvalidateAll();
invalidate();
+
+ mTestCount++;
+ final int testCount = mTestCount;
+
+ if (autoScrolling) {
+ // after a while, force it to start even if the pages haven't swapped
+ new CountDownTimer(LOAD_STALL_MILLIS, LOAD_STALL_MILLIS) {
+ @Override
+ public void onTick(long millisUntilFinished) {
+ }
+
+ @Override
+ public void onFinish() {
+ if (testCount == mTestCount && !mIsTesting) {
+ mHadToBeForced = true;
+ Log.d("ProfiledWebView", "num " + testCount
+ + " forcing a page swap with a scroll...");
+ scrollBy(0, 1);
+ invalidate(); // ensure a redraw so that auto-scrolling can occur
+ }
+ }
+ }.start();
+ }
}
/*
@@ -87,7 +115,7 @@ public class ProfiledWebView extends WebView {
super.pageSwapCallback();
Log.d("ProfiledWebView", "REDRAW TOOK " + mContentInvalMillis
+ "millis");
- isTesting = true;
+ mIsTesting = true;
invalidate(); // ensure a redraw so that auto-scrolling can occur
tileProfilingStart();
}
@@ -97,7 +125,7 @@ public class ProfiledWebView extends WebView {
*/
public void stopScrollTest() {
tileProfilingStop();
- isTesting = false;
+ mIsTesting = false;
if (mCallback == null) {
tileProfilingClear();
@@ -105,8 +133,15 @@ public class ProfiledWebView extends WebView {
}
RunData data = new RunData(super.tileProfilingNumFrames());
+ // record the time spent (before scrolling) rendering the page
data.singleStats.put(getResources().getString(R.string.render_millis),
(double)mContentInvalMillis);
+ // record if the page render timed out
+ Log.d("ProfiledWebView", "hadtobeforced = " + mHadToBeForced);
+ data.singleStats.put(getResources().getString(R.string.render_stalls),
+ mHadToBeForced ? 1.0 : 0.0);
+ mHadToBeForced = false;
+
for (int frame = 0; frame < data.frames.length; frame++) {
data.frames[frame] = new TileData[
tileProfilingNumTilesInFrame(frame)];
diff --git a/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java b/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java
index 0f02239c1c36..6bf6f6b46c86 100644
--- a/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java
+++ b/tests/TileBenchmark/tests/src/com/test/tilebenchmark/PerformanceTest.java
@@ -80,7 +80,7 @@ public class PerformanceTest extends
private static final String URL_POSTFIX = "/index.html?skip=true";
private static final int MAX_ITERATIONS = 4;
private static final String TEST_DIRS[] = {
- "alexa_us"//, "android", "dom", "intl1", "intl2", "moz", "moz2"
+ "intl1"//, "alexa_us", "android", "dom", "intl2", "moz", "moz2"
};
public PerformanceTest() {
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index daf53e06bd75..178e7fdcffd3 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -1546,7 +1546,9 @@ int doPackage(Bundle* bundle)
assets = new AaptAssets();
// Set up the resource gathering in assets if we're going to generate
- // dependency files
+ // dependency files. Every time we encounter a resource while slurping
+ // the tree, we'll add it to these stores so we have full resource paths
+ // to write to a dependency file.
if (bundle->getGenDependencies()) {
sp<FilePathStore> resPathStore = new FilePathStore;
assets->setFullResPaths(resPathStore);
@@ -1577,15 +1579,20 @@ int doPackage(Bundle* bundle)
goto bail;
}
+ // If we've been asked to generate a dependency file, do that here
if (bundle->getGenDependencies()) {
+ // If this is the packaging step, generate the dependency file next to
+ // the output apk (e.g. bin/resources.ap_.d)
if (outputAPKFile) {
dependencyFile = String8(outputAPKFile);
- // Strip the extension and add new one
- dependencyFile = dependencyFile.getBasePath();
+ // Add the .d extension to the dependency file.
dependencyFile.append(".d");
} else {
+ // Else if this is the R.java dependency generation step,
+ // generate the dependency file in the R.java package subdirectory
+ // e.g. gen/com/foo/app/R.java.d
dependencyFile = String8(bundle->getRClassDir());
- dependencyFile.appendPath("R.d");
+ dependencyFile.appendPath("R.java.d");
}
// Make sure we have a clean dependency file to start with
fp = fopen(dependencyFile, "w");
@@ -1595,13 +1602,18 @@ int doPackage(Bundle* bundle)
// Write out R.java constants
if (assets->getPackage() == assets->getSymbolsPrivatePackage()) {
if (bundle->getCustomPackage() == NULL) {
+ // Write the R.java file into the appropriate class directory
+ // e.g. gen/com/foo/app/R.java
err = writeResourceSymbols(bundle, assets, assets->getPackage(), true);
- // Copy R.java for libraries
+ // If we have library files, we're going to write our R.java file into
+ // the appropriate class directory for those libraries as well.
+ // e.g. gen/com/foo/app/lib/R.java
if (bundle->getExtraPackages() != NULL) {
// Split on colon
String8 libs(bundle->getExtraPackages());
char* packageString = strtok(libs.lockBuffer(libs.length()), ":");
while (packageString != NULL) {
+ // Write the R.java file out with the correct package name
err = writeResourceSymbols(bundle, assets, String8(packageString), true);
packageString = strtok(NULL, ":");
}
@@ -1640,6 +1652,10 @@ int doPackage(Bundle* bundle)
}
}
+ // If we've been asked to generate a dependency file, we need to finish up here.
+ // the writeResourceSymbols and writeAPK functions have already written the target
+ // half of the dependency file, now we need to write the prerequisites. (files that
+ // the R.java file or .ap_ file depend on)
if (bundle->getGenDependencies()) {
// Now that writeResourceSymbols or writeAPK has taken care of writing
// the targets to our dependency file, we'll write the prereqs
@@ -1647,7 +1663,8 @@ int doPackage(Bundle* bundle)
fprintf(fp, " : ");
bool includeRaw = (outputAPKFile != NULL);
err = writeDependencyPreReqs(bundle, assets, fp, includeRaw);
- // Also manually add the AndroidManifeset since it's a non-asset
+ // Also manually add the AndroidManifeset since it's not under res/ or assets/
+ // and therefore was not added to our pathstores during slurping
fprintf(fp, "%s \\\n", bundle->getAndroidManifestFile());
fclose(fp);
}
diff --git a/tools/aapt/Package.cpp b/tools/aapt/Package.cpp
index c9f687088b4f..1e3efdeca176 100644
--- a/tools/aapt/Package.cpp
+++ b/tools/aapt/Package.cpp
@@ -177,12 +177,17 @@ status_t writeAPK(Bundle* bundle, const sp<AaptAssets>& assets,
}
}
+ // If we've been asked to generate a dependency file for the .ap_ package,
+ // do so here
if (bundle->getGenDependencies()) {
- // Add this file to the dependency file
- String8 dependencyFile = outputFile.getBasePath();
+ // The dependency file gets output to the same directory
+ // as the specified output file with an additional .d extension.
+ // e.g. bin/resources.ap_.d
+ String8 dependencyFile = outputFile;
dependencyFile.append(".d");
FILE* fp = fopen(dependencyFile.string(), "a");
+ // Add this file to the dependency file
fprintf(fp, "%s \\\n", outputFile.string());
fclose(fp);
}
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index cb6484fcf2af..2e796a2f66aa 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -1958,10 +1958,12 @@ status_t writeResourceSymbols(Bundle* bundle, const sp<AaptAssets>& assets,
}
fclose(fp);
+ // If we were asked to generate a dependency file, we'll go ahead and add this R.java
+ // as a target in the dependency file right next to it.
if (bundle->getGenDependencies()) {
// Add this R.java to the dependency file
String8 dependencyFile(bundle->getRClassDir());
- dependencyFile.appendPath("R.d");
+ dependencyFile.appendPath("R.java.d");
fp = fopen(dependencyFile.string(), "a");
fprintf(fp,"%s \\\n", dest.string());
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 7777e1918b30..e60a61c9fd97 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -82,6 +82,7 @@ public class Paint_Delegate {
private float mTextSize;
private float mTextScaleX;
private float mTextSkewX;
+ private int mHintingMode = Paint.HINTING_ON;
private Xfermode_Delegate mXfermode;
private ColorFilter_Delegate mColorFilter;
@@ -270,6 +271,28 @@ public class Paint_Delegate {
}
@LayoutlibDelegate
+ /*package*/ static int getHinting(Paint thisPaint) {
+ // get the delegate from the native int.
+ Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint);
+ if (delegate == null) {
+ return Paint.HINTING_ON;
+ }
+
+ return delegate.mHintingMode;
+ }
+
+ @LayoutlibDelegate
+ /*package*/ static void setHinting(Paint thisPaint, int mode) {
+ // get the delegate from the native int.
+ Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint);
+ if (delegate == null) {
+ return;
+ }
+
+ delegate.mHintingMode = mode;
+ }
+
+ @LayoutlibDelegate
/*package*/ static void setAntiAlias(Paint thisPaint, boolean aa) {
setFlag(thisPaint, Paint.ANTI_ALIAS_FLAG, aa);
}
@@ -1098,6 +1121,7 @@ public class Paint_Delegate {
mPathEffect = paint.mPathEffect;
mMaskFilter = paint.mMaskFilter;
mRasterizer = paint.mRasterizer;
+ mHintingMode = paint.mHintingMode;
updateFontObject();
}
@@ -1121,6 +1145,7 @@ public class Paint_Delegate {
mMaskFilter = null;
mRasterizer = null;
updateFontObject();
+ mHintingMode = Paint.HINTING_ON;
}
/**
diff --git a/voip/java/android/net/sip/SipSession.java b/voip/java/android/net/sip/SipSession.java
index 5ba162606c61..e03cf9f5aa7a 100644
--- a/voip/java/android/net/sip/SipSession.java
+++ b/voip/java/android/net/sip/SipSession.java
@@ -63,6 +63,9 @@ public final class SipSession {
/** When an OPTIONS request is sent. */
public static final int PINGING = 9;
+ /** When ending a call. @hide */
+ public static final int ENDING_CALL = 10;
+
/** Not defined. */
public static final int NOT_DEFINED = 101;
diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java
index 48d9b17dcb4a..3b3cbf3e5516 100644
--- a/voip/java/com/android/server/sip/SipSessionGroup.java
+++ b/voip/java/com/android/server/sip/SipSessionGroup.java
@@ -98,6 +98,7 @@ class SipSessionGroup implements SipListener {
private static final String THREAD_POOL_SIZE = "1";
private static final int EXPIRY_TIME = 3600; // in seconds
private static final int CANCEL_CALL_TIMER = 3; // in seconds
+ private static final int END_CALL_TIMER = 3; // in seconds
private static final int KEEPALIVE_TIMEOUT = 3; // in seconds
private static final int INCALL_KEEPALIVE_INTERVAL = 10; // in seconds
private static final long WAKE_LOCK_HOLDING_TIME = 500; // in milliseconds
@@ -756,6 +757,9 @@ class SipSessionGroup implements SipListener {
case SipSession.State.IN_CALL:
processed = inCall(evt);
break;
+ case SipSession.State.ENDING_CALL:
+ processed = endingCall(evt);
+ break;
default:
processed = false;
}
@@ -1230,8 +1234,10 @@ class SipSessionGroup implements SipListener {
// OK retransmission is handled in SipStack
if (END_CALL == evt) {
// rfc3261#section-15.1.1
+ mState = SipSession.State.ENDING_CALL;
mSipHelper.sendBye(mDialog);
- endCallNormally();
+ mProxy.onCallEnded(this);
+ startSessionTimer(END_CALL_TIMER);
return true;
} else if (isRequestEvent(Request.INVITE, evt)) {
// got Re-INVITE
@@ -1260,6 +1266,28 @@ class SipSessionGroup implements SipListener {
return false;
}
+ private boolean endingCall(EventObject evt) throws SipException {
+ if (expectResponse(Request.BYE, evt)) {
+ ResponseEvent event = (ResponseEvent) evt;
+ Response response = event.getResponse();
+
+ int statusCode = response.getStatusCode();
+ switch (statusCode) {
+ case Response.UNAUTHORIZED:
+ case Response.PROXY_AUTHENTICATION_REQUIRED:
+ if (handleAuthentication(event)) {
+ return true;
+ } else {
+ // can't authenticate; pass through to end session
+ }
+ }
+ cancelSessionTimer();
+ reset();
+ return true;
+ }
+ return false;
+ }
+
// timeout in seconds
private void startSessionTimer(int timeout) {
if (timeout > 0) {
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index 3b043b3fa495..6c6f149be1d3 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -203,70 +203,42 @@ public class WifiNative {
private native static boolean doBooleanCommand(String command);
- //STOPSHIP: remove this after native interface works and replace all
- //calls to doBooleanTempCommand() with doBooleanCommand()
- private static boolean doBooleanTempCommand(String command) {
- try {
- String str = "/system/bin/wpa_cli " + command;
- Log.e("WifiNative", "===> " + str);
- Runtime.getRuntime()
- .exec(str).waitFor();
- } catch (Exception e) {
- Log.e("WifiNative", "exception with doBooleanTempCommand");
- return false;
- }
- return true;
- }
-
- private static String doStringTempCommand(String command) {
- String lines[] = null;
- try {
- String str = "/system/bin/wpa_cli " + command;
- Log.e("WifiNative", "===> " + str);
- Process p = Runtime.getRuntime()
- .exec(str);
- InputStream in = p.getInputStream();
- p.waitFor();
- byte[] bytes=new byte[in.available()];
- in.read(bytes);
- String s = new String(bytes);
- Log.e("WifiNative", "====> doString: " + s);
- lines = s.split("\\r?\\n");
- } catch (Exception e) {
- Log.e("WifiNative", "exception with doBooleanTempCommand");
- return null;
- }
- return lines[1];
- }
-
private native static int doIntCommand(String command);
private native static String doStringCommand(String command);
+ public static boolean wpsPbc() {
+ return doBooleanCommand("WPS_PBC");
+ }
+
+ public static boolean wpsPin(String pin) {
+ return doBooleanCommand("WPS_PIN any " + pin);
+ }
+
public static boolean p2pFind() {
- return doBooleanTempCommand("p2p_find");
+ return doBooleanCommand("P2P_FIND");
}
public static boolean p2pFind(int timeout) {
if (timeout <= 0) {
return p2pFind();
}
- return doBooleanTempCommand("p2p_find " + timeout);
+ return doBooleanCommand("P2P_FIND " + timeout);
}
public static boolean p2pListen() {
- return doBooleanTempCommand("p2p_listen");
+ return doBooleanCommand("P2P_LISTEN");
}
public static boolean p2pListen(int timeout) {
if (timeout <= 0) {
return p2pListen();
}
- return doBooleanTempCommand("p2p_listen " + timeout);
+ return doBooleanCommand("P2P_LISTEN " + timeout);
}
public static boolean p2pFlush() {
- return doBooleanTempCommand("p2p_flush");
+ return doBooleanCommand("P2P_FLUSH");
}
/* p2p_connect <peer device address> <pbc|pin|PIN#> [label|display|keypad]
@@ -300,41 +272,60 @@ public class WifiNative {
if (config.isPersistent) args.add("persistent");
if (config.joinExistingGroup) args.add("join");
- args.add("go_intent=" + config.groupOwnerIntent);
+ int groupOwnerIntent = config.groupOwnerIntent;
+ if (groupOwnerIntent < 0 || groupOwnerIntent > 15) {
+ groupOwnerIntent = 3; //default value
+ }
+ args.add("go_intent=" + groupOwnerIntent);
if (config.channel > 0) args.add("freq=" + config.channel);
- String command = "p2p_connect ";
+ String command = "P2P_CONNECT ";
for (String s : args) command += s + " ";
- return doStringTempCommand(command);
+ return doStringCommand(command);
}
public static boolean p2pGroupAdd() {
- return doBooleanTempCommand("p2p_group_add");
+ return doBooleanCommand("P2P_GROUP_ADD");
}
public static boolean p2pGroupRemove(String iface) {
if (iface == null) return false;
- return doBooleanTempCommand("p2p_group_remove " + iface);
+ return doBooleanCommand("P2P_GROUP_REMOVE " + iface);
}
public static boolean p2pReject(String deviceAddress) {
- return doBooleanTempCommand("p2p_reject " + deviceAddress);
+ return doBooleanCommand("P2P_REJECT " + deviceAddress);
}
/* Invite a peer to a group */
public static boolean p2pInvite(WifiP2pGroup group, String deviceAddress) {
if (group == null || deviceAddress == null) return false;
- return doBooleanTempCommand("p2p_invite group=" + group.getInterface()
+ return doBooleanCommand("P2P_INVITE group=" + group.getInterface()
+ " peer=" + deviceAddress + " go_dev_addr=" + group.getOwner().deviceAddress);
}
- public static boolean p2pWpsPbc() {
- return doBooleanTempCommand("wps_pbc");
+ public static String p2pGetInterfaceAddress(String deviceAddress) {
+ if (deviceAddress == null) return null;
+
+ // "p2p_peer deviceAddress" returns a multi-line result containing
+ // intended_addr=fa:7b:7a:42:82:13
+ String peerInfo = p2pPeer(deviceAddress);
+ if (peerInfo == null) return null;
+ String[] tokens= peerInfo.split("\n");
+
+ for (String token : tokens) {
+ //TODO: update from interface_addr when wpa_supplicant implementation is fixed
+ if (token.startsWith("intended_addr=")) {
+ String[] nameValue = token.split("=");
+ if (nameValue.length != 2) break;
+ return nameValue[1];
+ }
+ }
+ return null;
}
- public static boolean p2pWpsPin(String pin) {
- return doBooleanTempCommand("wps_pin any " + pin);
+ public static String p2pPeer(String deviceAddress) {
+ return doStringCommand("P2P_PEER " + deviceAddress);
}
-
}
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 338cb4d0b466..c20c716a8686 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -27,6 +27,7 @@ import android.net.LinkCapabilities;
import android.net.NetworkInfo;
import android.net.LinkProperties;
import android.net.NetworkStateTracker;
+import android.net.wifi.p2p.WifiP2pManager;
import android.os.Handler;
import android.os.Message;
@@ -58,8 +59,8 @@ public class WifiStateTracker implements NetworkStateTracker {
private BroadcastReceiver mWifiStateReceiver;
private WifiManager mWifiManager;
- public WifiStateTracker() {
- mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0, NETWORKTYPE, "");
+ public WifiStateTracker(int netType, String networkName) {
+ mNetworkInfo = new NetworkInfo(netType, 0, networkName, "");
mLinkProperties = new LinkProperties();
mLinkCapabilities = new LinkCapabilities();
@@ -87,6 +88,7 @@ public class WifiStateTracker implements NetworkStateTracker {
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
+ filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mWifiStateReceiver = new WifiStateReceiver();
mContext.registerReceiver(mWifiStateReceiver, filter);
@@ -104,7 +106,6 @@ public class WifiStateTracker implements NetworkStateTracker {
/**
* Re-enable connectivity to a network after a {@link #teardown()}.
- * TODO: do away with return value after making MobileDataStateTracker async
*/
public boolean reconnect() {
mTeardownRequested.set(false);
@@ -115,7 +116,6 @@ public class WifiStateTracker implements NetworkStateTracker {
/**
* Turn the wireless radio off for a network.
* @param turnOn {@code true} to turn the radio on, {@code false}
- * TODO: do away with return value after making MobileDataStateTracker async
*/
public boolean setRadio(boolean turnOn) {
mWifiManager.setWifiEnabled(turnOn);
@@ -205,7 +205,21 @@ public class WifiStateTracker implements NetworkStateTracker {
private class WifiStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+
+ if (intent.getAction().equals(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)) {
+ mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
+ WifiP2pManager.EXTRA_NETWORK_INFO);
+ mLinkProperties = intent.getParcelableExtra(
+ WifiP2pManager.EXTRA_LINK_PROPERTIES);
+ if (mLinkProperties == null) {
+ mLinkProperties = new LinkProperties();
+ }
+ mLinkCapabilities = intent.getParcelableExtra(
+ WifiP2pManager.EXTRA_LINK_CAPABILITIES);
+ if (mLinkCapabilities == null) {
+ mLinkCapabilities = new LinkCapabilities();
+ }
+ } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
WifiManager.EXTRA_NETWORK_INFO);
mLinkProperties = intent.getParcelableExtra(
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index fff5ee38305a..b77fd76c5489 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -46,8 +46,10 @@ public class WifiP2pConfig implements Parcelable {
* This is an integer value between 0 and 15 where 0 indicates the least
* inclination to be a group owner and 15 indicates the highest inclination
* to be a group owner.
+ *
+ * A value of -1 indicates the system can choose an appropriate value.
*/
- public int groupOwnerIntent;
+ public int groupOwnerIntent = -1;
public boolean isPersistent;
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
index 83dc2856f4a4..790872656915 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
@@ -158,9 +158,6 @@ public class WifiP2pDevice implements Parcelable {
return;
}
- Pattern p = Pattern.compile("(?:[0-9a-f]{2}:){5}[0-9a-f]{2}", Pattern.CASE_INSENSITIVE);
- if (p.matcher(tokens[1]).matches()) interfaceAddress = tokens[1];
-
for (String token : tokens) {
String[] nameValue = token.split("=");
if (nameValue.length != 2) continue;
@@ -177,6 +174,7 @@ public class WifiP2pDevice implements Parcelable {
if (nameValue[0].equals("name")) {
deviceName = trimQuotes(nameValue[1]);
+ continue;
}
if (nameValue[0].equals("config_methods")) {
@@ -213,9 +211,7 @@ public class WifiP2pDevice implements Parcelable {
if (other == null || other.deviceAddress == null) {
return (deviceAddress == null);
}
- //STOPSHIP: fix later
- //return other.deviceAddress.equals(deviceAddress);
- return other.deviceAddress.startsWith(deviceAddress.substring(0,8));
+ return other.deviceAddress.equals(deviceAddress);
}
public String toString() {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index ea212accfd10..cc1f0628fbf5 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -19,13 +19,17 @@ package android.net.wifi.p2p;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.IConnectivityManager;
import android.os.Binder;
import android.os.IBinder;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.WorkSource;
import android.os.Messenger;
+import android.util.Log;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
@@ -98,6 +102,22 @@ public class WifiP2pManager {
public static final String EXTRA_NETWORK_INFO = "networkInfo";
/**
+ * The lookup key for a {@link android.net.LinkProperties} object associated with the
+ * network. Retrieve with
+ * {@link android.content.Intent#getParcelableExtra(String)}.
+ * @hide
+ */
+ public static final String EXTRA_LINK_PROPERTIES = "linkProperties";
+
+ /**
+ * The lookup key for a {@link android.net.LinkCapabilities} object associated with the
+ * network. Retrieve with
+ * {@link android.content.Intent#getParcelableExtra(String)}.
+ * @hide
+ */
+ public static final String EXTRA_LINK_CAPABILITIES = "linkCapabilities";
+
+ /**
* Broadcast intent action indicating that the available peer list has changed
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@@ -115,9 +135,6 @@ public class WifiP2pManager {
IWifiP2pManager mService;
- /* For communication with WifiP2pService */
- private AsyncChannel mAsyncChannel = new AsyncChannel();
-
/* AsyncChannel notifications to apps */
public static final int HANDLER_CONNECTION = AsyncChannel.CMD_CHANNEL_HALF_CONNECTED;
public static final int HANDLER_DISCONNECTION = AsyncChannel.CMD_CHANNEL_DISCONNECTED;
@@ -194,18 +211,35 @@ public class WifiP2pManager {
}
/**
- * Registers the application handler with the Wi-Fi framework.
- * This function must be the first to be called before any p2p control
- * or query operations can be performed.
+ * A channel that connects the application handler to the Wifi framework.
+ * All p2p operations are performed on a channel.
+ */
+ public class Channel {
+ Channel(AsyncChannel c) {
+ mAsyncChannel = c;
+ }
+ AsyncChannel mAsyncChannel;
+ }
+
+ /**
+ * Registers the application handler with the Wi-Fi framework. This function
+ * must be the first to be called before any p2p control or query operations can be performed.
* @param srcContext is the context of the source
* @param srcHandler is the handler on which the source receives messages
- * @return {@code true} if the operation succeeded
+ * @return Channel instance that is necessary for performing p2p operations
*/
- public boolean connectHandler(Context srcContext, Handler srcHandler) {
+ public Channel initialize(Context srcContext, Handler srcHandler) {
Messenger messenger = getMessenger();
- if (messenger == null) return false;
- return mAsyncChannel.connectSync(srcContext, srcHandler, messenger)
- == AsyncChannel.STATUS_SUCCESSFUL;
+ if (messenger == null) return null;
+
+ AsyncChannel asyncChannel = new AsyncChannel();
+ Channel c = new Channel(asyncChannel);
+ if (asyncChannel.connectSync(srcContext, srcHandler, messenger)
+ == AsyncChannel.STATUS_SUCCESSFUL) {
+ return c;
+ } else {
+ return null;
+ }
}
public boolean isP2pSupported() {
@@ -220,16 +254,18 @@ public class WifiP2pManager {
* Sends in a request to the system to enable p2p. This will pop up a dialog
* to the user and upon authorization will enable p2p.
*/
- public void enableP2p() {
- mAsyncChannel.sendMessage(ENABLE_P2P);
+ public void enableP2p(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(ENABLE_P2P);
}
/**
* Sends in a request to the system to disable p2p. This will pop up a dialog
* to the user and upon authorization will enable p2p.
*/
- public void disableP2p() {
- mAsyncChannel.sendMessage(DISABLE_P2P);
+ public void disableP2p(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(DISABLE_P2P);
}
/**
@@ -238,29 +274,33 @@ public class WifiP2pManager {
* A dialog to the user is thrown to request his permission since it can
* have a significant impact on power consumption
*/
- public void setListenState(int timeout) {
- mAsyncChannel.sendMessage(START_LISTEN_MODE, timeout);
+ public void setListenState(Channel c, int timeout) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(START_LISTEN_MODE, timeout);
}
/**
* Initiates peer discovery
*/
- public void discoverPeers() {
- mAsyncChannel.sendMessage(DISCOVER_PEERS);
+ public void discoverPeers(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(DISCOVER_PEERS);
}
/**
* Initiates peer discovery with a timeout
*/
- public void discoverPeers(int timeout) {
- mAsyncChannel.sendMessage(DISCOVER_PEERS, timeout);
+ public void discoverPeers(Channel c, int timeout) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(DISCOVER_PEERS, timeout);
}
/**
* Cancel any existing peer discovery operation
*/
- public void cancelPeerDiscovery() {
- mAsyncChannel.sendMessage(CANCEL_DISCOVER_PEERS);
+ public void cancelPeerDiscovery(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(CANCEL_DISCOVER_PEERS);
}
/**
@@ -268,47 +308,53 @@ public class WifiP2pManager {
*
* @param peer Configuration described in a {@link WifiP2pConfig} object.
*/
- public void connect(WifiP2pConfig config) {
- mAsyncChannel.sendMessage(CONNECT, config);
+ public void connect(Channel c, WifiP2pConfig config) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(CONNECT, config);
}
/**
* Cancel any ongoing negotiation or disconnect from an existing group
*/
- public void disconnect() {
- mAsyncChannel.sendMessage(CANCEL_CONNECT);
+ public void disconnect(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(CANCEL_CONNECT);
}
/**
* Create a p2p group. This is essentially an access point that can accept
* client connections.
*/
- public void createGroup() {
- mAsyncChannel.sendMessage(CREATE_GROUP);
+ public void createGroup(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(CREATE_GROUP);
}
/**
* Remove the current group. This also removes the p2p interface created
* during group formation.
*/
- public void removeGroup() {
- mAsyncChannel.sendMessage(REMOVE_GROUP);
+ public void removeGroup(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(REMOVE_GROUP);
}
/**
* Request current p2p settings. This returns a RESPONSE_SETTINGS on the source
* handler.
*/
- public void requestP2pSettings() {
- mAsyncChannel.sendMessage(REQUEST_SETTINGS);
+ public void requestP2pSettings(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(REQUEST_SETTINGS);
}
/**
* Request the list of peers. This returns a RESPONSE_PEERS on the source
* handler.
*/
- public void requestPeers() {
- mAsyncChannel.sendMessage(REQUEST_PEERS);
+ public void requestPeers(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(REQUEST_PEERS);
}
/**
@@ -322,8 +368,9 @@ public class WifiP2pManager {
* Request device connection status. This returns a RESPONSE_CONNECTION_STATUS on
* the source handler.
*/
- public void requestConnectionStatus() {
- mAsyncChannel.sendMessage(REQUEST_CONNECTION_STATUS);
+ public void requestConnectionStatus(Channel c) {
+ if (c == null) return;
+ c.mAsyncChannel.sendMessage(REQUEST_CONNECTION_STATUS);
}
@@ -341,4 +388,38 @@ public class WifiP2pManager {
return null;
}
}
+
+
+ /**
+ * Setup DNS connectivity on the current process to the connected Wi-Fi p2p peers
+ *
+ * @return -1 on failure
+ * @hide
+ */
+ public int startPeerCommunication() {
+ IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
+ try {
+ return cm.startUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, "p2p", new Binder());
+ } catch (RemoteException e) {
+ return -1;
+ }
+ }
+
+ /**
+ * Tear down connectivity to the connected Wi-Fi p2p peers
+ *
+ * @return -1 on failure
+ * @hide
+ */
+ public int stopPeerCommunication() {
+ IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
+ try {
+ return cm.stopUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, "p2p");
+ } catch (RemoteException e) {
+ return -1;
+ }
+ }
+
}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index 3678cfc12f29..44479718b6a6 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -25,6 +25,15 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
+import android.net.IConnectivityManager;
+import android.net.ConnectivityManager;
+import android.net.DhcpInfoInternal;
+import android.net.DhcpStateMachine;
+import android.net.InterfaceConfiguration;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.net.NetworkInfo;
+import android.net.NetworkUtils;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiMonitor;
import android.net.wifi.WifiNative;
@@ -47,16 +56,16 @@ import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.Collection;
-
import com.android.internal.R;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.Collection;
+
/**
* WifiP2pService inclues a state machine to perform Wi-Fi p2p operations. Applications
* communicate with this service to issue device discovery and connectivity requests
@@ -70,14 +79,16 @@ import com.android.internal.util.StateMachine;
public class WifiP2pService extends IWifiP2pManager.Stub {
private static final String TAG = "WifiP2pService";
private static final boolean DBG = true;
+ private static final String NETWORKTYPE = "WIFI_P2P";
private Context mContext;
private String mInterface;
INetworkManagementService mNwService;
+ private DhcpStateMachine mDhcpStateMachine;
- // Tracked to notify the user about wifi client/hotspot being shut down
- // during p2p bring up
+ //Tracked to notify the user about wifi client/hotspot being shut down
+ //during p2p bring up
private int mWifiState = WifiManager.WIFI_STATE_DISABLED;
private int mWifiApState = WifiManager.WIFI_AP_STATE_DISABLED;
@@ -85,6 +96,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
private AsyncChannel mReplyChannel = new AsyncChannel();;
private AsyncChannel mWifiChannel;
+ private static final int GROUP_NEGOTIATION_WAIT_TIME_MS = 60 * 1000;
+ private static int mGroupNegotiationTimeoutIndex = 0;
+
private static final int BASE = Protocol.BASE_WIFI_P2P_SERVICE;
/* Message sent to WifiStateMachine to indicate p2p enable is pending */
@@ -92,15 +106,24 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* Message sent to WifiStateMachine to indicate Wi-Fi client/hotspot operation can proceed */
public static final int WIFI_ENABLE_PROCEED = BASE + 2;
+ /* Delayed message to timeout of group negotiation */
+ public static final int GROUP_NEGOTIATION_TIMED_OUT = BASE + 3;
+
/* User accepted to disable Wi-Fi in order to enable p2p */
private static final int WIFI_DISABLE_USER_ACCEPT = BASE + 11;
private final boolean mP2pSupported;
+ private NetworkInfo mNetworkInfo;
+ private LinkProperties mLinkProperties;
+
public WifiP2pService(Context context) {
mContext = context;
mInterface = SystemProperties.get("wifi.interface", "wlan0");
+ mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI_P2P, 0, NETWORKTYPE, "");
+ mLinkProperties = new LinkProperties();
+
mP2pSupported = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_wifi_p2p_support);
@@ -113,7 +136,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
mContext.registerReceiver(new WifiStateReceiver(), filter);
- }
+ }
public void connectivityServiceReady() {
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
@@ -300,6 +323,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
break;
// Ignore
case WIFI_DISABLE_USER_ACCEPT:
+ case GROUP_NEGOTIATION_TIMED_OUT:
break;
default:
Slog.e(TAG, "Unhandled message " + message);
@@ -459,6 +483,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
WifiP2pManager.ENABLE_P2P_SUCCEEDED);
transitionTo(mInactiveState);
break;
+ case WifiP2pManager.DISABLE_P2P:
+ //TODO: fix
+ WifiNative.killSupplicant();
+ transitionTo(mP2pDisabledState);
default:
return NOT_HANDLED;
}
@@ -471,6 +499,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
public void enter() {
if (DBG) Slog.d(TAG, getName());
sendP2pStateChangedBroadcast(true);
+ mNetworkInfo.setIsAvailable(true);
}
@Override
@@ -526,6 +555,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
@Override
public void exit() {
sendP2pStateChangedBroadcast(false);
+ mNetworkInfo.setIsAvailable(false);
}
}
@@ -550,6 +580,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
WifiP2pGroup group = (WifiP2pGroup) message.obj;
notifyP2pInvitationReceived(group);
break;
+ case WifiP2pManager.REQUEST_PEERS:
+ return NOT_HANDLED;
default:
return NOT_HANDLED;
}
@@ -558,8 +590,11 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
}
class GroupNegotiationState extends State {
- @Override public void enter() {
+ @Override
+ public void enter() {
if (DBG) Slog.d(TAG, getName());
+ sendMessageDelayed(obtainMessage(GROUP_NEGOTIATION_TIMED_OUT,
+ ++mGroupNegotiationTimeoutIndex, 0), GROUP_NEGOTIATION_WAIT_TIME_MS);
}
@Override
@@ -582,18 +617,29 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
case WifiMonitor.P2P_GROUP_STARTED_EVENT:
mGroup = (WifiP2pGroup) message.obj;
if (DBG) Slog.d(TAG, getName() + " group started");
- // If this device is GO, do nothing since there is a follow up
- // AP_STA_CONNECTED event
- if (!mGroup.isGroupOwner()) {
+ if (mGroup.isGroupOwner()) {
+ startDhcpServer(mGroup.getInterface());
+ } else {
+ mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(mContext,
+ P2pStateMachine.this, mGroup.getInterface());
+ mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP);
WifiP2pDevice groupOwner = mGroup.getOwner();
updateDeviceStatus(groupOwner.deviceAddress, Status.CONNECTED);
sendP2pPeersChangedBroadcast();
}
transitionTo(mGroupCreatedState);
break;
- case WifiP2pManager.CANCEL_CONNECT:
+ case WifiP2pManager.CANCEL_CONNECT:
// TODO: fix
break;
+ case GROUP_NEGOTIATION_TIMED_OUT:
+ if (mGroupNegotiationTimeoutIndex == message.arg1) {
+ if (DBG) Slog.d(TAG, "Group negotiation timed out");
+ updateDeviceStatus(mSavedConnectConfig.deviceAddress, Status.FAILED);
+ mSavedConnectConfig = null;
+ transitionTo(mInactiveState);
+ }
+ break;
default:
return NOT_HANDLED;
}
@@ -605,6 +651,11 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
@Override
public void enter() {
if (DBG) Slog.d(TAG, getName());
+ mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null);
+
+ if (mGroup.isGroupOwner()) {
+ sendP2pConnectionChangedBroadcast();
+ }
}
@Override
@@ -612,17 +663,20 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
if (DBG) Slog.d(TAG, getName() + message.toString());
switch (message.what) {
case WifiMonitor.AP_STA_CONNECTED_EVENT:
- String address = (String) message.obj;
- mGroup.addClient(address);
- updateDeviceStatus(address, Status.CONNECTED);
+ //After a GO setup, STA connected event comes with interface address
+ String interfaceAddress = (String) message.obj;
+ String deviceAddress = getDeviceAddress(interfaceAddress);
+ mGroup.addClient(deviceAddress);
+ updateDeviceStatus(deviceAddress, Status.CONNECTED);
if (DBG) Slog.d(TAG, getName() + " ap sta connected");
sendP2pPeersChangedBroadcast();
break;
case WifiMonitor.AP_STA_DISCONNECTED_EVENT:
- address = (String) message.obj;
- updateDeviceStatus(address, Status.AVAILABLE);
- if (mGroup.removeClient(address)) {
- if (DBG) Slog.d(TAG, "Removed client " + address);
+ interfaceAddress = (String) message.obj;
+ deviceAddress = getDeviceAddress(interfaceAddress);
+ updateDeviceStatus(deviceAddress, Status.AVAILABLE);
+ if (mGroup.removeClient(deviceAddress)) {
+ if (DBG) Slog.d(TAG, "Removed client " + deviceAddress);
if (mGroup.isClientListEmpty()) {
Slog.d(TAG, "Client list empty, killing p2p connection");
sendMessage(WifiP2pManager.REMOVE_GROUP);
@@ -631,14 +685,23 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
sendP2pPeersChangedBroadcast();
}
} else {
- if (DBG) Slog.d(TAG, "Failed to remove client " + address);
+ if (DBG) Slog.d(TAG, "Failed to remove client " + deviceAddress);
for (WifiP2pDevice c : mGroup.getClientList()) {
if (DBG) Slog.d(TAG,"client " + c.deviceAddress);
}
}
if (DBG) Slog.e(TAG, getName() + " ap sta disconnected");
break;
- // Disconnect & remove group have same effect when connected
+ case DhcpStateMachine.CMD_POST_DHCP_ACTION:
+ DhcpInfoInternal dhcpInfo = (DhcpInfoInternal) message.obj;
+ if (DBG) Slog.d(TAG, "DhcpInfo: " + dhcpInfo);
+ if (dhcpInfo != null) {
+ mLinkProperties = dhcpInfo.makeLinkProperties();
+ mLinkProperties.setInterfaceName(mGroup.getInterface());
+ sendP2pConnectionChangedBroadcast();
+ }
+ break;
+ //disconnect & remove group have same effect when connected
case WifiP2pManager.CANCEL_CONNECT:
case WifiP2pManager.REMOVE_GROUP:
if (DBG) Slog.e(TAG, getName() + " remove group");
@@ -655,6 +718,16 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
changed = true;
}
}
+
+ if (mGroup.isGroupOwner()) {
+ stopDhcpServer();
+ } else {
+ if (DBG) Slog.d(TAG, "stop DHCP client");
+ mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP);
+ mDhcpStateMachine.quit();
+ mDhcpStateMachine = null;
+ }
+
mGroup = null;
if (changed) sendP2pPeersChangedBroadcast();
transitionTo(mInactiveState);
@@ -663,10 +736,12 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
WifiP2pDevice device = (WifiP2pDevice) message.obj;
if (device.equals(mGroup.getOwner())) {
Slog.d(TAG, "Lost the group owner, killing p2p connection");
- sendMessage(WifiP2pManager.REMOVE_GROUP);
+ WifiNative.p2pFlush();
+ WifiNative.p2pGroupRemove(mGroup.getInterface());
} else if (mGroup.removeClient(device) && mGroup.isClientListEmpty()) {
Slog.d(TAG, "Client list empty, killing p2p connection");
- sendMessage(WifiP2pManager.REMOVE_GROUP);
+ WifiNative.p2pFlush();
+ WifiNative.p2pGroupRemove(mGroup.getInterface());
}
return NOT_HANDLED; // Do the regular device lost handling
case WifiP2pManager.DISABLE_P2P:
@@ -695,16 +770,20 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
notifyP2pProvDiscPinRequest((WifiP2pDevice) message.obj);
break;
case WifiP2pManager.WPS_PBC:
- WifiNative.p2pWpsPbc();
+ WifiNative.wpsPbc();
break;
case WifiP2pManager.WPS_PIN:
- WifiNative.p2pWpsPin((String) message.obj);
+ WifiNative.wpsPin((String) message.obj);
break;
default:
return NOT_HANDLED;
}
return HANDLED;
}
+
+ public void exit() {
+ mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, null, null);
+ }
}
private void sendP2pStateChangedBroadcast(boolean enabled) {
@@ -726,6 +805,55 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
mContext.sendBroadcast(intent);
}
+ private void sendP2pConnectionChangedBroadcast() {
+ if (DBG) Slog.d(TAG, "sending p2p connection changed broadcast");
+ Intent intent = new Intent(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
+ | Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ intent.putExtra(WifiP2pManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo));
+ intent.putExtra(WifiP2pManager.EXTRA_LINK_PROPERTIES,
+ new LinkProperties (mLinkProperties));
+ mContext.sendStickyBroadcast(intent);
+ }
+
+ private void startDhcpServer(String intf) {
+ /* Is chosen as a unique range to avoid conflict with
+ the range defined in Tethering.java */
+ String[] dhcp_range = {"192.168.49.2", "192.168.49.254"};
+ String serverAddress = "192.168.49.1";
+
+ mLinkProperties.clear();
+ mLinkProperties.setInterfaceName(mGroup.getInterface());
+
+ InterfaceConfiguration ifcg = null;
+ try {
+ ifcg = mNwService.getInterfaceConfig(intf);
+ ifcg.addr = new LinkAddress(NetworkUtils.numericToInetAddress(
+ serverAddress), 24);
+ ifcg.interfaceFlags = "[up]";
+ mNwService.setInterfaceConfig(intf, ifcg);
+ /* This starts the dnsmasq server */
+ mNwService.startTethering(dhcp_range);
+ } catch (Exception e) {
+ Slog.e(TAG, "Error configuring interface " + intf + ", :" + e);
+ return;
+ }
+
+ mLinkProperties.addDns(NetworkUtils.numericToInetAddress(serverAddress));
+ Slog.d(TAG, "Started Dhcp server on " + intf);
+ }
+
+ private void stopDhcpServer() {
+ try {
+ mNwService.stopTethering();
+ } catch (Exception e) {
+ Slog.e(TAG, "Error stopping Dhcp server" + e);
+ return;
+ }
+
+ Slog.d(TAG, "Stopped Dhcp server");
+ }
+
private void notifyP2pEnableFailure() {
Resources r = Resources.getSystem();
AlertDialog dialog = new AlertDialog.Builder(mContext)
@@ -760,11 +888,16 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
.setView(textEntryView)
.setPositiveButton(r.getString(R.string.ok), new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
- if (DBG) Slog.d(TAG, getName() + " connect " + pin.getText());
+ if (DBG) Slog.d(TAG, getName() + " connect " + pin.getText());
+
+ if (pin.getVisibility() == View.GONE) {
+ mSavedGoNegotiationConfig.wpsConfig.setup = Setup.PBC;
+ } else {
mSavedGoNegotiationConfig.wpsConfig.setup = Setup.KEYPAD;
mSavedGoNegotiationConfig.wpsConfig.pin = pin.getText().toString();
- sendMessage(WifiP2pManager.CONNECT, mSavedGoNegotiationConfig);
- mSavedGoNegotiationConfig = null;
+ }
+ sendMessage(WifiP2pManager.CONNECT, mSavedGoNegotiationConfig);
+ mSavedGoNegotiationConfig = null;
}
})
.setNegativeButton(r.getString(R.string.cancel), new OnClickListener() {
@@ -875,12 +1008,20 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
private void updateDeviceStatus(String deviceAddress, Status status) {
for (WifiP2pDevice d : mPeers.getDeviceList()) {
- // TODO: fix later
- // if (d.deviceAddress.equals(deviceAddress)) {
- if (d.deviceAddress.startsWith(deviceAddress.substring(0, 8))) {
+ if (d.deviceAddress.equals(deviceAddress)) {
d.status = status;
}
}
}
+
+ private String getDeviceAddress(String interfaceAddress) {
+ for (WifiP2pDevice d : mPeers.getDeviceList()) {
+ if (interfaceAddress.equals(WifiNative.p2pGetInterfaceAddress(d.deviceAddress))) {
+ return d.deviceAddress;
+ }
+ }
+ return null;
+ }
+
}
}